{"info":{"_postman_id":"73d019a5-db11-4bd2-a444-5e6fb289f4a4","name":"Form.io API Documentation","description":"<html><head></head><body><p>Form.io is an API-first platform. It provides a 'headless' environment that uses REST APIs to do everything from managing Projects and Forms, to even the run-time application APIs to submit and read submission data within a form. These APIs can be categorized into 3 primary 'scopes' based on what operations you wish to perform within the Form.io platform.</p>\n<ol>\n<li><p><strong>Platform Scope</strong> - These APIs are used to manage Form.io workflows such as project administration, team collaboration, and stage deployments across multiple environments.</p>\n</li>\n<li><p><strong>Project Scope</strong> - These APIs are used to manage project level configurations including forms, actions, and access management within a project.</p>\n</li>\n<li><p><strong>Runtime Scope</strong> - These are the APIs used by an application during run-time.</p>\n</li>\n</ol>\n<p>Each of these 'scopes' require different authentication contexts and incorporate different endpoints, so for that reason they will be documented separately.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"684631","collectionId":"73d019a5-db11-4bd2-a444-5e6fb289f4a4","publishedId":"2sBXiok9LB","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-04-08T14:59:38.000Z"},"item":[{"name":"Getting Started","item":[{"name":"Pagination","id":"d35e41b0-3a9e-47f2-a609-8bf2b84bc401","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?select=title,type,modified&limit=2&skip=2","description":"<p>For any \"Index API\", pagination queries are supported to enable the documents to be returned based on a <strong>limit</strong> and a <strong>skip. These are provided as query parameters and are provided as follows:</strong></p>\n<p><code>https://forms.yoursite.com/myproject/form?limit=10&amp;skip=10</code></p>\n<p><strong>These query parameters are defined as follows.</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Query Parameter Name</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>limit</td>\n<td>This is the 'page' limit for the amount of documents returned by the API. This value can be any number greater than 0.</td>\n</tr>\n<tr>\n<td>skip</td>\n<td>This is the amount of records to 'skip' to show as the start record. This is useful for pagination.</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"page-range-headers\">Page Range Headers</h4>\n<p>For every <strong>Index API, a</strong> <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Range\">Content Range Response Header </a> is used to provide the client information about how many records exist within the endpoint. This is provided using the following response header syntax:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Content-Range: {{ skipIndex }}-{{ lastIndex }}/{{ numItems }}\n\n</code></pre><p>Both the skipIndex and the lastIndex are \"inclusive\" which means that they are the indexes of documents included in the response. The following documentation is provided for these parameters</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Range Parameter</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>skipIndex</code></td>\n<td>This is the 0-based \"inclusive\" index of the first item returned.</td>\n</tr>\n<tr>\n<td><code>lastIndex</code></td>\n<td>This is the 0-based \"inclusive\" index of the last item in the returned documents. This will typically be (<code>limit</code> - 1) UNLESS the (skip + limit) is greater than the amount of records provided. For this case, the lastIndex will be the equal to (numItems - 1).  <br />  <br /><code>lastIndex = ((skip + limit) &gt; numItems) ? (numItems - 1) : (limit - 1);</code></td>\n</tr>\n<tr>\n<td><code>numItems</code></td>\n<td>Always returns the total amount of records within this endpoint.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Examples</strong>:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Content-Range</strong></th>\n<th></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0-9/20</td>\n<td>Page Limit = 10  <br />First Page (skip=0)  <br />20 total items</td>\n</tr>\n<tr>\n<td>5-9/12</td>\n<td>Page Limit = 5  <br />Second Page (skip=5)  <br />12 total items</td>\n</tr>\n<tr>\n<td>10-18/18</td>\n<td>Page Limit &gt;= 9 (most likely 10 because skip=10)  <br />Second Page (skip = 10)  <br />18 total items</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"select","value":"title,type,modified"},{"key":"limit","value":"2"},{"key":"skip","value":"2"}],"variable":[]}},"response":[{"id":"7b0c073a-94bf-4c5f-bde7-8a1ff013e821","name":"Pagination","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/form?select=title,type,modified&limit=2&skip=2","protocol":"https","host":["forms","example","com"],"path":["example","form"],"query":[{"key":"select","value":"title,type,modified"},{"key":"limit","value":"2"},{"key":"skip","value":"2"}]}},"status":"Partial Content","code":206,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 17:41:44 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"223"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"2-3/9"},{"key":"Link","value":"</form?select=title,type,modified&limit=2&skip=2>; rel=\"next\"; items=\"4-5\", </form?select=title,type,modified&limit=2&skip=2>; rel=\"last\"; items=\"8-9\", </form?select=title,type,modified&limit=2&skip=2>; rel=\"prev\"; items=\"0-1\", </form?select=title,type,modified&limit=2&skip=2>; rel=\"first\"; items=\"0-1\""},{"key":"Last-Modified","value":"Tue, 07 Apr 2026 14:26:02 GMT"},{"key":"ETag","value":"W/\"df-Fsuh+zSjiQJ6VDNRxpWm83/vRvQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d4249c8ae33e911322c9ee\",\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-06T21:24:44.608Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9f4\",\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-06T21:24:44.621Z\"\n    }\n]"}],"_postman_id":"d35e41b0-3a9e-47f2-a609-8bf2b84bc401"},{"name":"Sorting","id":"de693864-804d-4ce7-b29f-145655768223","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?select=title,type,modified&sort=type,-title","description":"<p>All Index APIs support a sort parameter that provides a way to sort the returned data based on the sort query value. The value of the sort parameter is the key of the field you wish to <code>sort</code>, and the sort direction is provided by adding a <code>-</code> (minus symbol) in front of the query value.</p>\n<p>For example, the following queries mean the following:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Sort Query</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>?sort=title</code></td>\n<td>Sort the documents based on the title property in alphabetical ascending order</td>\n</tr>\n<tr>\n<td><code>?sort=-title</code></td>\n<td>Sort the documents based on the title property in alphabetical decending order</td>\n</tr>\n<tr>\n<td><code>?sort=type,-title</code></td>\n<td>Sort the documents first on <code>type</code> in ascending order, and then on <code>title</code> in descending order.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"select","value":"title,type,modified"},{"key":"sort","value":"type,-title"}],"variable":[]}},"response":[{"id":"96dea05b-2b47-4f49-8ebd-17e9a1c37af1","name":"Sorting","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/form?select=title,type,modified&sort=type,-title","protocol":"https","host":["forms","example","com"],"path":["example","form"],"query":[{"key":"select","value":"title,type,modified"},{"key":"sort","value":"type,-title"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 18:21:31 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"985"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-8/9"},{"key":"Link","value":""},{"key":"Last-Modified","value":"Tue, 07 Apr 2026 14:26:02 GMT"},{"key":"ETag","value":"W/\"3d9-9wr6V1SdOqR2csmdd8HKczkxVuI\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d4249c8ae33e911322c9fb\",\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-06T21:24:44.632Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9f4\",\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-06T21:24:44.621Z\"\n    },\n    {\n        \"_id\": \"69d424f18ae33e911322cda0\",\n        \"title\": \"Example Form\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-07T13:02:18.830Z\"\n    },\n    {\n        \"_id\": \"69d512a08ae33e911322e199\",\n        \"title\": \"Application\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-07T14:26:02.848Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322ca02\",\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-06T21:24:44.642Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9e2\",\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-06T21:24:44.581Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9ee\",\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-06T21:24:44.608Z\"\n    },\n    {\n        \"_id\": \"69d504a68ae33e911322dcd1\",\n        \"title\": \"Employee\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-07T13:20:38.678Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9e8\",\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-06T21:24:44.594Z\"\n    }\n]"}],"_postman_id":"de693864-804d-4ce7-b29f-145655768223"},{"name":"Content Filtering","id":"243c73c6-f337-4717-8601-0b836f513c99","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?select=title,type,modified","description":"<p>Each Index API has the ability to limit the amount of data that is returned to the client application. This is useful if you wish to reduce the payload size of each index request being made, and improves overall performance of your application. This is achieved by providing the query paramer <code>select</code>. Here is how it works.</p>\n<p>Let's consider a client application UI that wishes to show all of the Forms within a project, and this is visually shown within a data table that only has 3 columns. Form Title, Type, and Modified Date. For this example, it is immensely more efficient to tell the form index API to ONLY return the fields that are provided within the data table. In the case of forms, this means that it will completely skip the 'components' within that form, which will cut down on the transfer size significantly. This can be done by providing a <code>select</code> query parameter with a comma separated values of ONLY the properties within the form you wish to have returned.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>?select=title,type,modified\n\n</code></pre>","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"select","value":"title,type,modified"}],"variable":[]}},"response":[{"id":"6a2fbf37-73ae-45a5-a406-3595f44ecdb2","name":"Content Filtering","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/form?select=title,type,modified","protocol":"https","host":["forms","example","com"],"path":["example","form"],"query":[{"key":"select","value":"title,type,modified"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 18:21:52 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"985"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-8/9"},{"key":"Link","value":""},{"key":"Last-Modified","value":"Tue, 07 Apr 2026 14:26:02 GMT"},{"key":"ETag","value":"W/\"3d9-ychkaFcTM2UOgH7ztLl7VDkpm4E\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d4249c8ae33e911322c9e2\",\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-06T21:24:44.581Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9e8\",\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-06T21:24:44.594Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9ee\",\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-06T21:24:44.608Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9f4\",\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-06T21:24:44.621Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9fb\",\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-06T21:24:44.632Z\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322ca02\",\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-06T21:24:44.642Z\"\n    },\n    {\n        \"_id\": \"69d424f18ae33e911322cda0\",\n        \"title\": \"Example Form\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-07T13:02:18.830Z\"\n    },\n    {\n        \"_id\": \"69d504a68ae33e911322dcd1\",\n        \"title\": \"Employee\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-07T13:20:38.678Z\"\n    },\n    {\n        \"_id\": \"69d512a08ae33e911322e199\",\n        \"title\": \"Application\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-07T14:26:02.848Z\"\n    }\n]"}],"_postman_id":"243c73c6-f337-4717-8601-0b836f513c99"},{"name":"Search","id":"bb94f3ed-cd7f-4340-9c37-76bff7564f6a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?select=title,name,path&name=application","description":"<p>In order to find specific documents within the index, you can also perform queries for any poperty within that document. For example, a typical submission is as follows.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"_id\": \"57cf908e6605476b00fab81f\",\n    \"modified\": \"2016-09-07T03:59:10.836Z\",\n    \"data\": {\n        \"firstName\": \"Joe\",\n        \"lastName\": \"Smith\",\n        \"email\": \"joe@example.com\",\n        \"phoneNumber\": \"234234234\"\n    },\n    \"form\": \"57c6d2a1783e146f00bc65c4\",\n    \"created\": \"2016-09-07T03:59:10.818Z\",\n    \"externalIds\": [],\n    \"access\": [],\n    \"roles\": [\"57c6d2a1783e146f00bc65c2\"],\n    \"owner\": \"553dbfc08d22d5cb1a7024f2\"\n}\n\n</code></pre><p>Where the submission data can be found within the <code>data</code> object. So, lets say you wish to find all people in the submissions who have the last name of Smith, you would run the following query.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>http://forms.example.com/myproject/register/submission?data.lastName=Smith\n\n</code></pre><h3 id=\"filter-operations\">Filter Operations</h3>\n<p>In addition to using <code>=</code> you can use a number of other parameters and search criteria to fully refine your search. These parameters are as follows.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Filter</th>\n<th>Query</th>\n<th>Example</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>equal</strong></td>\n<td><code>equals</code></td>\n<td><code>data.gender=male</code></td>\n<td>both return all male users</td>\n</tr>\n<tr>\n<td><strong>not equal</strong></td>\n<td><code>ne</code></td>\n<td><code>data.gender__ne=male</code></td>\n<td>returns all users who are not male (<code>female</code> and <code>x</code>)</td>\n</tr>\n<tr>\n<td><strong>greater than</strong></td>\n<td><code>gt</code></td>\n<td><code>data.age__gt=18</code></td>\n<td>returns all users older than 18</td>\n</tr>\n<tr>\n<td><strong>greater than or equal to</strong></td>\n<td><code>gte</code></td>\n<td><code>data.age__gte=18</code></td>\n<td>returns all users 18 and older (age should be a number property)</td>\n</tr>\n<tr>\n<td><strong>less than</strong></td>\n<td><code>lt</code></td>\n<td><code>data.age__lt=30</code></td>\n<td>returns all users age 29 and younger</td>\n</tr>\n<tr>\n<td><strong>less than or equal to</strong></td>\n<td><code>lte</code></td>\n<td><code>data.age__lte=30</code></td>\n<td>returns all users age 30 and younger</td>\n</tr>\n<tr>\n<td><strong>in</strong></td>\n<td><code>in</code></td>\n<td><code>data.gender__in=female,male</code></td>\n<td>returns all female and male users</td>\n</tr>\n<tr>\n<td><strong>nin</strong></td>\n<td><code>nin</code></td>\n<td><code>data.age__nin=18,21</code></td>\n<td>returns all users who are not 18 or 21</td>\n</tr>\n<tr>\n<td><strong>exists=true</strong></td>\n<td><code>exists</code></td>\n<td><code>data.age__exists=true</code></td>\n<td>returns all users where the age is provided.</td>\n</tr>\n<tr>\n<td><strong>exists=false</strong></td>\n<td><code>exists</code></td>\n<td><code>data.age__exists=false</code></td>\n<td>returns all users where the age is not provided.</td>\n</tr>\n<tr>\n<td><strong>Regex</strong></td>\n<td><code>regex</code></td>\n<td><code>data.username__regex=/^travis/i</code></td>\n<td>returns all users with a username starting with travis</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"boolean-and-special-values\">Boolean and Special Values</h3>\n<p>To filter boolean and special values, such as \"null\", \"true\", or \"false\" (not strings), you can use the <code>__eq</code> and <code>__ne</code> selectors. If you need to force any values to be interpereted as a string, you can wrap that value with \", which is the URL Encoded character of '\"'. Below is a table with some examples of how these characters are interpereted.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Filter</th>\n<th>Description</th>\n<th>Example</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>[PROPERTY]=null</td>\n<td>Filters values equal to string \"null\"</td>\n<td>title=null</td>\n</tr>\n<tr>\n<td>[PROPERTY]__eq=null</td>\n<td>Filters all values equal to \"null\" (not string)</td>\n<td>modified__eq=null</td>\n</tr>\n<tr>\n<td>[PROPERTY]__ne=null</td>\n<td>Filters all values not equal to \"null\" (not string)</td>\n<td>deleted__ne=null</td>\n</tr>\n<tr>\n<td>[PROPERTY]__ne=\"null\"</td>\n<td>Filters all values not equal to string \"null\"</td>\n<td>title__ne=\"null\"</td>\n</tr>\n</tbody>\n</table>\n</div><p>The same filters above can also apply for the boolean values of \"true\" and \"false\".</p>\n<h3 id=\"multiple-queries\">Multiple Queries</h3>\n<p>It is also possible to have multiple search queries performed by adding an <code>&amp;</code> within the URL and then provide an additional query. It should be noted, however, that these queries will be AND operations, meaning it will only return the records that are true for all the queries provided.</p>\n<p>For example, let's suppose you have a form and you wish to find all submissions where <code>data.lastName=Thompson</code> AND <code>data.age &gt; 30</code> your query would look as follows.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>http://forms.example.com/myproject/myform/submission?data.lastName=Thompson&amp;data.age__gt=30\n\n</code></pre>","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"select","value":"title,name,path"},{"key":"name","value":"application"}],"variable":[]}},"response":[{"id":"afa82a23-b3d5-417e-8537-e2ed010f8e49","name":"Search","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/form?select=title,name,path&name=application","protocol":"https","host":["forms","example","com"],"path":["example","form"],"query":[{"key":"select","value":"title,name,path"},{"key":"name","value":"application"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 18:24:18 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"100"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"Last-Modified","value":"Tue, 07 Apr 2026 14:26:02 GMT"},{"key":"ETag","value":"W/\"64-7LMp8uBMH8NkEXVV5Jx14zyw3CI\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d512a08ae33e911322e199\",\n        \"title\": \"Application\",\n        \"name\": \"application\",\n        \"path\": \"application\"\n    }\n]"}],"_postman_id":"bb94f3ed-cd7f-4340-9c37-76bff7564f6a"}],"id":"b50a2fa9-d6b4-48eb-9d74-b1771060d64e","description":"<p>Before we dive into the 3 'scoped' APIs, it is important to understand how to read this documentation. Because Form.io provides a number of configurable APIs, the endpoints can be dynamic based on the URL for your deployment, as well as what forms and resources that have been created within your project.</p>\n<h2 id=\"api-handlebar-tokens\">API Handlebar Tokens</h2>\n<p>The Form.io is architected so that the API endpoints are dynamically generated based on where the platform is deployed as well as the structure of the forms and resources within a project. Because of the dynamic nature of this API, this documentation will use the following handlebar tokens to be replaced with your environments specific values. These variables are shown in this documentation in between <code>handlebar</code> notation.</p>\n<p>These are as follows:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Token</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>{{ baseUrl }}</code></td>\n<td>The root endpoint for your deployment.</td>\n<td><a href=\"https://forms.mysite.com\">https://forms.example.com</a></td>\n</tr>\n<tr>\n<td><code>{{ projectUrl }}</code></td>\n<td>The 'alias' endpoint for a specific project</td>\n<td><a href=\"https://forms.mysite.com/myproject\">https://forms.example.com/myproject</a></td>\n</tr>\n<tr>\n<td><code>{{ projectName }}</code></td>\n<td>The name of the project. This is also used as the project 'alias' in the endpoint urls.</td>\n<td>myproject</td>\n</tr>\n<tr>\n<td><code>{{ projectId }}</code></td>\n<td>The _id of the project document.</td>\n<td>650a5bfbb9ac8160c0968d80</td>\n</tr>\n<tr>\n<td><code>{{ formId }}</code></td>\n<td>A form JSON _id</td>\n<td>650a5bfcb9ac8160c0968db0</td>\n</tr>\n<tr>\n<td><code>{{ formPath }}</code></td>\n<td>The path property of a Form JSON. This is used as the form 'alias' when referencing the form.</td>\n<td>application</td>\n</tr>\n<tr>\n<td><code>{{ submissionId }}</code></td>\n<td>The _id of a submission JSON object</td>\n<td>650a5bfdb9ac8160c0968e59</td>\n</tr>\n<tr>\n<td><code>{{ platformAdminJWT }}</code></td>\n<td>The JWT token of the platform administrator that logs in using the ADMIN_EMAIL and ADMIN_PASS environment variables.</td>\n<td>-- JWT STRING --</td>\n</tr>\n<tr>\n<td><code>{{ platformUserJWT }}</code></td>\n<td>The JWT token of a user logging into the Portal Base project.</td>\n<td>--JWT STRING --</td>\n</tr>\n<tr>\n<td><code>{{ projectAdminJWT }}</code></td>\n<td>The JWT token of the project admin, that authenticates within the Project scope as an Administrator role.</td>\n<td>-- JWT STRING --</td>\n</tr>\n<tr>\n<td><code>{{ pdfServer }}</code></td>\n<td>The endpoint for the PDF server deployed within your own environment.</td>\n<td><a href=\"https://forms.myexample.com/pdf\">https://forms.myexample.com/pdf</a></td>\n</tr>\n<tr>\n<td><code>{{ pdfAdminKey }}</code></td>\n<td>The value of the <code>FORMIO_PDF_ADMINKEY</code> added to the PDF server environment if the Direct (server-to-server) PDF APIs wish to be used.</td>\n<td>CHANGEME</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"index-apis\">Index APIs</h2>\n<p>Throughout this API documentation, there will be APIs that are referenced as <strong>Index API</strong>'s. These APIs are GET requests that are capable of returning multiple documents at a time. They also provide a number of parameters that support Pagination (limit and skip), Search, and Content Filtering. This documentation applies to any API that is labeled as an \"Index API\". The Index API applies to the following index APIs</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong><code>Index API</code></strong></th>\n<th><strong><code>Description</code></strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>GET: /project</code></td>\n<td>Returns a list of available projects within a deployment</td>\n</tr>\n<tr>\n<td><code>GET: /project/{{ projectId }}/form</code></td>\n<td>Returns a list of available forms within a project</td>\n</tr>\n<tr>\n<td><code>GET: /{{ projectName }}/form</code></td>\n<td>An alias of the 'form' index above. Returns a list of available forms within a project</td>\n</tr>\n<tr>\n<td><code>GET: /{{ projectName }}/form/{{ formId }}/submission</code></td>\n<td>Returns a lists of submissions within a form</td>\n</tr>\n<tr>\n<td><code>GET: /{{ projectName }}/{{ formPath }}/submission</code></td>\n<td>Alias of the 'submission' index above. Returns a list of available submissions within a project.</td>\n</tr>\n<tr>\n<td><code>GET: /{{ projectName }}/{{ formPath }}/v</code></td>\n<td>Returns a list of Form revisions</td>\n</tr>\n<tr>\n<td><code>GET: /{{ projectName }}/{{ formPath }}/submission/{{ submissionId }}/v</code></td>\n<td>Returns a list of Submission revisions</td>\n</tr>\n<tr>\n<td><code>GET: /{{ projectName }}/tag</code></td>\n<td>Returns a list of project version tags</td>\n</tr>\n</tbody>\n</table>\n</div><p>For all of these endpoints, the following documentation applies</p>\n","_postman_id":"b50a2fa9-d6b4-48eb-9d74-b1771060d64e"},{"name":"Authentication","item":[{"name":"OIDC Token Swap","id":"0b448c1c-28d3-429d-b9c4-09c474ff7171","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/current","description":"<p>For any application that already has an OAuth authentication setup, it is possible to use your existing OAuth Bearer token to 'swap' for a valid Form.io authentication token. This 'swapped' token can then be used to enable all future interactions with form.io to be authenticated using the new form.io token.</p>\n<p>To do this, you should have an existing Bearer (or other) authorization token from the OAuth provider.</p>\n<p>It is important to note that the OpenID and OpenID Connect settings must be configured within in your project in order for this process to work.</p>\n<p>This will respond with a response header <code>x-jwt-token</code>, which can then be used for other requests using the x-jwt-token as the header for those requests.</p>\n<p>For more information about the Token Swap system, please go to <a href=\"https://help.form.io/developers/auth/oauth#token-swap\">https://help.form.io/developers/auth/oauth#token-swap</a> to read more information about it.</p>\n","urlObject":{"path":["{{ projectName }}","current"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"c537bfb9-3a0f-4386-8e74-70848e5596d5","name":"OIDC Token Swap","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...","type":"text"}],"url":"https://forms.example.com/example/current"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 20:32:26 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"806"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"326-S9zlX4iN7g78QNDmZkRC6e49ZUo\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d6813b040fa2cea257285a\",\n    \"form\": \"69d65f4e040fa2cea2572267\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"69d65f4e040fa2cea2572254\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"99\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"login\": {\n            \"attempts\": 0,\n            \"last\": 1775665910479\n        }\n    },\n    \"data\": {\n        \"email\": \"jacynthe_johns@yahoo.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"externalTokens\": [],\n    \"created\": \"2026-04-08T16:24:27.923Z\",\n    \"modified\": \"2026-04-08T16:24:27.923Z\",\n    \"isAdmin\": false,\n    \"onlyPrimaryWriteAccess\": false\n}"}],"_postman_id":"0b448c1c-28d3-429d-b9c4-09c474ff7171"}],"id":"1fa9b4f9-9dce-4429-ad77-7586c54fe585","description":"<p>The Form.io platform has a wide range of flexibility when it comes to authentication. The authentication methods below can also be used within ALL the API scopes that are mentioned within this API documentation. Throughout this documentation, the Form.io Auth method will be used to keep the documentation consistent. However, it should be noted that Form.io supports the following authentication methods:</p>\n<ol>\n<li><p><strong>Form.io Authentication</strong>: By default, Form.io uses a Resource form as the means to store 'users' and through the Login action assigned to a login form, it is possible to authenticate as a resource submission, which will have allocated roles assigned to it. All of this documentation is written with this authentication in mind, but it should be noted that any other authentication methods are also supported.</p>\n</li>\n<li><p><strong>OpenID Connect</strong>: It is possible to configure your project to use OAuth OIDC specification to authenticate within a project. See <a href=\"https://help.form.io/developers/auth/oauth#openid-connect-oidc\">https://help.form.io/developers/auth/oauth#openid-connect-oidc</a></p>\n</li>\n<li><p><strong>SAML</strong>: A project can also leverage SAML as the authentication method: <a href=\"https://help.form.io/developers/auth/saml#introduction\">https://help.form.io/developers/auth/saml#introduction</a></p>\n</li>\n<li><p><strong>LDAP</strong>: To read instructions on how to use LDAP for authentication methods, please go to <a href=\"https://help.form.io/developers/auth/ldap#setup\">https://help.form.io/developers/auth/ldap#setup</a> for more information.</p>\n</li>\n</ol>\n","_postman_id":"1fa9b4f9-9dce-4429-ad77-7586c54fe585"},{"name":"Platform Scope","item":[{"name":"Authentication","item":[{"name":"Platform Admin Login","event":[{"listen":"test","script":{"id":"8a1e6924-bf04-4d3b-b247-e066085188d7","exec":["pm.environment.set(' platformAdminJWT ', pm.response.headers.get('x-jwt-token'));"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"6288e216-f572-4667-af1e-5ee208665b95","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"{{ ADMIN_EMAIL }}\",\n    \"password\": \"{{ ADMIN_PASS }}\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/formio/user/login","description":"<p>When a new deployment is created with <code>PORTAL_ENABLED=true</code>, a default admin user is created as the first user for that deployment. This admin user is defined with the following environment variables:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong><code>Environment Variable</code></strong></th>\n<th>Example</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>ADMIN_EMAIL</code></td>\n<td><a href=\"https://mailto:admin@example.com\">admin@example.com</a></td>\n</tr>\n<tr>\n<td><code>ADMIN_PASS</code></td>\n<td>CHANGEME</td>\n</tr>\n</tbody>\n</table>\n</div><p>These variables are used to create the 'default\" admin account within the Portal Base project. This account can be seen by navigating into the Portal Base project, and then go to <code>Resources &gt; Admin &gt; Data</code>. There you will see the following.</p>\n<img src=\"https://content.pstmn.io/5acae9e1-5cce-4e18-ab27-dd366c1162d1/Rm9ybS5JTyAyMDI2LTAzLTMwIDA5LTUzLTAyLnBuZw==\" />\n\n<p>This is the first account that is used to login as the primary platform administrator.</p>\n","urlObject":{"path":["formio","user","login"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"c7d45d20-f4a1-48fd-884e-dbb53c02b348","name":"Platform Admin Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"admin@example.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/formio/user/login"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 17:10:16 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"692"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2b4-7UYPsZyaNBwPRBJn3OnxCEHgwM8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"650a5bfdb9ac8160c0968e59\",\n    \"form\": \"650a5bfcb9ac8160c0968db0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"650a5bfbb9ac8160c0968d91\"\n    ],\n    \"data\": {\n        \"fullName\": \"Admin\",\n        \"email\": \"admin@example.com\",\n        \"twoFactorAuthenticationEnabled\": false\n    },\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"access\": [],\n    \"externalIds\": [],\n    \"created\": \"2023-09-20T02:42:05.729Z\",\n    \"modified\": \"2023-09-24T03:05:36.227Z\",\n    \"metadata\": {\n        \"timezone\": \"America/Chicago\",\n        \"offset\": -300,\n        \"origin\": \"https://forms.example.com\",\n        \"referrer\": \"\",\n        \"browserName\": \"Netscape\",\n        \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36\",\n        \"pathName\": \"/\",\n        \"onLine\": true\n    }\n}"}],"_postman_id":"6288e216-f572-4667-af1e-5ee208665b95"},{"name":"New Platform User","event":[{"listen":"test","script":{"id":"f108431c-ef0a-4363-8d49-aba7fae4758c","exec":["pm.environment.set(\" platformUserEmail \", pm.response.json().data.email);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"de72c29b-4a63-47e8-a044-2a8659c2a32e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","description":"<p>A platform administrators JWT token</p>\n","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"fullName\": \"Developer\",\n    \"email\": \"Jordan_Paucek@hotmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/formio/user","description":"<p>New platform users can now be added to a deployment with the following POST request. These are users that you plan on logging into the Developer Portal to help administrate the deployment. The following variables are used:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Token</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>platformUserEmail</code></td>\n<td>An email address of a new platform user</td>\n</tr>\n<tr>\n<td><code>platformUserPass</code></td>\n<td>A password for the new platform user</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["formio","user"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"aa33a7be-18dd-4f32-9e1a-05740445bd64","name":"New Platform User","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","description":"A platform administrators JWT token","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"fullName\": \"Developer\",\n    \"email\": \"developer@example.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/formio/user"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 17:11:38 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"689"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2b1-EBj7oHDt6O462n5LnP+/BdPOUNM\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"650a5bfcb9ac8160c0968da9\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"650a5bfbb9ac8160c0968d9e\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"93\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"fullName\": \"Developer\",\n        \"email\": \"admin2@example.com\"\n    },\n    \"_id\": \"69d53aca8ae33e911322ea41\",\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-07T17:11:38.917Z\",\n    \"modified\": \"2026-04-07T17:11:38.919Z\"\n}"}],"_postman_id":"de72c29b-4a63-47e8-a044-2a8659c2a32e"},{"name":"Platform User Login","event":[{"listen":"test","script":{"id":"89fe8953-65c6-4b85-b1e3-085372518cbd","exec":["pm.environment.set(\" platformUserJWT \", pm.response.headers.get('x-jwt-token'));"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"b5261182-701f-4c9f-b380-7e0637e8bef1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"{{ platformUserEmail }}\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/formio/user/login","description":"<p>Once a user has been created, they can then login to the Developer Portal using their credentials.</p>\n","urlObject":{"path":["formio","user","login"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"af7303f9-c2de-4785-b3da-fb89ac7665c0","name":"Platform User Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"developer@example.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/formio/user/login"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 17:13:18 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"689"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2b1-gyuGiz2dNetHclDp1XS0sVWP87E\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d53aca8ae33e911322ea41\",\n    \"form\": \"650a5bfcb9ac8160c0968da9\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"650a5bfbb9ac8160c0968d9e\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"93\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"fullName\": \"Developer\",\n        \"email\": \"developer@example.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-07T17:11:38.917Z\",\n    \"modified\": \"2026-04-07T17:11:38.919Z\"\n}"}],"_postman_id":"b5261182-701f-4c9f-b380-7e0637e8bef1"},{"name":"Get current user","id":"218357b8-fb28-4b8b-9a3e-a256dac84a8a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}","type":"text"}],"url":"{{ baseUrl }}/formio/current","description":"<p>Any authenticated platform user can send a GET command to the <code>/formio/current</code> endpoint to determine their user information as well as fetch an updated JWT token.</p>\n","urlObject":{"path":["formio","current"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"7b8e4c29-b24b-4e5e-b88a-c2110bafddc4","name":"Get current user","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}","type":"text"}],"url":"https://forms.example.com/formio/current"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 13:04:35 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"788"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"314-AhbDHAy/r87RPlphXgo3DuGVMG0\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d65f4e040fa2cea2572226\",\n    \"form\": \"650a5bfcb9ac8160c0968da9\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"650a5bfbb9ac8160c0968d9e\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"134\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"fullName\": \"Developer\",\n        \"email\": \"louvenia_jerde98@yahoo.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"externalTokens\": [],\n    \"created\": \"2026-04-08T13:59:42.348Z\",\n    \"modified\": \"2026-04-08T13:59:42.348Z\",\n    \"isAdmin\": false,\n    \"onlyPrimaryWriteAccess\": false\n}"}],"_postman_id":"218357b8-fb28-4b8b-9a3e-a256dac84a8a"},{"name":"Platform User Logout","id":"c29702ae-2e3b-4c46-81d9-572c8a617ee5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}","type":"text"}],"url":"{{ baseUrl }}/formio/logout","description":"<p>To logout of the Form.io platform, you simply need to send a GET request to the <code>/formio/logout</code> endpoint and then provide your platform authenticated JWT token along with the request. Not only will then perform a logout within the application, but it will also invalidate the current session of the user so that any outstanding tokens will be immediately invalidated.</p>\n","urlObject":{"path":["formio","logout"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"84476727-1171-463e-8f2c-1cf257540b46","name":"Platform User Logout","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}","type":"text"}],"url":"https://forms.example.com/formio/logout"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 13:02:00 GMT"},{"key":"Content-Type","value":"text/plain; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":""},{"key":"ETag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"OK"}],"_postman_id":"c29702ae-2e3b-4c46-81d9-572c8a617ee5"},{"name":"Using Identity Providers","id":"eb7cef37-676c-49ca-901a-82c729fa63a2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"","description":"<p>It is possible to leverage external Identity Providers with the Platform authentication scope. This allows an organization to use their existing IDP along with their authentication method of choice (OIDC, SAML, LDAP, etc) to authenticate their users and through their team associations, they can then gain access to Form.io Projects.</p>\n<p>Due to the large amount of variance, it is recommended to read through the documentation at <a href=\"https://help.form.io/developers/auth\">https://help.form.io/developers/auth</a> to understand how to configure your project for authentication through an external Identity Provider.</p>\n","urlObject":{"query":[],"variable":[]}},"response":[],"_postman_id":"eb7cef37-676c-49ca-901a-82c729fa63a2"}],"id":"09fa664f-066f-416a-babf-37e6f3ddba07","description":"<p>The project that provides all Authentication scopes for the <strong>Developer Portal</strong> is a special project called <strong>Portal Base</strong>. This project is automatically created for any deployment that has the following environment variable enabled.</p>\n<ul>\n<li><code>PORTAL_ENABLED=true</code></li>\n</ul>\n<p>This is a special project that is used to manage all of the authentication settings as well as users responsible for platform management. This project can be accessed using the following project endpoint:</p>\n<ul>\n<li><code>{{ baseUrl }}/formio</code></li>\n</ul>\n<p>It is through this project that all platform users will be authenticated and granted access to projects within the Form.io platform. It is important that no Forms or Resources are added or modified within this project.</p>\n<h3 id=\"platform-token-replacements\">Platform Token Replacements</h3>\n<p>For all of these APIs the following tokens will be used</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Token</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>{{ ADMIN_EMAIL }}</code></td>\n<td>The value for the deployments environment variable ADMIN_EMAIL. This variable is the default super users email address.</td>\n</tr>\n<tr>\n<td><code>{{ ADMIN_PASS }}</code></td>\n<td>The value for the deployments environment variable ADMIN_PASS. This variable is the default super user password.</td>\n</tr>\n<tr>\n<td><code>{{ platformAdminJWT }}</code></td>\n<td>The JWT token that is received when logging into the super user.</td>\n</tr>\n<tr>\n<td><code>{{ platformUserEmail }}</code></td>\n<td>The email address of a user that is added to the Portal Base 'User' resource. This is someone who can log into the developer portal, but must be added to a team to gain access to any projects within a deployment.</td>\n</tr>\n<tr>\n<td><code>{{ platformUserJWT }}</code></td>\n<td>The JWT token recieved from a developer portal user</td>\n</tr>\n<tr>\n<td><code>{{ teamId }}</code></td>\n<td>The ID of a team that is created within the Developer Portal. This is related to the \"_id\" of that team object.</td>\n</tr>\n<tr>\n<td><code>{{ memberId }}</code></td>\n<td>The ID of a team member that is added to the {{ teamId }}</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"09fa664f-066f-416a-babf-37e6f3ddba07"},{"name":"Project API","item":[{"name":"Create Project","event":[{"listen":"test","script":{"id":"cd7538bf-b9a9-4b16-bc9c-39ffc8492e44","exec":["pm.environment.set(\" projectName \", pm.response.json().name);","pm.environment.set(\" projectId \", pm.response.json()._id);","pm.environment.set(\" projectTitle \", pm.response.json().title);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"7453eabb-1522-4294-99a7-3eb67346468b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Example Project\",\n  \"description\": \"This is an example Form.io project.\",\n  \"name\": \"example\",\n  \"type\": \"project\",\n  \"settings\": {\n    \"cors\": \"*\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/project","description":"<p>To create a new project, you need to send the following POST request to the \"/project\" endpoint. The following parameters are used within the body.</p>\n<h3 id=\"body-parameters\">Body Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Parameter Name</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>title</td>\n<td>yes</td>\n<td>The title for the project</td>\n</tr>\n<tr>\n<td>stageTitle</td>\n<td>no</td>\n<td>The name for the stage (if different from title)</td>\n</tr>\n<tr>\n<td>name</td>\n<td>no</td>\n<td>The URL path for the project. If not provided, a random 'name' will be generated.</td>\n</tr>\n<tr>\n<td>type</td>\n<td>yes</td>\n<td>The type of project that is being created. The options are as follows:  <br />- project  <br />- tenant  <br />- stage</td>\n</tr>\n<tr>\n<td>settings</td>\n<td>no</td>\n<td>The project settings for this project. See the <a href=\"https://help.form.io/userguide/projects/project-settings\">Project Settings</a> help documentation for more information about the available project settings.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["project"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"e58b5868-a58a-40eb-9d5c-e18d9491f2e1","name":"Create Project","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Example Project\",\n  \"description\": \"This is an example Form.io project.\",\n  \"name\": \"example\",\n  \"type\": \"project\",\n  \"settings\": {\n    \"cors\": \"*\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/project"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 15 Apr 2026 16:03:40 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"720"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2d0-n+7yor+XRgOeiI5B0tQXDY/nMJo\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dfb6dcbb04c38a91029771\",\n    \"title\": \"Example Project\",\n    \"name\": \"example\",\n    \"type\": \"project\",\n    \"description\": \"This is an example Form.io project.\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"angular\",\n    \"protect\": false,\n    \"formDefaults\": null,\n    \"access\": [\n        {\n            \"type\": \"create_all\",\n            \"roles\": [\n                \"69dfb6dcbb04c38a91029778\"\n            ]\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69dfb6dcbb04c38a91029778\"\n            ]\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": [\n                \"69dfb6dcbb04c38a91029778\"\n            ]\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": [\n                \"69dfb6dcbb04c38a91029778\"\n            ]\n        }\n    ],\n    \"trial\": \"2026-04-15T16:03:40.619Z\",\n    \"created\": \"2026-04-15T16:03:40.619Z\",\n    \"modified\": \"2026-04-15T16:03:40.623Z\",\n    \"settings\": {\n        \"cors\": \"*\"\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {},\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"7453eabb-1522-4294-99a7-3eb67346468b"},{"name":"List all Projects, Stages, and Tenants","event":[{"listen":"test","script":{"id":"cb0d9dd5-da68-40bb-abfe-4ece3046192d","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"3bb61d34-d6e1-4192-921f-58aa9be7b7d0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/project?select=title,name,type","description":"<p>To list all of the projects within a deployment, you simply need to send a GET request to the project endpoint. This will return ALL projects including all top-level projects, Stages, and Tenants.</p>\n","urlObject":{"path":["project"],"host":["{{ baseUrl }}"],"query":[{"key":"select","value":"title,name,type"}],"variable":[]}},"response":[{"id":"ca553769-0c6c-4ee0-a2b2-d99c7d6fe8f4","name":"List all Projects, Stages, and Tenants","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/project?select=title,name,type","protocol":"https","host":["forms","example","com"],"path":["project"],"query":[{"key":"select","value":"title,name,type"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:05:19 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"4143"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-24/25"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"102f-UZzPetcNc3GogXfyaUvCTdcMjjI\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"650a5bfbb9ac8160c0968d80\",\n        \"title\": \"Portal Base\",\n        \"name\": \"formio\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"650a5db8b9ac8160c09693d4\",\n        \"title\": \"Human Resources Portal\",\n        \"name\": \"humanresources\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"650a5db8b9ac8160c096943b\",\n        \"title\": \"Authoring\",\n        \"name\": \"authoring-humanresources\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"650a709502e48b3e4df9ff96\",\n        \"title\": \"Tenant A\",\n        \"name\": \"tenant-a-humanresources\",\n        \"type\": \"tenant\"\n    },\n    {\n        \"_id\": \"650a70bc02e48b3e4dfa0255\",\n        \"title\": \"Tenant B\",\n        \"name\": \"tenant-b-humanresources\",\n        \"type\": \"tenant\"\n    },\n    {\n        \"_id\": \"650a70c902e48b3e4dfa039e\",\n        \"title\": \"Tenant C\",\n        \"name\": \"tenant-c-humanresources\",\n        \"type\": \"tenant\"\n    },\n    {\n        \"_id\": \"650a70eb02e48b3e4dfa0600\",\n        \"title\": \"Dev\",\n        \"name\": \"dev-humanresources\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"64da4f36de57f43377c9899a\",\n        \"title\": \"Local\",\n        \"name\": \"local-dicer\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"651185882e5eae71be60b314\",\n        \"title\": \"Sandbox\",\n        \"name\": \"sandbox\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"651185882e5eae71be60b37a\",\n        \"title\": \"Authoring\",\n        \"name\": \"authoring-sandbox\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"6537e95d9c994d33f3b58fde\",\n        \"title\": \"Tenant D\",\n        \"name\": \"tenant-d-humanresources\",\n        \"type\": \"tenant\"\n    },\n    {\n        \"_id\": \"65e0b8ef71ffaa987527a992\",\n        \"title\": \"Dev\",\n        \"name\": \"dev-sandbox\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"6632775784a479920c4fcd58\",\n        \"title\": \"A\",\n        \"name\": \"a-humanresources\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"6632775f84a479920c4fce62\",\n        \"title\": \"B\",\n        \"name\": \"b-humanresources\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"6697dbe076cc4c1e688a20e9\",\n        \"title\": \"Edge\",\n        \"name\": \"edge-humanresources\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"6704280d05c5cefc33f157ac\",\n        \"title\": \"QA\",\n        \"name\": \"qa-humanresources\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"6723f5eb05c5cefc33f1e2f3\",\n        \"title\": \"Tenant A\",\n        \"name\": \"tenant-a-sandbox\",\n        \"type\": \"tenant\"\n    },\n    {\n        \"_id\": \"67b755bf85721ddbfbadeb78\",\n        \"title\": \"Template\",\n        \"name\": \"template-humanresources\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"590d3019ad3ba1005dae39d5\",\n        \"title\": \"MedPortal\",\n        \"name\": \"mportal\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"690c16a65ab0459c87f7ffe9\",\n        \"title\": \"UAG\",\n        \"name\": \"uag\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"690c16a75ab0459c87f8005f\",\n        \"title\": \"Authoring\",\n        \"name\": \"authoring-uag\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"69cc33b68ae33e91132292d5\",\n        \"title\": \"Forms\",\n        \"name\": \"forms-sandbox\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9ce\",\n        \"title\": \"Example\",\n        \"name\": \"example\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322ca46\",\n        \"title\": \"Authoring\",\n        \"name\": \"authoring-hktdmpnzqzhnnwg\",\n        \"type\": \"stage\"\n    },\n    {\n        \"_id\": \"69d6527d42ae1f2fed8c5627\",\n        \"title\": \"Example Project\",\n        \"name\": \"example\",\n        \"type\": \"project\"\n    }\n]"}],"_postman_id":"3bb61d34-d6e1-4192-921f-58aa9be7b7d0"},{"name":"List all Projects","event":[{"listen":"test","script":{"id":"cb0d9dd5-da68-40bb-abfe-4ece3046192d","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"cdcf1da8-4e37-4a38-9916-f048fb6f5a94","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/project?type=project&select=title,name,type","description":"<p>This is an IndexAPI that is used to list all of the top-level projects within a deployment, you need to provide the type of that project.</p>\n","urlObject":{"path":["project"],"host":["{{ baseUrl }}"],"query":[{"key":"type","value":"project"},{"key":"select","value":"title,name,type"}],"variable":[]}},"response":[{"id":"b0364e55-7607-4758-b53a-9582f5925974","name":"List all Projects","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/project?type=project&select=title,name,type","protocol":"https","host":["forms","example","com"],"path":["project"],"query":[{"key":"type","value":"project"},{"key":"select","value":"title,name,type"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:11:08 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1143"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-6/7"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"477-zXZhyAymcIfn+qGy3+b2jqPwZR4\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"650a5bfbb9ac8160c0968d80\",\n        \"title\": \"Portal Base\",\n        \"name\": \"formio\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"650a5db8b9ac8160c09693d4\",\n        \"title\": \"Human Resources Portal\",\n        \"name\": \"humanresources\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"651185882e5eae71be60b314\",\n        \"title\": \"Sandbox\",\n        \"name\": \"sandbox\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"590d3019ad3ba1005dae39d5\",\n        \"title\": \"MedPortal\",\n        \"name\": \"mportal\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"690c16a65ab0459c87f7ffe9\",\n        \"title\": \"UAG\",\n        \"name\": \"uag\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"69d4249c8ae33e911322c9ce\",\n        \"title\": \"Example\",\n        \"name\": \"example\",\n        \"type\": \"project\"\n    },\n    {\n        \"_id\": \"69d6527d42ae1f2fed8c5627\",\n        \"title\": \"Example Project\",\n        \"name\": \"example\",\n        \"type\": \"project\"\n    }\n]"}],"_postman_id":"cdcf1da8-4e37-4a38-9916-f048fb6f5a94"},{"name":"Update Project","id":"8992d8b5-3a43-4d75-8e8e-194ff79bcf0a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ projectId }}\",\n  \"title\": \"{{ projectTitle }} Updated\",\n  \"name\": \"{{ projectName }}\",\n  \"type\": \"project\",\n  \"description\": \"This is an updated project.\",\n  \"tag\": \"0.0.0\",\n  \"owner\": \"650a5bfdb9ac8160c0968e59\",\n  \"plan\": \"commercial\",\n  \"steps\": [],\n  \"framework\": \"angular\",\n  \"protect\": false,\n  \"formDefaults\": {},\n  \"access\": [\n    {\n      \"type\": \"create_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_all\",\n      \"roles\": [\n        \"69cbf1998ae33e9113228b89\"\n      ]\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69cbf1998ae33e9113228b89\"\n      ]\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_all\",\n      \"roles\": [\n        \"69cbf1998ae33e9113228b89\"\n      ]\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_all\",\n      \"roles\": [\n        \"69cbf1998ae33e9113228b89\"\n      ]\n    },\n    {\n      \"type\": \"team_read\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_write\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_admin\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_access\",\n      \"roles\": []\n    }\n  ],\n  \"trial\": \"2026-03-31T16:08:57.320Z\",\n  \"created\": \"2026-03-31T16:08:57.320Z\",\n  \"modified\": \"2026-03-31T16:08:57.322Z\",\n  \"settings\": {\n    \"cors\": \"*\",\n    \"appOrigin\": \"https://forms.example.com\",\n    \"allowConfig\": false,\n    \"email\": {\n      \"smtp\": {\n        \"secure\": false,\n        \"host\": \"\",\n        \"port\": \"\",\n        \"auth\": {\n          \"user\": \"\",\n          \"pass\": \"\"\n        }\n      },\n      \"sendgrid\": {\n        \"auth\": {\n          \"api_key\": \"\"\n        }\n      },\n      \"mailgun\": {\n        \"auth\": {\n          \"api_key\": \"\",\n          \"domain\": \"\"\n        }\n      },\n      \"custom\": {\n        \"url\": \"\",\n        \"username\": \"\",\n        \"password\": \"\"\n      }\n    },\n    \"storage\": {\n      \"azure\": {\n        \"connectionString\": \"\",\n        \"container\": \"\",\n        \"startsWith\": \"\"\n      }\n    },\n    \"oauth\": {\n      \"github\": {\n        \"clientId\": \"\",\n        \"clientSecret\": \"\"\n      },\n      \"google\": {\n        \"clientId\": \"\",\n        \"clientSecret\": \"\"\n      }\n    },\n    \"sqlconnector\": {\n      \"host\": \"\",\n      \"type\": \"\",\n      \"user\": \"\",\n      \"password\": \"\"\n    },\n    \"ldap\": {\n      \"url\": \"\",\n      \"bindDn\": \"\",\n      \"bindCredentials\": \"\",\n      \"searchBase\": \"\",\n      \"searchFilter\": \"\"\n    },\n    \"tenantNamePath\": \"\",\n    \"tenantRolePath\": \"\",\n    \"esign\": {\n      \"kms\": \"\"\n    },\n    \"kms\": {},\n    \"pdf\": {\n      \"translationsUrl\": \"\"\n    },\n    \"csp\": \"\",\n    \"secret\": \"\",\n    \"custom\": {\n      \"css\": \"\",\n      \"js\": \"\"\n    },\n    \"formModule\": \"\",\n    \"recaptcha\": {\n      \"siteKey\": \"\",\n      \"secretKey\": \"\"\n    },\n    \"captcha\": {\n      \"siteKey\": \"\",\n      \"secretKey\": \"\"\n    },\n    \"google\": {\n      \"clientId\": \"\",\n      \"cskey\": \"\",\n      \"refreshtoken\": \"\"\n    },\n    \"kickbox\": {\n      \"apikey\": \"\"\n    }\n  },\n  \"public\": {\n    \"formModule\": \"\",\n    \"custom\": {},\n    \"defaultStage\": \"\"\n  },\n  \"stageTitle\": \"Live\",\n  \"config\": {}\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}","description":"<p>Projects can be updated by sending a PUT request against the project endpoint.</p>\n<h3 id=\"project-endpoints\">Project Endpoints</h3>\n<p>There are 2 different endpoints that can be used for the Project Endpoint, where one is considered to be the 'full' path of the project, and the other is considered to be the 'alias' project endpoint.</p>\n<p>For example, if I create a new project with a <strong>name</strong> of \"example\", the following endpoints point to the same project endpoint.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong><code>Endpoint</code></strong></th>\n<th><strong><code>Description</code></strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>https://forms.yoursite.com/project/69cbf1998ae33e9113228b82</code></td>\n<td>This is the 'full' endpoint for a project. It is provided using the endpoint of '/project/{ projectId }' where projectId is the ID of the project you wish to fetch.</td>\n</tr>\n<tr>\n<td><code>https://forms.yoursite.com/example</code></td>\n<td>This is the 'alias' endpoint of a project. It is provided using the endpoint '/{ projectName }' where projectName is the 'name' of the project.</td>\n</tr>\n</tbody>\n</table>\n</div><p>For both the PUT (update) and GET (retrieve) requests, as well as any endpoint within, you can use either the 'full' project API path or the 'alias' project URL to send API traffic against. For example, if you wish to GET a form, the following APIs are equivalent.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Endpoint</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>https://forms.yoursite.com/project/69cbf1998ae33e9113228b82/form</code></td>\n<td>Performing a GET request to this endpoint would list all forms within a project</td>\n</tr>\n<tr>\n<td><code>https://forms.yoursite.com/example/form</code></td>\n<td>Performing a GET request to this endpoint would be equivalent to the endpoint above but is using the 'alias' API endpoint instead of the 'full' endpoint.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["{{ projectName }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"e6509ad2-eaf4-4879-909c-3af8e18a18bc","name":"Update Project","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69dfb6dcbb04c38a91029771\",\n  \"title\": \"Example Project Updated\",\n  \"name\": \"example\",\n  \"type\": \"project\",\n  \"description\": \"This is an updated project.\",\n  \"tag\": \"0.0.0\",\n  \"owner\": \"650a5bfdb9ac8160c0968e59\",\n  \"plan\": \"commercial\",\n  \"steps\": [],\n  \"framework\": \"angular\",\n  \"protect\": false,\n  \"formDefaults\": {},\n  \"access\": [\n    {\n      \"type\": \"create_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_all\",\n      \"roles\": [\n        \"69cbf1998ae33e9113228b89\"\n      ]\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69cbf1998ae33e9113228b89\"\n      ]\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_all\",\n      \"roles\": [\n        \"69cbf1998ae33e9113228b89\"\n      ]\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_all\",\n      \"roles\": [\n        \"69cbf1998ae33e9113228b89\"\n      ]\n    },\n    {\n      \"type\": \"team_read\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_write\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_admin\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_access\",\n      \"roles\": []\n    }\n  ],\n  \"trial\": \"2026-03-31T16:08:57.320Z\",\n  \"created\": \"2026-03-31T16:08:57.320Z\",\n  \"modified\": \"2026-03-31T16:08:57.322Z\",\n  \"settings\": {\n    \"cors\": \"*\",\n    \"appOrigin\": \"https://forms.example.com\",\n    \"allowConfig\": false,\n    \"email\": {\n      \"smtp\": {\n        \"secure\": false,\n        \"host\": \"\",\n        \"port\": \"\",\n        \"auth\": {\n          \"user\": \"\",\n          \"pass\": \"\"\n        }\n      },\n      \"sendgrid\": {\n        \"auth\": {\n          \"api_key\": \"\"\n        }\n      },\n      \"mailgun\": {\n        \"auth\": {\n          \"api_key\": \"\",\n          \"domain\": \"\"\n        }\n      },\n      \"custom\": {\n        \"url\": \"\",\n        \"username\": \"\",\n        \"password\": \"\"\n      }\n    },\n    \"storage\": {\n      \"azure\": {\n        \"connectionString\": \"\",\n        \"container\": \"\",\n        \"startsWith\": \"\"\n      }\n    },\n    \"oauth\": {\n      \"github\": {\n        \"clientId\": \"\",\n        \"clientSecret\": \"\"\n      },\n      \"google\": {\n        \"clientId\": \"\",\n        \"clientSecret\": \"\"\n      }\n    },\n    \"sqlconnector\": {\n      \"host\": \"\",\n      \"type\": \"\",\n      \"user\": \"\",\n      \"password\": \"\"\n    },\n    \"ldap\": {\n      \"url\": \"\",\n      \"bindDn\": \"\",\n      \"bindCredentials\": \"\",\n      \"searchBase\": \"\",\n      \"searchFilter\": \"\"\n    },\n    \"tenantNamePath\": \"\",\n    \"tenantRolePath\": \"\",\n    \"esign\": {\n      \"kms\": \"\"\n    },\n    \"kms\": {},\n    \"pdf\": {\n      \"translationsUrl\": \"\"\n    },\n    \"csp\": \"\",\n    \"secret\": \"\",\n    \"custom\": {\n      \"css\": \"\",\n      \"js\": \"\"\n    },\n    \"formModule\": \"\",\n    \"recaptcha\": {\n      \"siteKey\": \"\",\n      \"secretKey\": \"\"\n    },\n    \"captcha\": {\n      \"siteKey\": \"\",\n      \"secretKey\": \"\"\n    },\n    \"google\": {\n      \"clientId\": \"\",\n      \"cskey\": \"\",\n      \"refreshtoken\": \"\"\n    },\n    \"kickbox\": {\n      \"apikey\": \"\"\n    }\n  },\n  \"public\": {\n    \"formModule\": \"\",\n    \"custom\": {},\n    \"defaultStage\": \"\"\n  },\n  \"stageTitle\": \"Live\",\n  \"config\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:16:16 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1837"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"72d-y6+q/O6Izjazbo3zyz8Qgl2rWy8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Example Project Updated\",\n    \"name\": \"example\",\n    \"type\": \"project\",\n    \"description\": \"This is an updated project.\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"config\": {},\n    \"framework\": \"angular\",\n    \"protect\": false,\n    \"access\": [\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        }\n    ],\n    \"trial\": \"2026-03-31T16:08:57.320Z\",\n    \"formDefaults\": {},\n    \"stageTitle\": \"Live\",\n    \"_id\": \"69d6527d42ae1f2fed8c5627\",\n    \"created\": \"2026-03-31T16:08:57.320Z\",\n    \"modified\": \"2026-04-08T13:16:16.252Z\",\n    \"settings\": {\n        \"cors\": \"*\",\n        \"appOrigin\": \"https://forms.example.com\",\n        \"allowConfig\": false,\n        \"email\": {\n            \"smtp\": {\n                \"secure\": false,\n                \"host\": \"\",\n                \"port\": \"\",\n                \"auth\": {\n                    \"user\": \"\",\n                    \"pass\": \"\"\n                }\n            },\n            \"sendgrid\": {\n                \"auth\": {\n                    \"api_key\": \"\"\n                }\n            },\n            \"mailgun\": {\n                \"auth\": {\n                    \"api_key\": \"\",\n                    \"domain\": \"\"\n                }\n            },\n            \"custom\": {\n                \"url\": \"\",\n                \"username\": \"\",\n                \"password\": \"\"\n            }\n        },\n        \"storage\": {\n            \"azure\": {\n                \"connectionString\": \"\",\n                \"container\": \"\",\n                \"startsWith\": \"\"\n            }\n        },\n        \"oauth\": {\n            \"github\": {\n                \"clientId\": \"\",\n                \"clientSecret\": \"\"\n            },\n            \"google\": {\n                \"clientId\": \"\",\n                \"clientSecret\": \"\"\n            }\n        },\n        \"sqlconnector\": {\n            \"host\": \"\",\n            \"type\": \"\",\n            \"user\": \"\",\n            \"password\": \"\"\n        },\n        \"ldap\": {\n            \"url\": \"\",\n            \"bindDn\": \"\",\n            \"bindCredentials\": \"\",\n            \"searchBase\": \"\",\n            \"searchFilter\": \"\"\n        },\n        \"tenantNamePath\": \"\",\n        \"tenantRolePath\": \"\",\n        \"esign\": {\n            \"kms\": \"\"\n        },\n        \"kms\": {},\n        \"pdf\": {\n            \"translationsUrl\": \"\"\n        },\n        \"csp\": \"\",\n        \"secret\": \"\",\n        \"custom\": {\n            \"css\": \"\",\n            \"js\": \"\"\n        },\n        \"formModule\": \"\",\n        \"recaptcha\": {\n            \"siteKey\": \"\",\n            \"secretKey\": \"\"\n        },\n        \"captcha\": {\n            \"siteKey\": \"\",\n            \"secretKey\": \"\"\n        },\n        \"google\": {\n            \"clientId\": \"\",\n            \"cskey\": \"\",\n            \"refreshtoken\": \"\"\n        },\n        \"kickbox\": {\n            \"apikey\": \"\"\n        }\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {\n            \"css\": \"\",\n            \"js\": \"\"\n        },\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"8992d8b5-3a43-4d75-8e8e-194ff79bcf0a"},{"name":"Get project - Full Endpoint","id":"c09f421d-0475-40ef-aac1-4167be5713cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"{{ baseUrl }}/project/{{ projectId }}","description":"<p>Since there are two separate endpoints for a Project, you can use either to access any API method on that endpoint as well as use that endpoint as the prefix to any APIs within the project endpoint scope. This API is an example of using the 'full' endpoint to retrieve the project information.</p>\n","urlObject":{"path":["project","{{ projectId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"96c17cf2-bc70-463f-b24f-e306fd895dc2","name":"Get project - Full Endpoint","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"https://forms.example.com/project/69dfb6dcbb04c38a91029771"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 15 Apr 2026 16:05:59 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"2210"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"8a2-ww7WHznJaiO+0XWhG/30wCR651A\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dfb6dcbb04c38a91029771\",\n    \"title\": \"Example Project\",\n    \"name\": \"example\",\n    \"type\": \"project\",\n    \"description\": \"An example project\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"angular\",\n    \"protect\": false,\n    \"formDefaults\": {},\n    \"access\": [\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        }\n    ],\n    \"trial\": \"2026-03-31T16:08:57.320Z\",\n    \"created\": \"2026-03-31T16:08:57.320Z\",\n    \"modified\": \"2026-04-15T16:05:12.173Z\",\n    \"config\": {},\n    \"stageTitle\": \"Live\",\n    \"apiCalls\": {\n        \"limit\": {\n            \"options\": {\n                \"server\": true,\n                \"pdf\": true,\n                \"premium\": true,\n                \"offline\": true,\n                \"reporting\": true,\n                \"appserver\": true,\n                \"sac\": true\n            },\n            \"endpoints\": [\n                \".*\"\n            ],\n            \"hostnames\": [\n                \".*\"\n            ],\n            \"stages\": 7,\n            \"tenants\": 0,\n            \"projectsNumberLimit\": 10,\n            \"formManagers\": 1,\n            \"scopes\": [\n                \"apiServer\",\n                \"pdfServer\",\n                \"project\",\n                \"formManager\",\n                \"tenant\",\n                \"stage\"\n            ]\n        },\n        \"used\": {},\n        \"licenseId\": \"remote\",\n        \"formManager\": true,\n        \"accessibility\": true,\n        \"tenant\": true\n    },\n    \"settings\": {\n        \"cors\": \"*\",\n        \"appOrigin\": \"https://forms.example.com\",\n        \"allowConfig\": false,\n        \"email\": {\n            \"smtp\": {\n                \"secure\": false,\n                \"host\": \"\",\n                \"port\": \"\",\n                \"auth\": {\n                    \"user\": \"\",\n                    \"pass\": \"\"\n                }\n            },\n            \"sendgrid\": {\n                \"auth\": {\n                    \"api_key\": \"\"\n                }\n            },\n            \"mailgun\": {\n                \"auth\": {\n                    \"api_key\": \"\",\n                    \"domain\": \"\"\n                }\n            },\n            \"custom\": {\n                \"url\": \"\",\n                \"username\": \"\",\n                \"password\": \"\"\n            }\n        },\n        \"storage\": {\n            \"azure\": {\n                \"connectionString\": \"\",\n                \"container\": \"\",\n                \"startsWith\": \"\"\n            }\n        },\n        \"oauth\": {\n            \"github\": {\n                \"clientId\": \"\",\n                \"clientSecret\": \"\"\n            },\n            \"google\": {\n                \"clientId\": \"\",\n                \"clientSecret\": \"\"\n            }\n        },\n        \"sqlconnector\": {\n            \"host\": \"\",\n            \"type\": \"\",\n            \"user\": \"\",\n            \"password\": \"\"\n        },\n        \"ldap\": {\n            \"url\": \"\",\n            \"bindDn\": \"\",\n            \"bindCredentials\": \"\",\n            \"searchBase\": \"\",\n            \"searchFilter\": \"\"\n        },\n        \"tenantNamePath\": \"\",\n        \"tenantRolePath\": \"\",\n        \"esign\": {\n            \"kms\": \"\"\n        },\n        \"kms\": {},\n        \"pdf\": {\n            \"translationsUrl\": \"\"\n        },\n        \"csp\": \"\",\n        \"secret\": \"\",\n        \"custom\": {\n            \"css\": \"\",\n            \"js\": \"\"\n        },\n        \"formModule\": \"\",\n        \"recaptcha\": {\n            \"siteKey\": \"\",\n            \"secretKey\": \"\"\n        },\n        \"captcha\": {\n            \"siteKey\": \"\",\n            \"secretKey\": \"\"\n        },\n        \"google\": {\n            \"clientId\": \"\",\n            \"cskey\": \"\",\n            \"refreshtoken\": \"\"\n        },\n        \"kickbox\": {\n            \"apikey\": \"\"\n        }\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {\n            \"css\": \"\",\n            \"js\": \"\"\n        },\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"c09f421d-0475-40ef-aac1-4167be5713cd"},{"name":"Get project - Alias Endpoint","id":"08cc4906-8a1c-4c2a-90c0-0b661be63f40","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}","description":"<p>It is also possible to use the 'alias' endpoint to GET a project definition as well as can be used for any APIs within the project.</p>\n","urlObject":{"path":["{{ projectName }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"2948dd49-9205-4365-8c05-f44f61c7835b","name":"Get project - Alias Endpoint","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"https://forms.example.com/example"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 15 Apr 2026 16:05:31 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"2210"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"8a2-ww7WHznJaiO+0XWhG/30wCR651A\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dfb6dcbb04c38a91029771\",\n    \"title\": \"Example Project\",\n    \"name\": \"example\",\n    \"type\": \"project\",\n    \"description\": \"An example project\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"angular\",\n    \"protect\": false,\n    \"formDefaults\": {},\n    \"access\": [\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        }\n    ],\n    \"trial\": \"2026-03-31T16:08:57.320Z\",\n    \"created\": \"2026-03-31T16:08:57.320Z\",\n    \"modified\": \"2026-04-15T16:05:12.173Z\",\n    \"config\": {},\n    \"stageTitle\": \"Live\",\n    \"apiCalls\": {\n        \"limit\": {\n            \"options\": {\n                \"server\": true,\n                \"pdf\": true,\n                \"premium\": true,\n                \"offline\": true,\n                \"reporting\": true,\n                \"appserver\": true,\n                \"sac\": true\n            },\n            \"endpoints\": [\n                \".*\"\n            ],\n            \"hostnames\": [\n                \".*\"\n            ],\n            \"stages\": 7,\n            \"tenants\": 0,\n            \"projectsNumberLimit\": 10,\n            \"formManagers\": 1,\n            \"scopes\": [\n                \"apiServer\",\n                \"pdfServer\",\n                \"project\",\n                \"formManager\",\n                \"tenant\",\n                \"stage\"\n            ]\n        },\n        \"used\": {},\n        \"licenseId\": \"remote\",\n        \"formManager\": true,\n        \"accessibility\": true,\n        \"tenant\": true\n    },\n    \"settings\": {\n        \"cors\": \"*\",\n        \"appOrigin\": \"https://forms.example.com\",\n        \"allowConfig\": false,\n        \"email\": {\n            \"smtp\": {\n                \"secure\": false,\n                \"host\": \"\",\n                \"port\": \"\",\n                \"auth\": {\n                    \"user\": \"\",\n                    \"pass\": \"\"\n                }\n            },\n            \"sendgrid\": {\n                \"auth\": {\n                    \"api_key\": \"\"\n                }\n            },\n            \"mailgun\": {\n                \"auth\": {\n                    \"api_key\": \"\",\n                    \"domain\": \"\"\n                }\n            },\n            \"custom\": {\n                \"url\": \"\",\n                \"username\": \"\",\n                \"password\": \"\"\n            }\n        },\n        \"storage\": {\n            \"azure\": {\n                \"connectionString\": \"\",\n                \"container\": \"\",\n                \"startsWith\": \"\"\n            }\n        },\n        \"oauth\": {\n            \"github\": {\n                \"clientId\": \"\",\n                \"clientSecret\": \"\"\n            },\n            \"google\": {\n                \"clientId\": \"\",\n                \"clientSecret\": \"\"\n            }\n        },\n        \"sqlconnector\": {\n            \"host\": \"\",\n            \"type\": \"\",\n            \"user\": \"\",\n            \"password\": \"\"\n        },\n        \"ldap\": {\n            \"url\": \"\",\n            \"bindDn\": \"\",\n            \"bindCredentials\": \"\",\n            \"searchBase\": \"\",\n            \"searchFilter\": \"\"\n        },\n        \"tenantNamePath\": \"\",\n        \"tenantRolePath\": \"\",\n        \"esign\": {\n            \"kms\": \"\"\n        },\n        \"kms\": {},\n        \"pdf\": {\n            \"translationsUrl\": \"\"\n        },\n        \"csp\": \"\",\n        \"secret\": \"\",\n        \"custom\": {\n            \"css\": \"\",\n            \"js\": \"\"\n        },\n        \"formModule\": \"\",\n        \"recaptcha\": {\n            \"siteKey\": \"\",\n            \"secretKey\": \"\"\n        },\n        \"captcha\": {\n            \"siteKey\": \"\",\n            \"secretKey\": \"\"\n        },\n        \"google\": {\n            \"clientId\": \"\",\n            \"cskey\": \"\",\n            \"refreshtoken\": \"\"\n        },\n        \"kickbox\": {\n            \"apikey\": \"\"\n        }\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {\n            \"css\": \"\",\n            \"js\": \"\"\n        },\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"08cc4906-8a1c-4c2a-90c0-0b661be63f40"},{"name":"Project Access Info","id":"cb518d94-2592-4e01-b4a9-17a90019cdf1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{ baseUrl }}/{{ projectName }}/access","description":"<p>Returns the project access information for your application to hide and show certain elements based on the returned values.</p>\n","urlObject":{"path":["{{ projectName }}","access"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"b0539f71-6f33-4383-a25b-db071c4cad1d","name":"Project Access Info","originalRequest":{"method":"GET","header":[],"url":"https://forms.example.com/example/access"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:17:24 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"327"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"147-V/OgwOwJ/M65qzA7vyqeZWWw+NM\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"roles\": {\n        \"administrator\": {\n            \"_id\": \"69d6527d42ae1f2fed8c562e\",\n            \"title\": \"Administrator\",\n            \"default\": false,\n            \"admin\": true\n        },\n        \"authenticated\": {\n            \"_id\": \"69d6527d42ae1f2fed8c5632\",\n            \"title\": \"Authenticated\",\n            \"default\": false,\n            \"admin\": false\n        },\n        \"anonymous\": {\n            \"_id\": \"69d6527d42ae1f2fed8c5636\",\n            \"title\": \"Anonymous\",\n            \"default\": true,\n            \"admin\": false\n        }\n    },\n    \"forms\": {}\n}"}],"_postman_id":"cb518d94-2592-4e01-b4a9-17a90019cdf1"},{"name":"Project Export","id":"d9c241d5-7beb-46df-8f20-017cec82fe35","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/export","description":"<p>A project export allows you to get the full JSON template of an entire project.</p>\n","urlObject":{"path":["{{ projectName }}","export"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"2b633da7-812d-4f0f-a27c-8185ad36663f","name":"Project Export","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/export"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 15 Apr 2026 16:09:34 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Disposition","value":"attachment; filename=\"example-undefined.json\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Example Project\",\n    \"version\": \"2.0.0\",\n    \"description\": \"An example project\",\n    \"name\": \"example\",\n    \"roles\": {\n        \"administrator\": {\n            \"title\": \"Administrator\",\n            \"description\": \"A role for Administrative Users.\",\n            \"admin\": true,\n            \"default\": false\n        },\n        \"authenticated\": {\n            \"title\": \"Authenticated\",\n            \"description\": \"A role for Authenticated Users.\",\n            \"admin\": false,\n            \"default\": false\n        },\n        \"anonymous\": {\n            \"title\": \"Anonymous\",\n            \"description\": \"A role for Anonymous Users.\",\n            \"admin\": false,\n            \"default\": true\n        }\n    },\n    \"forms\": {\n        \"adminLogin\": {\n            \"title\": \"Admin Login\",\n            \"type\": \"form\",\n            \"name\": \"adminLogin\",\n            \"path\": \"admin/login\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": false,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"lockKey\": true,\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"lockKey\": true,\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"button\",\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"tableView\": false,\n                    \"label\": \"Submit\",\n                    \"input\": true\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        },\n        \"userRegister\": {\n            \"title\": \"User Register\",\n            \"type\": \"form\",\n            \"name\": \"userRegister\",\n            \"path\": \"user/register\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": false,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"lockKey\": true,\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"lockKey\": true,\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"label\": \"Submit\",\n                    \"input\": true,\n                    \"type\": \"button\"\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        },\n        \"userLogin\": {\n            \"title\": \"User Login\",\n            \"type\": \"form\",\n            \"name\": \"userLogin\",\n            \"path\": \"user/login\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": false,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"lockKey\": true,\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"lockKey\": true,\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"button\",\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"tableView\": false,\n                    \"label\": \"Submit\",\n                    \"input\": true\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        }\n    },\n    \"actions\": {\n        \"user:role\": {\n            \"title\": \"Role Assignment\",\n            \"name\": \"role\",\n            \"form\": \"user\",\n            \"settings\": {\n                \"association\": \"new\",\n                \"type\": \"add\",\n                \"role\": \"authenticated\"\n            },\n            \"priority\": 1,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"after\"\n            ]\n        },\n        \"user:save\": {\n            \"title\": \"Save Submission\",\n            \"name\": \"save\",\n            \"form\": \"user\",\n            \"priority\": 10,\n            \"method\": [\n                \"create\",\n                \"update\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"admin:role\": {\n            \"title\": \"Role Assignment\",\n            \"name\": \"role\",\n            \"form\": \"admin\",\n            \"settings\": {\n                \"association\": \"new\",\n                \"type\": \"add\",\n                \"role\": \"administrator\"\n            },\n            \"priority\": 1,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"after\"\n            ]\n        },\n        \"admin:save\": {\n            \"title\": \"Save Submission\",\n            \"name\": \"save\",\n            \"form\": \"admin\",\n            \"priority\": 10,\n            \"method\": [\n                \"create\",\n                \"update\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"reportingui:save\": {\n            \"title\": \"Save Submission\",\n            \"name\": \"save\",\n            \"form\": \"reportingui\",\n            \"priority\": 10,\n            \"method\": [\n                \"create\",\n                \"update\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"userLogin:login\": {\n            \"title\": \"Login\",\n            \"name\": \"login\",\n            \"form\": \"userLogin\",\n            \"settings\": {\n                \"resources\": [\n                    \"user\"\n                ],\n                \"username\": \"email\",\n                \"password\": \"password\",\n                \"allowedAttempts\": 5,\n                \"attemptWindow\": 30,\n                \"lockWait\": 1800\n            },\n            \"priority\": 2,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"userRegister:save\": {\n            \"title\": \"Save Submission\",\n            \"name\": \"save\",\n            \"form\": \"userRegister\",\n            \"settings\": {\n                \"resource\": \"user\",\n                \"fields\": {\n                    \"email\": \"email\",\n                    \"password\": \"password\"\n                }\n            },\n            \"priority\": 11,\n            \"method\": [\n                \"create\",\n                \"update\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"userRegister:login\": {\n            \"title\": \"Login\",\n            \"name\": \"login\",\n            \"form\": \"userRegister\",\n            \"settings\": {\n                \"resources\": [\n                    \"user\"\n                ],\n                \"username\": \"email\",\n                \"password\": \"password\"\n            },\n            \"priority\": 2,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"adminLogin:login\": {\n            \"title\": \"Login\",\n            \"name\": \"login\",\n            \"form\": \"adminLogin\",\n            \"settings\": {\n                \"resources\": [\n                    \"admin\"\n                ],\n                \"username\": \"email\",\n                \"password\": \"password\",\n                \"allowedAttempts\": 5,\n                \"attemptWindow\": 30,\n                \"lockWait\": 1800\n            },\n            \"priority\": 2,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        }\n    },\n    \"resources\": {\n        \"reportingui\": {\n            \"title\": \"Reporting UI\",\n            \"type\": \"resource\",\n            \"name\": \"reportingui\",\n            \"path\": \"reportingui\",\n            \"pdfComponents\": [],\n            \"display\": \"wizard\",\n            \"tags\": [\n                \"noBuilderResource\"\n            ],\n            \"settings\": {\n                \"wizardHeaderType\": \"Vertical\"\n            },\n            \"components\": [\n                {\n                    \"title\": \"Basic Settings\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"basic\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 6\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version1\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                            \"label\": \"Report Setup - Basic Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportSettings\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Columns\",\n                            \"columns\": [\n                                {\n                                    \"components\": [\n                                        {\n                                            \"label\": \"Report Title\",\n                                            \"placeholder\": \"Report Title\",\n                                            \"applyMaskOn\": \"change\",\n                                            \"tableView\": true,\n                                            \"validate\": {\n                                                \"required\": true\n                                            },\n                                            \"key\": \"title\",\n                                            \"type\": \"textfield\",\n                                            \"input\": true\n                                        }\n                                    ],\n                                    \"width\": 6,\n                                    \"offset\": 0,\n                                    \"push\": 0,\n                                    \"pull\": 0,\n                                    \"size\": \"md\",\n                                    \"currentWidth\": 6\n                                },\n                                {\n                                    \"components\": [\n                                        {\n                                            \"label\": \"Report Name\",\n                                            \"placeholder\": \"Report Name\",\n                                            \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                                            \"applyMaskOn\": \"change\",\n                                            \"tableView\": true,\n                                            \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                                            \"allowCalculateOverride\": true,\n                                            \"validate\": {\n                                                \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                            },\n                                            \"unique\": true,\n                                            \"key\": \"name\",\n                                            \"logic\": [\n                                                {\n                                                    \"name\": \"make required\",\n                                                    \"trigger\": {\n                                                        \"type\": \"javascript\",\n                                                        \"javascript\": \"result = data.title;\"\n                                                    },\n                                                    \"actions\": [\n                                                        {\n                                                            \"name\": \"make required\",\n                                                            \"type\": \"property\",\n                                                            \"property\": {\n                                                                \"label\": \"Required\",\n                                                                \"value\": \"validate.required\",\n                                                                \"type\": \"boolean\"\n                                                            },\n                                                            \"state\": true\n                                                        }\n                                                    ]\n                                                }\n                                            ],\n                                            \"type\": \"textfield\",\n                                            \"input\": true\n                                        }\n                                    ],\n                                    \"width\": 6,\n                                    \"offset\": 0,\n                                    \"push\": 0,\n                                    \"pull\": 0,\n                                    \"size\": \"md\",\n                                    \"currentWidth\": 6\n                                }\n                            ],\n                            \"key\": \"columns1\",\n                            \"type\": \"columns\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Report Forms\",\n                            \"persistent\": false,\n                            \"trigger\": {\n                                \"init\": false,\n                                \"server\": false\n                            },\n                            \"refreshOn\": \"forms\",\n                            \"refreshOnEvent\": \"formsSet\",\n                            \"event\": \"reportingFormsUpdated\",\n                            \"dataSrc\": \"url\",\n                            \"fetch\": {\n                                \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                                \"method\": \"get\",\n                                \"headers\": [\n                                    {\n                                        \"key\": \"\",\n                                        \"value\": \"\"\n                                    }\n                                ],\n                                \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                                \"forwardHeaders\": false,\n                                \"authenticate\": true\n                            },\n                            \"allowCaching\": true,\n                            \"key\": \"reportingForms\",\n                            \"type\": \"datasource\",\n                            \"indexeddb\": {},\n                            \"input\": true,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Container\",\n                            \"tableView\": false,\n                            \"key\": \"gridSettings\",\n                            \"type\": \"container\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                                    \"label\": \"Reporting Grid Basic Settings\",\n                                    \"refreshOnChange\": false,\n                                    \"key\": \"basicReportingSettings3\",\n                                    \"type\": \"content\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Items per page\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                                    \"tableView\": true,\n                                    \"defaultValue\": 10,\n                                    \"data\": {\n                                        \"values\": [\n                                            {\n                                                \"label\": \"5\",\n                                                \"value\": 5\n                                            },\n                                            {\n                                                \"label\": \"10\",\n                                                \"value\": 10\n                                            },\n                                            {\n                                                \"label\": \"25\",\n                                                \"value\": 25\n                                            },\n                                            {\n                                                \"label\": \"50\",\n                                                \"value\": 50\n                                            },\n                                            {\n                                                \"label\": \"100\",\n                                                \"value\": 100\n                                            },\n                                            {\n                                                \"label\": \"All\",\n                                                \"value\": -1\n                                            }\n                                        ]\n                                    },\n                                    \"key\": \"itemsPerPage\",\n                                    \"type\": \"select\",\n                                    \"input\": true,\n                                    \"weight\": 442\n                                },\n                                {\n                                    \"label\": \"Enable to Store Request Result in the Cache\",\n                                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                                    \"tableView\": false,\n                                    \"defaultValue\": true,\n                                    \"key\": \"allowCaching\",\n                                    \"type\": \"checkbox\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Cell max width\",\n                                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"key\": \"cellMaxWidth\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Source Forms\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"dataSourcePanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 1\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version2\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                            \"label\": \"Basic Report Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"sourceFormsSettings\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Choose from the Forms within this Project:\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                            \"tableView\": false,\n                            \"multiple\": true,\n                            \"dataSrc\": \"url\",\n                            \"data\": {\n                                \"url\": \"{{Formio.projectUrl}}/form\",\n                                \"headers\": [\n                                    {\n                                        \"key\": \"\",\n                                        \"value\": \"\"\n                                    }\n                                ]\n                            },\n                            \"valueProperty\": \"_id\",\n                            \"template\": \"<span>{{ item.title }}</span>\",\n                            \"validate\": {\n                                \"required\": true,\n                                \"select\": false\n                            },\n                            \"key\": \"forms\",\n                            \"type\": \"select\",\n                            \"disableLimit\": false,\n                            \"searchField\": \"title__regex\",\n                            \"noRefreshOnScroll\": false,\n                            \"authenticate\": true,\n                            \"input\": true\n                        },\n                        {\n                            \"label\": \"Forms Connections\",\n                            \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                            \"tableView\": false,\n                            \"templates\": {\n                                \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                            },\n                            \"addAnother\": \"Add Connection\",\n                            \"redrawOn\": \"reportingForms\",\n                            \"validate\": {\n                                \"required\": true\n                            },\n                            \"rowDrafts\": false,\n                            \"key\": \"connections\",\n                            \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                            \"logic\": [\n                                {\n                                    \"name\": \"min max validation\",\n                                    \"trigger\": {\n                                        \"type\": \"javascript\",\n                                        \"javascript\": \"result = !!data.reportingForms;\"\n                                    },\n                                    \"actions\": [\n                                        {\n                                            \"name\": \"min max validation\",\n                                            \"type\": \"mergeComponentSchema\",\n                                            \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                                        }\n                                    ]\n                                }\n                            ],\n                            \"type\": \"editgrid\",\n                            \"displayAsTable\": false,\n                            \"reorder\": false,\n                            \"addAnotherPosition\": \"bottom\",\n                            \"layoutFixed\": false,\n                            \"enableRowGroups\": false,\n                            \"initEmpty\": false,\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Data Source Connections\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Base Form\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"placeholder\": \"Source Form\",\n                                                    \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                                                    \"tableView\": true,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"baseForm\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                },\n                                                {\n                                                    \"label\": \"Connecting field of base Form\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"placeholder\": \"Connecting Field\",\n                                                    \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                                                    \"disabled\": true,\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"baseFormField\",\n                                                    \"logic\": [\n                                                        {\n                                                            \"name\": \"enable\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = row.baseForm\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"enable\",\n                                                                    \"type\": \"property\",\n                                                                    \"property\": {\n                                                                        \"label\": \"Disabled\",\n                                                                        \"value\": \"disabled\",\n                                                                        \"type\": \"boolean\"\n                                                                    },\n                                                                    \"state\": false\n                                                                }\n                                                            ]\n                                                        },\n                                                        {\n                                                            \"name\": \"clear value\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = !row.baseForm\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"clear value\",\n                                                                    \"type\": \"customAction\",\n                                                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                                                }\n                                                            ]\n                                                        }\n                                                    ],\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                },\n                                                {\n                                                    \"label\": \"Base Form path to connecting value\",\n                                                    \"placeholder\": \"Path\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": false,\n                                                    \"key\": \"baseFormValuePath\",\n                                                    \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Joining Form\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"placeholder\": \"Source Form\",\n                                                    \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                                                    \"tableView\": true,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"refreshOn\": \"connections.baseForm\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"joiningForm\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                },\n                                                {\n                                                    \"label\": \"Connecting field of joining Form\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"placeholder\": \"Connecting Field\",\n                                                    \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                                                    \"disabled\": true,\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"joiningFormField\",\n                                                    \"logic\": [\n                                                        {\n                                                            \"name\": \"enable\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = row.joiningForm\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"enable\",\n                                                                    \"type\": \"property\",\n                                                                    \"property\": {\n                                                                        \"label\": \"Disabled\",\n                                                                        \"value\": \"disabled\",\n                                                                        \"type\": \"boolean\"\n                                                                    },\n                                                                    \"state\": false\n                                                                }\n                                                            ]\n                                                        },\n                                                        {\n                                                            \"name\": \"clear value\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = !row.joiningForm\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"clear value\",\n                                                                    \"type\": \"customAction\",\n                                                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                                                }\n                                                            ]\n                                                        }\n                                                    ],\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                },\n                                                {\n                                                    \"label\": \"Joining Form path to connecting value\",\n                                                    \"placeholder\": \"Path\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": false,\n                                                    \"key\": \"joiningFormValuePath\",\n                                                    \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"hideLabel\": true,\n                                    \"key\": \"columns\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Calculated Columns\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"extraColumnsPanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 7\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version3\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"calculatedColumnsSettingsDescription\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Calculated Extra Columns\",\n                            \"hideLabel\": true,\n                            \"tableView\": false,\n                            \"templates\": {\n                                \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                            },\n                            \"addAnother\": \"Add Column\",\n                            \"redrawOn\": \"reportingForms\",\n                            \"rowDrafts\": false,\n                            \"key\": \"calculatedColumns\",\n                            \"type\": \"editgrid\",\n                            \"displayAsTable\": false,\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Column Title\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": true,\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"name\",\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Column Key\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": false,\n                                                    \"calculateValue\": \"value = _.camelCase(row.name);\",\n                                                    \"allowCalculateOverride\": true,\n                                                    \"validate\": {\n                                                        \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                        \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                                                        \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                    },\n                                                    \"key\": \"key\",\n                                                    \"logic\": [\n                                                        {\n                                                            \"name\": \"make required\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = row.title;\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"make required\",\n                                                                    \"type\": \"property\",\n                                                                    \"property\": {\n                                                                        \"label\": \"Required\",\n                                                                        \"value\": \"validate.required\",\n                                                                        \"type\": \"boolean\"\n                                                                    },\n                                                                    \"state\": true\n                                                                }\n                                                            ]\n                                                        }\n                                                    ],\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"key\": \"columns\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Operator\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"operator\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Arguments\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": false,\n                                    \"multiple\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"args\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Argument\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": false,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"arg\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Arguments\",\n                                    \"reorder\": false,\n                                    \"addAnotherPosition\": \"bottom\",\n                                    \"layoutFixed\": false,\n                                    \"enableRowGroups\": false,\n                                    \"initEmpty\": false,\n                                    \"tableView\": false,\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"concatArgs\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"datagrid\",\n                                    \"input\": true,\n                                    \"components\": [\n                                        {\n                                            \"label\": \"Field\",\n                                            \"widget\": \"choicesjs\",\n                                            \"tableView\": false,\n                                            \"dataSrc\": \"custom\",\n                                            \"data\": {\n                                                \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                                            },\n                                            \"valueProperty\": \"value\",\n                                            \"validate\": {\n                                                \"required\": true\n                                            },\n                                            \"key\": \"field\",\n                                            \"type\": \"select\",\n                                            \"input\": true\n                                        },\n                                        {\n                                            \"label\": \"Connector\",\n                                            \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                                            \"applyMaskOn\": \"change\",\n                                            \"tableView\": false,\n                                            \"key\": \"connector\",\n                                            \"type\": \"textfield\",\n                                            \"input\": true\n                                        }\n                                    ]\n                                },\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Dividend\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"dividend\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Divisor\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"divisor\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"key\": \"divideArgs\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Minuend\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"minuend\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Subtrahend\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"subtrahend\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"key\": \"subtractArgs\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Start Date\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"startDate\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 4,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 4\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"End Date\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"endDate\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 4,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 4\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Unit\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"unit\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"size\": \"md\",\n                                            \"width\": 4,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"currentWidth\": 4\n                                        }\n                                    ],\n                                    \"key\": \"dateDiffArgs\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Date\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": false,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"date\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Decimal Places\",\n                                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"mask\": false,\n                                    \"tableView\": false,\n                                    \"delimiter\": false,\n                                    \"requireDecimal\": false,\n                                    \"inputFormat\": \"plain\",\n                                    \"truncateMultipleSpaces\": false,\n                                    \"key\": \"decimalLimit\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"number\",\n                                    \"input\": true\n                                }\n                            ]\n                        },\n                        {\n                            \"label\": \"Container\",\n                            \"tableView\": false,\n                            \"key\": \"calculatedColumnsSettings\",\n                            \"type\": \"container\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                                    \"label\": \"Reporting Grid Basic Settings\",\n                                    \"refreshOnChange\": false,\n                                    \"key\": \"calcSettingsDescription\",\n                                    \"type\": \"content\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Use Thousands Separator\",\n                                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                                    \"tableView\": false,\n                                    \"defaultValue\": false,\n                                    \"key\": \"thousandsSeparator\",\n                                    \"type\": \"checkbox\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Aggregation\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"groupingPanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 8\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version4\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                            \"label\": \"Content\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"content\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Fields to group by\",\n                            \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                            \"reorder\": false,\n                            \"addAnother\": \"Add Field\",\n                            \"addAnotherPosition\": \"bottom\",\n                            \"layoutFixed\": false,\n                            \"enableRowGroups\": false,\n                            \"initEmpty\": true,\n                            \"tableView\": false,\n                            \"redrawOn\": \"reportingForms\",\n                            \"key\": \"groups.groupingFields\",\n                            \"type\": \"datagrid\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Field\",\n                                    \"widget\": \"choicesjs\",\n                                    \"placeholder\": \"Grouping Field\",\n                                    \"hideLabel\": true,\n                                    \"tableView\": false,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"field\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                }\n                            ]\n                        },\n                        {\n                            \"label\": \"Calculated Aggregation Columns\",\n                            \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                            \"tableView\": false,\n                            \"templates\": {\n                                \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                            },\n                            \"addAnother\": \"Add Column\",\n                            \"rowDrafts\": false,\n                            \"key\": \"groups.calculatedColumns\",\n                            \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                            \"type\": \"editgrid\",\n                            \"displayAsTable\": false,\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Column Title\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": true,\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"name\",\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Column Key\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": false,\n                                                    \"calculateValue\": \"value = _.camelCase(row.name);\",\n                                                    \"allowCalculateOverride\": true,\n                                                    \"validate\": {\n                                                        \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                        \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                                                        \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                    },\n                                                    \"key\": \"key\",\n                                                    \"logic\": [\n                                                        {\n                                                            \"name\": \"make required\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = row.title;\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"make required\",\n                                                                    \"type\": \"property\",\n                                                                    \"property\": {\n                                                                        \"label\": \"Required\",\n                                                                        \"value\": \"validate.required\",\n                                                                        \"type\": \"boolean\"\n                                                                    },\n                                                                    \"state\": true\n                                                                }\n                                                            ]\n                                                        }\n                                                    ],\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"key\": \"columns\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Operator\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tooltip\": \"Select operator to calculate column value\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"operator\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Argument\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": false,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"argument\",\n                                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Decimal Places\",\n                                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"mask\": false,\n                                    \"tableView\": false,\n                                    \"delimiter\": false,\n                                    \"requireDecimal\": false,\n                                    \"inputFormat\": \"plain\",\n                                    \"truncateMultipleSpaces\": false,\n                                    \"key\": \"decimalLimit\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"number\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Columns\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"columnsPanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 2\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version5\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportingSettings2\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Columns List\",\n                            \"persistent\": false,\n                            \"redrawOn\": \"reportingForms\",\n                            \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                            \"key\": \"columnsList\",\n                            \"type\": \"hidden\",\n                            \"input\": true,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Report Type\",\n                            \"persistent\": false,\n                            \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                            \"key\": \"reportType\",\n                            \"type\": \"hidden\",\n                            \"input\": true,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Available Columns\",\n                            \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                            \"reorder\": true,\n                            \"addAnother\": \"Add Column\",\n                            \"addAnotherPosition\": \"bottom\",\n                            \"layoutFixed\": false,\n                            \"enableRowGroups\": false,\n                            \"initEmpty\": true,\n                            \"tableView\": false,\n                            \"validate\": {\n                                \"required\": true\n                            },\n                            \"key\": \"availableColumns\",\n                            \"logic\": [\n                                {\n                                    \"name\": \"clear Columns\",\n                                    \"trigger\": {\n                                        \"type\": \"javascript\",\n                                        \"javascript\": \"result = data.reportType?.typeChanged;\"\n                                    },\n                                    \"actions\": [\n                                        {\n                                            \"name\": \"clear\",\n                                            \"type\": \"customAction\",\n                                            \"customAction\": \"instance.resetValue();\"\n                                        }\n                                    ]\n                                }\n                            ],\n                            \"type\": \"datagrid\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Column\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"refreshOn\": \"columnsList\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"column\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Display Title\",\n                                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"key\": \"displayTitle\",\n                                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                }\n                            ]\n                        },\n                        {\n                            \"label\": \"Default Columns\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                            \"tableView\": false,\n                            \"multiple\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                                \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"availableColumns\",\n                            \"key\": \"defaultColumns\",\n                            \"logic\": [\n                                {\n                                    \"name\": \"clear Columns\",\n                                    \"trigger\": {\n                                        \"type\": \"javascript\",\n                                        \"javascript\": \"result = data.reportType?.typeChanged;\"\n                                    },\n                                    \"actions\": [\n                                        {\n                                            \"name\": \"clear\",\n                                            \"type\": \"customAction\",\n                                            \"customAction\": \"instance.resetValue();\"\n                                        }\n                                    ]\n                                }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Control Panel\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"controlsPanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 9\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version6\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportingSettings7\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Enable Control Panel\",\n                            \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                            \"tableView\": false,\n                            \"defaultValue\": false,\n                            \"key\": \"enableControls\",\n                            \"type\": \"checkbox\",\n                            \"input\": true\n                        },\n                        {\n                            \"label\": \"Controls Settings\",\n                            \"tableView\": false,\n                            \"key\": \"controlsSettings\",\n                            \"customConditional\": \"show = data.enableControls;\",\n                            \"type\": \"container\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                                    \"label\": \"Reporting Grid Basic Settings\",\n                                    \"refreshOnChange\": false,\n                                    \"key\": \"basicReportingSettings8\",\n                                    \"type\": \"content\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Control Panel Title\",\n                                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"key\": \"title\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Control Panel Theme\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": true,\n                                    \"defaultValue\": \"default\",\n                                    \"data\": {\n                                        \"values\": [\n                                            {\n                                                \"label\": \"Default\",\n                                                \"value\": \"default\"\n                                            },\n                                            {\n                                                \"label\": \"Primary\",\n                                                \"value\": \"primary\"\n                                            },\n                                            {\n                                                \"label\": \"Info\",\n                                                \"value\": \"info\"\n                                            },\n                                            {\n                                                \"label\": \"Success\",\n                                                \"value\": \"success\"\n                                            },\n                                            {\n                                                \"label\": \"Danger\",\n                                                \"value\": \"danger\"\n                                            },\n                                            {\n                                                \"label\": \"Warning\",\n                                                \"value\": \"warning\"\n                                            }\n                                        ]\n                                    },\n                                    \"key\": \"theme\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Initially Collapsed\",\n                                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                                    \"tableView\": false,\n                                    \"defaultValue\": false,\n                                    \"key\": \"collapsePanel\",\n                                    \"type\": \"checkbox\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Filters\",\n                    \"collapsible\": false,\n                    \"key\": \"filtersPanel\",\n                    \"conditional\": {\n                        \"show\": true,\n                        \"conjunction\": \"all\",\n                        \"conditions\": [\n                            {\n                                \"component\": \"enableControls\",\n                                \"operator\": \"isEqual\",\n                                \"value\": true\n                            }\n                        ]\n                    },\n                    \"type\": \"panel\",\n                    \"label\": \"Page 3\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version7\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filtersenable end users of this report to view any subset of data needed at runtime. Customize Filtersfor your Report Below.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportingSettings5\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Number Of FiltersPer Row\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"How many filters display horizontally in each row of the Control Panel FiltersSection.\",\n                            \"tableView\": false,\n                            \"defaultValue\": 2,\n                            \"data\": {\n                                \"values\": [\n                                    {\n                                        \"label\": \"1\",\n                                        \"value\": \"1\"\n                                    },\n                                    {\n                                        \"label\": \"2\",\n                                        \"value\": \"2\"\n                                    },\n                                    {\n                                        \"label\": \"3\",\n                                        \"value\": \"3\"\n                                    },\n                                    {\n                                        \"label\": \"4\",\n                                        \"value\": \"4\"\n                                    }\n                                ]\n                            },\n                            \"dataType\": \"number\",\n                            \"key\": \"filtersPerRow\",\n                            \"type\": \"select\",\n                            \"input\": true\n                        },\n                        {\n                            \"label\": \"Filter Label Position\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                            \"tableView\": false,\n                            \"defaultValue\": \"top\",\n                            \"data\": {\n                                \"values\": [\n                                    {\n                                        \"label\": \"Top\",\n                                        \"value\": \"top\"\n                                    },\n                                    {\n                                        \"label\": \"Left\",\n                                        \"value\": \"left-left\"\n                                    },\n                                    {\n                                        \"label\": \"Right\",\n                                        \"value\": \"right-right\"\n                                    }\n                                ]\n                            },\n                            \"key\": \"filterLabelPosition\",\n                            \"type\": \"select\",\n                            \"input\": true\n                        },\n                        {\n                            \"label\": \"Control Panel Filters\",\n                            \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                            \"reorder\": true,\n                            \"addAnotherPosition\": \"bottom\",\n                            \"layoutFixed\": false,\n                            \"enableRowGroups\": false,\n                            \"initEmpty\": true,\n                            \"tableView\": false,\n                            \"key\": \"filters\",\n                            \"type\": \"datagrid\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Field\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"values = instance.root.data.columnsList;\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"refreshOn\": \"columnsList\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"field\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Filter Type\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"filterType\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Filter Title\",\n                                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"key\": \"filterTitle\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Actions\",\n                    \"collapsible\": false,\n                    \"key\": \"actionsPanel\",\n                    \"conditional\": {\n                        \"show\": true,\n                        \"conjunction\": \"all\",\n                        \"conditions\": [\n                            {\n                                \"component\": \"enableControls\",\n                                \"operator\": \"isEqual\",\n                                \"value\": true\n                            }\n                        ]\n                    },\n                    \"type\": \"panel\",\n                    \"label\": \"Page 4\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version8\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportingSettings6\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Actions\",\n                            \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                            \"tableView\": false,\n                            \"templates\": {\n                                \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                            },\n                            \"addAnother\": \"Add Action\",\n                            \"rowDrafts\": false,\n                            \"key\": \"actions\",\n                            \"type\": \"editgrid\",\n                            \"displayAsTable\": false,\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Title\",\n                                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"title\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Type\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": true,\n                                    \"data\": {\n                                        \"values\": [\n                                            {\n                                                \"label\": \"Export CSV\",\n                                                \"value\": \"csv\"\n                                            },\n                                            {\n                                                \"label\": \"Download PDF\",\n                                                \"value\": \"pdf\"\n                                            },\n                                            {\n                                                \"label\": \"Custom\",\n                                                \"value\": \"custom\"\n                                            }\n                                        ]\n                                    },\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"type\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Apply action for:\",\n                                    \"optionsLabelPosition\": \"right\",\n                                    \"inline\": true,\n                                    \"tableView\": false,\n                                    \"defaultValue\": \"availableColumns\",\n                                    \"values\": [\n                                        {\n                                            \"label\": \"All Available Columns\",\n                                            \"value\": \"availableColumns\",\n                                            \"shortcut\": \"\"\n                                        },\n                                        {\n                                            \"label\": \"Visible Columns\",\n                                            \"value\": \"visibleColumns\",\n                                            \"shortcut\": \"\"\n                                        }\n                                    ],\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"applyFor\",\n                                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                                    \"type\": \"radio\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Print Limit\",\n                                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"mask\": false,\n                                    \"tableView\": false,\n                                    \"delimiter\": false,\n                                    \"requireDecimal\": false,\n                                    \"inputFormat\": \"plain\",\n                                    \"truncateMultipleSpaces\": false,\n                                    \"validateWhenHidden\": false,\n                                    \"key\": \"printLimit\",\n                                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                                    \"type\": \"number\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Custom JS Code\",\n                                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"editor\": \"ace\",\n                                    \"autoExpand\": false,\n                                    \"tableView\": false,\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"customCode\",\n                                    \"conditional\": {\n                                        \"conjunction\": \"all\"\n                                    },\n                                    \"customConditional\": \"show = row.type === 'custom';\",\n                                    \"type\": \"textarea\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"HTML\",\n                                    \"attrs\": [\n                                        {\n                                            \"attr\": \"\",\n                                            \"value\": \"\"\n                                        }\n                                    ],\n                                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                                    \"refreshOnChange\": false,\n                                    \"key\": \"html\",\n                                    \"customConditional\": \"show = row.type === 'custom';\",\n                                    \"type\": \"htmlelement\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                }\n                            ]\n                        }\n                    ]\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"administrator\",\n                        \"authenticated\",\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"administrator\",\n                        \"authenticated\",\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"properties\": {\n                \"version\": 9\n            },\n            \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        },\n        \"admin\": {\n            \"title\": \"Admin\",\n            \"type\": \"resource\",\n            \"name\": \"admin\",\n            \"path\": \"admin\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": true,\n                    \"required\": true,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"button\",\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"tableView\": false,\n                    \"label\": \"Submit\",\n                    \"input\": true\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\",\n                        \"authenticated\",\n                        \"administrator\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"update_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"delete_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"read_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"update_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"delete_own\",\n                    \"roles\": []\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        },\n        \"user\": {\n            \"title\": \"User\",\n            \"type\": \"resource\",\n            \"name\": \"user\",\n            \"path\": \"user\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": true,\n                    \"required\": true,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"button\",\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"tableView\": false,\n                    \"label\": \"Submit\",\n                    \"input\": true\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\",\n                        \"authenticated\",\n                        \"administrator\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"update_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"delete_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"read_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"update_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"delete_own\",\n                    \"roles\": []\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        }\n    },\n    \"revisions\": {},\n    \"reports\": {},\n    \"access\": [\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        }\n    ]\n}"}],"_postman_id":"d9c241d5-7beb-46df-8f20-017cec82fe35"},{"name":"Project Import","id":"6c0cc82b-6995-4fe9-9bfd-46159d35dcaa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"template\": {\n    \"title\": \"Example Project\",\n    \"version\": \"2.0.0\",\n    \"description\": \"An example project\",\n    \"name\": \"example\",\n    \"roles\": {\n      \"administrator\": {\n        \"title\": \"Administrator\",\n        \"description\": \"A role for Administrative Users.\",\n        \"admin\": true,\n        \"default\": false\n      },\n      \"authenticated\": {\n        \"title\": \"Authenticated\",\n        \"description\": \"A role for Authenticated Users.\",\n        \"admin\": false,\n        \"default\": false\n      },\n      \"anonymous\": {\n        \"title\": \"Anonymous\",\n        \"description\": \"A role for Anonymous Users.\",\n        \"admin\": false,\n        \"default\": true\n      }\n    },\n    \"forms\": {\n      \"adminLogin\": {\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userRegister\": {\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"label\": \"Submit\",\n            \"input\": true,\n            \"type\": \"button\"\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userLogin\": {\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"actions\": {\n      \"user:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"user\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"authenticated\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"user:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"user\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"admin:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"admin\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"administrator\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"admin:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"admin\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"reportingui:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"reportingui\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resource\": \"user\",\n          \"fields\": {\n            \"email\": \"email\",\n            \"password\": \"password\"\n          }\n        },\n        \"priority\": 11,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\"\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"adminLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"adminLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"admin\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      }\n    },\n    \"resources\": {\n      \"reportingui\": {\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"pdfComponents\": [],\n        \"display\": \"wizard\",\n        \"tags\": [\n          \"noBuilderResource\"\n        ],\n        \"settings\": {\n          \"wizardHeaderType\": \"Vertical\"\n        },\n        \"components\": [\n          {\n            \"title\": \"Basic Settings\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"basic\",\n            \"type\": \"panel\",\n            \"label\": \"Page 6\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version1\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                \"label\": \"Report Setup - Basic Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns\",\n                \"columns\": [\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Title\",\n                        \"placeholder\": \"Report Title\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"title\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  },\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Name\",\n                        \"placeholder\": \"Report Name\",\n                        \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                        \"allowCalculateOverride\": true,\n                        \"validate\": {\n                          \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                          \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                        },\n                        \"unique\": true,\n                        \"key\": \"name\",\n                        \"logic\": [\n                          {\n                            \"name\": \"make required\",\n                            \"trigger\": {\n                              \"type\": \"javascript\",\n                              \"javascript\": \"result = data.title;\"\n                            },\n                            \"actions\": [\n                              {\n                                \"name\": \"make required\",\n                                \"type\": \"property\",\n                                \"property\": {\n                                  \"label\": \"Required\",\n                                  \"value\": \"validate.required\",\n                                  \"type\": \"boolean\"\n                                },\n                                \"state\": true\n                              }\n                            ]\n                          }\n                        ],\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  }\n                ],\n                \"key\": \"columns1\",\n                \"type\": \"columns\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Forms\",\n                \"persistent\": false,\n                \"trigger\": {\n                  \"init\": false,\n                  \"server\": false\n                },\n                \"refreshOn\": \"forms\",\n                \"refreshOnEvent\": \"formsSet\",\n                \"event\": \"reportingFormsUpdated\",\n                \"dataSrc\": \"url\",\n                \"fetch\": {\n                  \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                  \"method\": \"get\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ],\n                  \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                  \"forwardHeaders\": false,\n                  \"authenticate\": true\n                },\n                \"allowCaching\": true,\n                \"key\": \"reportingForms\",\n                \"type\": \"datasource\",\n                \"indexeddb\": {},\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"gridSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings3\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Items per page\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                    \"tableView\": true,\n                    \"defaultValue\": 10,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"5\",\n                          \"value\": 5\n                        },\n                        {\n                          \"label\": \"10\",\n                          \"value\": 10\n                        },\n                        {\n                          \"label\": \"25\",\n                          \"value\": 25\n                        },\n                        {\n                          \"label\": \"50\",\n                          \"value\": 50\n                        },\n                        {\n                          \"label\": \"100\",\n                          \"value\": 100\n                        },\n                        {\n                          \"label\": \"All\",\n                          \"value\": -1\n                        }\n                      ]\n                    },\n                    \"key\": \"itemsPerPage\",\n                    \"type\": \"select\",\n                    \"input\": true,\n                    \"weight\": 442\n                  },\n                  {\n                    \"label\": \"Enable to Store Request Result in the Cache\",\n                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                    \"tableView\": false,\n                    \"defaultValue\": true,\n                    \"key\": \"allowCaching\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Cell max width\",\n                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"cellMaxWidth\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Source Forms\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"dataSourcePanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 1\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                \"label\": \"Basic Report Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"sourceFormsSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Choose from the Forms within this Project:\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"url\",\n                \"data\": {\n                  \"url\": \"{{Formio.projectUrl}}/form\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ]\n                },\n                \"valueProperty\": \"_id\",\n                \"template\": \"<span>{{ item.title }}</span>\",\n                \"validate\": {\n                  \"required\": true,\n                  \"select\": false\n                },\n                \"key\": \"forms\",\n                \"type\": \"select\",\n                \"disableLimit\": false,\n                \"searchField\": \"title__regex\",\n                \"noRefreshOnScroll\": false,\n                \"authenticate\": true,\n                \"input\": true\n              },\n              {\n                \"label\": \"Forms Connections\",\n                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Connection\",\n                \"redrawOn\": \"reportingForms\",\n                \"validate\": {\n                  \"required\": true\n                },\n                \"rowDrafts\": false,\n                \"key\": \"connections\",\n                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                \"logic\": [\n                  {\n                    \"name\": \"min max validation\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = !!data.reportingForms;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"min max validation\",\n                        \"type\": \"mergeComponentSchema\",\n                        \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"reorder\": false,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Data Source Connections\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Base Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"baseFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"connections.baseForm\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Joining Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"joiningFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"hideLabel\": true,\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Calculated Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"extraColumnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 7\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version3\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"calculatedColumnsSettingsDescription\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Calculated Extra Columns\",\n                \"hideLabel\": true,\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"redrawOn\": \"reportingForms\",\n                \"rowDrafts\": false,\n                \"key\": \"calculatedColumns\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"multiple\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"args\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"arg\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"reorder\": false,\n                    \"addAnotherPosition\": \"bottom\",\n                    \"layoutFixed\": false,\n                    \"enableRowGroups\": false,\n                    \"initEmpty\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"concatArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"datagrid\",\n                    \"input\": true,\n                    \"components\": [\n                      {\n                        \"label\": \"Field\",\n                        \"widget\": \"choicesjs\",\n                        \"tableView\": false,\n                        \"dataSrc\": \"custom\",\n                        \"data\": {\n                          \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                        },\n                        \"valueProperty\": \"value\",\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"field\",\n                        \"type\": \"select\",\n                        \"input\": true\n                      },\n                      {\n                        \"label\": \"Connector\",\n                        \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": false,\n                        \"key\": \"connector\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ]\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Dividend\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"dividend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Divisor\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"divisor\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"divideArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Minuend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"minuend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Subtrahend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"subtrahend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"subtractArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Start Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"startDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"End Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"endDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Unit\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"unit\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"size\": \"md\",\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"currentWidth\": 4\n                      }\n                    ],\n                    \"key\": \"dateDiffArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Date\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"date\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"calculatedColumnsSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"calcSettingsDescription\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Use Thousands Separator\",\n                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"thousandsSeparator\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Aggregation\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"groupingPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 8\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version4\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                \"label\": \"Content\",\n                \"refreshOnChange\": false,\n                \"key\": \"content\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Fields to group by\",\n                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                \"reorder\": false,\n                \"addAnother\": \"Add Field\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"key\": \"groups.groupingFields\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"placeholder\": \"Grouping Field\",\n                    \"hideLabel\": true,\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Calculated Aggregation Columns\",\n                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"rowDrafts\": false,\n                \"key\": \"groups.calculatedColumns\",\n                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select operator to calculate column value\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"argument\",\n                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"columnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 2\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns List\",\n                \"persistent\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                \"key\": \"columnsList\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Type\",\n                \"persistent\": false,\n                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                \"key\": \"reportType\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Available Columns\",\n                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                \"reorder\": true,\n                \"addAnother\": \"Add Column\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"validate\": {\n                  \"required\": true\n                },\n                \"key\": \"availableColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Column\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"column\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Display Title\",\n                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"displayTitle\",\n                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Default Columns\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"custom\",\n                \"data\": {\n                  \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                },\n                \"valueProperty\": \"value\",\n                \"refreshOn\": \"availableColumns\",\n                \"key\": \"defaultColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"select\",\n                \"input\": true\n              }\n            ]\n          },\n          {\n            \"title\": \"Control Panel\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"controlsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 9\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Enable Control Panel\",\n                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                \"tableView\": false,\n                \"defaultValue\": false,\n                \"key\": \"enableControls\",\n                \"type\": \"checkbox\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Controls Settings\",\n                \"tableView\": false,\n                \"key\": \"controlsSettings\",\n                \"customConditional\": \"show = data.enableControls;\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings8\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Control Panel Title\",\n                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Control Panel Theme\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"defaultValue\": \"default\",\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Default\",\n                          \"value\": \"default\"\n                        },\n                        {\n                          \"label\": \"Primary\",\n                          \"value\": \"primary\"\n                        },\n                        {\n                          \"label\": \"Info\",\n                          \"value\": \"info\"\n                        },\n                        {\n                          \"label\": \"Success\",\n                          \"value\": \"success\"\n                        },\n                        {\n                          \"label\": \"Danger\",\n                          \"value\": \"danger\"\n                        },\n                        {\n                          \"label\": \"Warning\",\n                          \"value\": \"warning\"\n                        }\n                      ]\n                    },\n                    \"key\": \"theme\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Initially Collapsed\",\n                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"collapsePanel\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Filters \",\n            \"collapsible\": false,\n            \"key\": \"filtersPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 3\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filters enable end users of this report to view any subset of data needed at runtime. Customize Filters for your Report Below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Number Of Filters Per Row\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel Filters Section.\",\n                \"tableView\": false,\n                \"defaultValue\": 2,\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"1\",\n                      \"value\": \"1\"\n                    },\n                    {\n                      \"label\": \"2\",\n                      \"value\": \"2\"\n                    },\n                    {\n                      \"label\": \"3\",\n                      \"value\": \"3\"\n                    },\n                    {\n                      \"label\": \"4\",\n                      \"value\": \"4\"\n                    }\n                  ]\n                },\n                \"dataType\": \"number\",\n                \"key\": \"filtersPerRow\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Filter Label Position\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                \"tableView\": false,\n                \"defaultValue\": \"top\",\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"Top\",\n                      \"value\": \"top\"\n                    },\n                    {\n                      \"label\": \"Left\",\n                      \"value\": \"left-left\"\n                    },\n                    {\n                      \"label\": \"Right\",\n                      \"value\": \"right-right\"\n                    }\n                  ]\n                },\n                \"key\": \"filterLabelPosition\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Control Panel Filters\",\n                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                \"reorder\": true,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"key\": \"filters\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = instance.root.data.columnsList;\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"filterType\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Title\",\n                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"filterTitle\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Actions\",\n            \"collapsible\": false,\n            \"key\": \"actionsPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 4\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version8\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Actions\",\n                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Action\",\n                \"rowDrafts\": false,\n                \"key\": \"actions\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Title\",\n                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Export CSV\",\n                          \"value\": \"csv\"\n                        },\n                        {\n                          \"label\": \"Download PDF\",\n                          \"value\": \"pdf\"\n                        },\n                        {\n                          \"label\": \"Custom\",\n                          \"value\": \"custom\"\n                        }\n                      ]\n                    },\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"type\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Apply action for:\",\n                    \"optionsLabelPosition\": \"right\",\n                    \"inline\": true,\n                    \"tableView\": false,\n                    \"defaultValue\": \"availableColumns\",\n                    \"values\": [\n                      {\n                        \"label\": \"All Available Columns\",\n                        \"value\": \"availableColumns\",\n                        \"shortcut\": \"\"\n                      },\n                      {\n                        \"label\": \"Visible Columns\",\n                        \"value\": \"visibleColumns\",\n                        \"shortcut\": \"\"\n                      }\n                    ],\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"applyFor\",\n                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                    \"type\": \"radio\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Print Limit\",\n                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"printLimit\",\n                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Custom JS Code\",\n                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                    \"applyMaskOn\": \"change\",\n                    \"editor\": \"ace\",\n                    \"autoExpand\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"customCode\",\n                    \"conditional\": {\n                      \"conjunction\": \"all\"\n                    },\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"textarea\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"HTML\",\n                    \"attrs\": [\n                      {\n                        \"attr\": \"\",\n                        \"value\": \"\"\n                      }\n                    ],\n                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"html\",\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"htmlelement\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"properties\": {\n          \"version\": 9\n        },\n        \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"admin\": {\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"user\": {\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"revisions\": {},\n    \"reports\": {},\n    \"access\": [\n      {\n        \"type\": \"create_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"create_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_all\",\n        \"roles\": []\n      }\n    ]\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/import","description":"<p>This API allows you to import template JSON into an existing template, which can be fetched using the export API on any project endpoint. The import process is an 'additive' process. Any forms that exist wtihin the template that do not exist within the destination project will be created. Any forms that exist in both the template and the destination project will be completely overwritten to match the form within the template. However, any forms that exist within the destination project that DO NOT exist within the template will not be touched. For this reason, you can import a minimal template that ONLY contains the forms and resources you wish to modify and once imported it will modify (or create) those forms, but will not touch the forms and resources within the destination project that are not contained within the template.</p>\n","urlObject":{"path":["{{ projectName }}","import"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"037a481a-2621-431c-8bda-576bb08539a7","name":"Project Import","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"template\": {\n    \"title\": \"Example Project Updated\",\n    \"version\": \"2.0.0\",\n    \"description\": \"This is an updated project.\",\n    \"name\": \"example\",\n    \"roles\": {\n      \"administrator\": {\n        \"title\": \"Administrator\",\n        \"description\": \"A role for Administrative Users.\",\n        \"admin\": true,\n        \"default\": false\n      },\n      \"authenticated\": {\n        \"title\": \"Authenticated\",\n        \"description\": \"A role for Authenticated Users.\",\n        \"admin\": false,\n        \"default\": false\n      },\n      \"anonymous\": {\n        \"title\": \"Anonymous\",\n        \"description\": \"A role for Anonymous Users.\",\n        \"admin\": false,\n        \"default\": true\n      }\n    },\n    \"forms\": {\n      \"adminLogin\": {\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userRegister\": {\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"label\": \"Submit\",\n            \"input\": true,\n            \"type\": \"button\"\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userLogin\": {\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"actions\": {\n      \"user:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"user\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"authenticated\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"user:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"user\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"admin:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"admin\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"administrator\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"admin:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"admin\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"reportingui:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"reportingui\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resource\": \"user\",\n          \"fields\": {\n            \"email\": \"email\",\n            \"password\": \"password\"\n          }\n        },\n        \"priority\": 11,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\"\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"adminLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"adminLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"admin\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      }\n    },\n    \"resources\": {\n      \"reportingui\": {\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"pdfComponents\": [],\n        \"display\": \"wizard\",\n        \"tags\": [\n          \"noBuilderResource\"\n        ],\n        \"settings\": {\n          \"wizardHeaderType\": \"Vertical\"\n        },\n        \"components\": [\n          {\n            \"title\": \"Basic Settings\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"basic\",\n            \"type\": \"panel\",\n            \"label\": \"Page 6\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version1\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                \"label\": \"Report Setup - Basic Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns\",\n                \"columns\": [\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Title\",\n                        \"placeholder\": \"Report Title\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"title\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  },\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Name\",\n                        \"placeholder\": \"Report Name\",\n                        \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                        \"allowCalculateOverride\": true,\n                        \"validate\": {\n                          \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                          \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                        },\n                        \"unique\": true,\n                        \"key\": \"name\",\n                        \"logic\": [\n                          {\n                            \"name\": \"make required\",\n                            \"trigger\": {\n                              \"type\": \"javascript\",\n                              \"javascript\": \"result = data.title;\"\n                            },\n                            \"actions\": [\n                              {\n                                \"name\": \"make required\",\n                                \"type\": \"property\",\n                                \"property\": {\n                                  \"label\": \"Required\",\n                                  \"value\": \"validate.required\",\n                                  \"type\": \"boolean\"\n                                },\n                                \"state\": true\n                              }\n                            ]\n                          }\n                        ],\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  }\n                ],\n                \"key\": \"columns1\",\n                \"type\": \"columns\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Forms\",\n                \"persistent\": false,\n                \"trigger\": {\n                  \"init\": false,\n                  \"server\": false\n                },\n                \"refreshOn\": \"forms\",\n                \"refreshOnEvent\": \"formsSet\",\n                \"event\": \"reportingFormsUpdated\",\n                \"dataSrc\": \"url\",\n                \"fetch\": {\n                  \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                  \"method\": \"get\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ],\n                  \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                  \"forwardHeaders\": false,\n                  \"authenticate\": true\n                },\n                \"allowCaching\": true,\n                \"key\": \"reportingForms\",\n                \"type\": \"datasource\",\n                \"indexeddb\": {},\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"gridSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings3\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Items per page\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                    \"tableView\": true,\n                    \"defaultValue\": 10,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"5\",\n                          \"value\": 5\n                        },\n                        {\n                          \"label\": \"10\",\n                          \"value\": 10\n                        },\n                        {\n                          \"label\": \"25\",\n                          \"value\": 25\n                        },\n                        {\n                          \"label\": \"50\",\n                          \"value\": 50\n                        },\n                        {\n                          \"label\": \"100\",\n                          \"value\": 100\n                        },\n                        {\n                          \"label\": \"All\",\n                          \"value\": -1\n                        }\n                      ]\n                    },\n                    \"key\": \"itemsPerPage\",\n                    \"type\": \"select\",\n                    \"input\": true,\n                    \"weight\": 442\n                  },\n                  {\n                    \"label\": \"Enable to Store Request Result in the Cache\",\n                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                    \"tableView\": false,\n                    \"defaultValue\": true,\n                    \"key\": \"allowCaching\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Cell max width\",\n                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"cellMaxWidth\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Source Forms\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"dataSourcePanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 1\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                \"label\": \"Basic Report Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"sourceFormsSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Choose from the Forms within this Project:\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"url\",\n                \"data\": {\n                  \"url\": \"{{Formio.projectUrl}}/form\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ]\n                },\n                \"valueProperty\": \"_id\",\n                \"template\": \"<span>{{ item.title }}</span>\",\n                \"validate\": {\n                  \"required\": true,\n                  \"select\": false\n                },\n                \"key\": \"forms\",\n                \"type\": \"select\",\n                \"disableLimit\": false,\n                \"searchField\": \"title__regex\",\n                \"noRefreshOnScroll\": false,\n                \"authenticate\": true,\n                \"input\": true\n              },\n              {\n                \"label\": \"Forms Connections\",\n                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Connection\",\n                \"redrawOn\": \"reportingForms\",\n                \"validate\": {\n                  \"required\": true\n                },\n                \"rowDrafts\": false,\n                \"key\": \"connections\",\n                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                \"logic\": [\n                  {\n                    \"name\": \"min max validation\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = !!data.reportingForms;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"min max validation\",\n                        \"type\": \"mergeComponentSchema\",\n                        \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"reorder\": false,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Data Source Connections\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Base Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"baseFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"connections.baseForm\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Joining Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"joiningFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"hideLabel\": true,\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Calculated Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"extraColumnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 7\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version3\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"calculatedColumnsSettingsDescription\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Calculated Extra Columns\",\n                \"hideLabel\": true,\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"redrawOn\": \"reportingForms\",\n                \"rowDrafts\": false,\n                \"key\": \"calculatedColumns\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"multiple\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"args\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"arg\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"reorder\": false,\n                    \"addAnotherPosition\": \"bottom\",\n                    \"layoutFixed\": false,\n                    \"enableRowGroups\": false,\n                    \"initEmpty\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"concatArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"datagrid\",\n                    \"input\": true,\n                    \"components\": [\n                      {\n                        \"label\": \"Field\",\n                        \"widget\": \"choicesjs\",\n                        \"tableView\": false,\n                        \"dataSrc\": \"custom\",\n                        \"data\": {\n                          \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                        },\n                        \"valueProperty\": \"value\",\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"field\",\n                        \"type\": \"select\",\n                        \"input\": true\n                      },\n                      {\n                        \"label\": \"Connector\",\n                        \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": false,\n                        \"key\": \"connector\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ]\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Dividend\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"dividend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Divisor\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"divisor\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"divideArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Minuend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"minuend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Subtrahend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"subtrahend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"subtractArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Start Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"startDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"End Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"endDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Unit\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"unit\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"size\": \"md\",\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"currentWidth\": 4\n                      }\n                    ],\n                    \"key\": \"dateDiffArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Date\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"date\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"calculatedColumnsSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"calcSettingsDescription\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Use Thousands Separator\",\n                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"thousandsSeparator\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Aggregation\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"groupingPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 8\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version4\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                \"label\": \"Content\",\n                \"refreshOnChange\": false,\n                \"key\": \"content\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Fields to group by\",\n                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                \"reorder\": false,\n                \"addAnother\": \"Add Field\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"key\": \"groups.groupingFields\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"placeholder\": \"Grouping Field\",\n                    \"hideLabel\": true,\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Calculated Aggregation Columns\",\n                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"rowDrafts\": false,\n                \"key\": \"groups.calculatedColumns\",\n                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select operator to calculate column value\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"argument\",\n                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"columnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 2\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns List\",\n                \"persistent\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                \"key\": \"columnsList\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Type\",\n                \"persistent\": false,\n                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                \"key\": \"reportType\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Available Columns\",\n                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                \"reorder\": true,\n                \"addAnother\": \"Add Column\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"validate\": {\n                  \"required\": true\n                },\n                \"key\": \"availableColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Column\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"column\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Display Title\",\n                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"displayTitle\",\n                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Default Columns\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"custom\",\n                \"data\": {\n                  \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                },\n                \"valueProperty\": \"value\",\n                \"refreshOn\": \"availableColumns\",\n                \"key\": \"defaultColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"select\",\n                \"input\": true\n              }\n            ]\n          },\n          {\n            \"title\": \"Control Panel\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"controlsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 9\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Enable Control Panel\",\n                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                \"tableView\": false,\n                \"defaultValue\": false,\n                \"key\": \"enableControls\",\n                \"type\": \"checkbox\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Controls Settings\",\n                \"tableView\": false,\n                \"key\": \"controlsSettings\",\n                \"customConditional\": \"show = data.enableControls;\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings8\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Control Panel Title\",\n                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Control Panel Theme\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"defaultValue\": \"default\",\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Default\",\n                          \"value\": \"default\"\n                        },\n                        {\n                          \"label\": \"Primary\",\n                          \"value\": \"primary\"\n                        },\n                        {\n                          \"label\": \"Info\",\n                          \"value\": \"info\"\n                        },\n                        {\n                          \"label\": \"Success\",\n                          \"value\": \"success\"\n                        },\n                        {\n                          \"label\": \"Danger\",\n                          \"value\": \"danger\"\n                        },\n                        {\n                          \"label\": \"Warning\",\n                          \"value\": \"warning\"\n                        }\n                      ]\n                    },\n                    \"key\": \"theme\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Initially Collapsed\",\n                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"collapsePanel\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Filters\",\n            \"collapsible\": false,\n            \"key\": \"filtersPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 3\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filters enable end users of this report to view any subset of data needed at runtime. Customize Filters for your Report Below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Number Of Filters Per Row\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel Filters Section.\",\n                \"tableView\": false,\n                \"defaultValue\": 2,\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"1\",\n                      \"value\": \"1\"\n                    },\n                    {\n                      \"label\": \"2\",\n                      \"value\": \"2\"\n                    },\n                    {\n                      \"label\": \"3\",\n                      \"value\": \"3\"\n                    },\n                    {\n                      \"label\": \"4\",\n                      \"value\": \"4\"\n                    }\n                  ]\n                },\n                \"dataType\": \"number\",\n                \"key\": \"filtersPerRow\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Filter Label Position\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                \"tableView\": false,\n                \"defaultValue\": \"top\",\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"Top\",\n                      \"value\": \"top\"\n                    },\n                    {\n                      \"label\": \"Left\",\n                      \"value\": \"left-left\"\n                    },\n                    {\n                      \"label\": \"Right\",\n                      \"value\": \"right-right\"\n                    }\n                  ]\n                },\n                \"key\": \"filterLabelPosition\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Control Panel Filters\",\n                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                \"reorder\": true,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"key\": \"filters\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = instance.root.data.columnsList;\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"filterType\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Title\",\n                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"filterTitle\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Actions\",\n            \"collapsible\": false,\n            \"key\": \"actionsPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 4\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version8\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Actions\",\n                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Action\",\n                \"rowDrafts\": false,\n                \"key\": \"actions\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Title\",\n                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Export CSV\",\n                          \"value\": \"csv\"\n                        },\n                        {\n                          \"label\": \"Download PDF\",\n                          \"value\": \"pdf\"\n                        },\n                        {\n                          \"label\": \"Custom\",\n                          \"value\": \"custom\"\n                        }\n                      ]\n                    },\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"type\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Apply action for:\",\n                    \"optionsLabelPosition\": \"right\",\n                    \"inline\": true,\n                    \"tableView\": false,\n                    \"defaultValue\": \"availableColumns\",\n                    \"values\": [\n                      {\n                        \"label\": \"All Available Columns\",\n                        \"value\": \"availableColumns\",\n                        \"shortcut\": \"\"\n                      },\n                      {\n                        \"label\": \"Visible Columns\",\n                        \"value\": \"visibleColumns\",\n                        \"shortcut\": \"\"\n                      }\n                    ],\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"applyFor\",\n                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                    \"type\": \"radio\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Print Limit\",\n                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"printLimit\",\n                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Custom JS Code\",\n                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                    \"applyMaskOn\": \"change\",\n                    \"editor\": \"ace\",\n                    \"autoExpand\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"customCode\",\n                    \"conditional\": {\n                      \"conjunction\": \"all\"\n                    },\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"textarea\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"HTML\",\n                    \"attrs\": [\n                      {\n                        \"attr\": \"\",\n                        \"value\": \"\"\n                      }\n                    ],\n                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"html\",\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"htmlelement\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"properties\": {\n          \"version\": 9\n        },\n        \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"admin\": {\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"user\": {\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"revisions\": {},\n    \"reports\": {},\n    \"access\": [\n      {\n        \"type\": \"create_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"create_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_all\",\n        \"roles\": []\n      }\n    ]\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/import"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 13:31:45 GMT"},{"key":"Content-Type","value":"text/html; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2-sKmCFqMkJrnmakrB623y6W4bSVw\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"Ok"}],"_postman_id":"6c0cc82b-6995-4fe9-9bfd-46159d35dcaa"},{"name":"Delete Project","id":"3e1a022b-3125-4284-829d-26f2e44b92d7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"{{ baseUrl }}/project/{{ projectToDeleteId }}","description":"<p>This API will perform a 'soft' delete on a project and the forms within the project. It should be noted that these are 'soft' delete operations, which means that the database will still contain all of the projects, forms, and submissions within this project, but the <code>deleted</code> property of these database records will be set to the timestamp in which it was deleted. To perform a full delete, this will need to be done at the database layer to delete any records that have a deleted timestamp value.</p>\n","urlObject":{"path":["project","{{ projectToDeleteId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"3e1a022b-3125-4284-829d-26f2e44b92d7"}],"id":"414aa6bd-1f3a-4efc-bda5-3c3988ed1a7b","description":"<p>The Project APIs allow a platform administrator the ability to create and find Projects within a Form.io deployment.</p>\n","_postman_id":"414aa6bd-1f3a-4efc-bda5-3c3988ed1a7b"},{"name":"Team API","item":[{"name":"Create Team","event":[{"listen":"test","script":{"id":"fef785a2-cb7c-451f-adba-82310fe11aaf","exec":["pm.environment.set(\" teamId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"9b5d397c-3149-4e27-ae44-4fd3a78a7d60","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","description":"<p>A platform administrators JWT token</p>\n"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"name\": \"Form Builders\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/team","description":"<p>Teams allow multiple developers and form builders to collaborate and have access to Projects and Stages. Any user on the platform can create a new team. They can then assign that team to a project they own or administer.</p>\n","urlObject":{"path":["team"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"7142a46f-b20c-4c28-8f42-3d1060a6c5ed","name":"Create Team","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","description":"A platform administrators JWT token"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"name\": \"Form Builders\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/team"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 15 Apr 2026 16:11:52 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"657"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"291-NV1/OluUZhpToawgeabB51E6t8s\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"650a5bfcb9ac8160c0968dc1\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"55\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"name\": \"Form Builders\"\n    },\n    \"_id\": \"69dfb8c8bb04c38a91029e2e\",\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-15T16:11:52.597Z\",\n    \"modified\": \"2026-04-15T16:11:52.597Z\"\n}"}],"_postman_id":"9b5d397c-3149-4e27-ae44-4fd3a78a7d60"},{"name":"Get all Teams","event":[{"listen":"test","script":{"id":"e5e59d16-338c-4d1c-ab3a-4f452b357199","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"9be3d460-f695-4588-972f-d4d4022197bc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","description":"<p>A platform administrators JWT token</p>\n"}],"url":"{{ baseUrl }}/team/all","description":"<p>Returns a list of all available teams within a deployment. Within each record, the team information is provided within the <code>data.name</code> property. The <code>_id</code> of each team is going to be referred to as the <code>teamId</code> of that team.</p>\n","urlObject":{"path":["team","all"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"8746694e-2045-4960-a56b-3ed2be62c435","name":"Get all Teams","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","description":"A platform administrators JWT token"}],"url":"https://forms.example.com/team/all"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 17:30:43 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"7887"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"1ecf-yzjZcIKv7odVzMMeE7iGpetviuo\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"eSignatures\": [],\n        \"_id\": \"6578b3e01c5d0de6f55e2c2c\",\n        \"form\": \"650a5bfcb9ac8160c0968dc1\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.18.0.1\",\n                \"x-forwarded-for\": \"172.18.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"58\",\n                \"sec-ch-ua\": \"\\\"Brave\\\";v=\\\"119\\\", \\\"Chromium\\\";v=\\\"119\\\", \\\"Not?A_Brand\\\";v=\\\"24\\\"\",\n                \"accept\": \"application/json\",\n                \"content-type\": \"application/json\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n                \"sec-ch-ua-platform\": \"\\\"macOS\\\"\",\n                \"sec-gpc\": \"1\",\n                \"accept-language\": \"en-US,en;q=0.5\",\n                \"origin\": \"https://forms.example.com\",\n                \"sec-fetch-site\": \"same-origin\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-dest\": \"empty\",\n                \"referer\": \"https://forms.example.com/\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"memberCount\": 4,\n            \"ssoteam\": false\n        },\n        \"data\": {\n            \"name\": \"Form Builder\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"state\": \"submitted\",\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2023-12-12T19:26:24.172Z\",\n        \"modified\": \"2023-12-12T19:26:24.173Z\",\n        \"__v\": 0\n    },\n    {\n        \"eSignatures\": [],\n        \"_id\": \"6632776f84a479920c4fcf87\",\n        \"form\": \"650a5bfcb9ac8160c0968dc1\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.18.0.1\",\n                \"x-forwarded-for\": \"172.18.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"54\",\n                \"sec-ch-ua\": \"\\\"Brave\\\";v=\\\"123\\\", \\\"Not:A-Brand\\\";v=\\\"8\\\", \\\"Chromium\\\";v=\\\"123\\\"\",\n                \"accept\": \"application/json\",\n                \"content-type\": \"application/json\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\",\n                \"sec-ch-ua-platform\": \"\\\"macOS\\\"\",\n                \"sec-gpc\": \"1\",\n                \"accept-language\": \"en-US,en;q=0.7\",\n                \"origin\": \"https://forms.example.com\",\n                \"sec-fetch-site\": \"same-origin\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-dest\": \"empty\",\n                \"referer\": \"https://forms.example.com/\",\n                \"accept-encoding\": \"gzip, deflate, br, zstd\"\n            },\n            \"memberCount\": 1\n        },\n        \"data\": {\n            \"name\": \"A Team\",\n            \"submit\": true\n        },\n        \"_fvid\": 0,\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"state\": \"submitted\",\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2024-05-01T17:10:07.739Z\",\n        \"modified\": \"2024-05-01T17:10:07.740Z\",\n        \"__v\": 0\n    },\n    {\n        \"eSignatures\": [],\n        \"_id\": \"6632777784a479920c4fcfe0\",\n        \"form\": \"650a5bfcb9ac8160c0968dc1\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.18.0.1\",\n                \"x-forwarded-for\": \"172.18.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"54\",\n                \"sec-ch-ua\": \"\\\"Brave\\\";v=\\\"123\\\", \\\"Not:A-Brand\\\";v=\\\"8\\\", \\\"Chromium\\\";v=\\\"123\\\"\",\n                \"accept\": \"application/json\",\n                \"content-type\": \"application/json\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\",\n                \"sec-ch-ua-platform\": \"\\\"macOS\\\"\",\n                \"sec-gpc\": \"1\",\n                \"accept-language\": \"en-US,en;q=0.7\",\n                \"origin\": \"https://forms.example.com\",\n                \"sec-fetch-site\": \"same-origin\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-dest\": \"empty\",\n                \"referer\": \"https://forms.example.com/\",\n                \"accept-encoding\": \"gzip, deflate, br, zstd\"\n            },\n            \"memberCount\": 1\n        },\n        \"data\": {\n            \"name\": \"B Team\",\n            \"submit\": true\n        },\n        \"_fvid\": 0,\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"state\": \"submitted\",\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2024-05-01T17:10:15.169Z\",\n        \"modified\": \"2024-05-01T17:10:15.169Z\",\n        \"__v\": 0\n    },\n    {\n        \"eSignatures\": [],\n        \"_id\": \"67224c3005c5cefc33f182b1\",\n        \"form\": \"650a5bfcb9ac8160c0968dc1\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.18.0.1\",\n                \"x-forwarded-for\": \"172.18.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"53\",\n                \"sec-ch-ua\": \"\\\"Chromium\\\";v=\\\"128\\\", \\\"Not;A=Brand\\\";v=\\\"24\\\", \\\"Brave\\\";v=\\\"128\\\"\",\n                \"accept\": \"application/json\",\n                \"sec-ch-ua-platform\": \"\\\"macOS\\\"\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n                \"content-type\": \"application/json\",\n                \"sec-gpc\": \"1\",\n                \"accept-language\": \"en-US,en;q=0.8\",\n                \"origin\": \"https://forms.example.com\",\n                \"sec-fetch-site\": \"same-origin\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-dest\": \"empty\",\n                \"referer\": \"https://forms.example.com/\",\n                \"accept-encoding\": \"gzip, deflate, br, zstd\"\n            },\n            \"memberCount\": 2\n        },\n        \"data\": {\n            \"name\": \"India\",\n            \"submit\": true\n        },\n        \"_fvid\": 0,\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"state\": \"submitted\",\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2024-10-30T15:09:36.560Z\",\n        \"modified\": \"2024-10-30T15:09:36.561Z\",\n        \"__v\": 0\n    },\n    {\n        \"eSignatures\": [],\n        \"_id\": \"67224c3a05c5cefc33f18318\",\n        \"form\": \"650a5bfcb9ac8160c0968dc1\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.18.0.1\",\n                \"x-forwarded-for\": \"172.18.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"55\",\n                \"sec-ch-ua\": \"\\\"Chromium\\\";v=\\\"128\\\", \\\"Not;A=Brand\\\";v=\\\"24\\\", \\\"Brave\\\";v=\\\"128\\\"\",\n                \"accept\": \"application/json\",\n                \"sec-ch-ua-platform\": \"\\\"macOS\\\"\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n                \"content-type\": \"application/json\",\n                \"sec-gpc\": \"1\",\n                \"accept-language\": \"en-US,en;q=0.8\",\n                \"origin\": \"https://forms.example.com\",\n                \"sec-fetch-site\": \"same-origin\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-dest\": \"empty\",\n                \"referer\": \"https://forms.example.com/\",\n                \"accept-encoding\": \"gzip, deflate, br, zstd\"\n            },\n            \"memberCount\": 2\n        },\n        \"data\": {\n            \"name\": \"Spanish\",\n            \"submit\": true\n        },\n        \"_fvid\": 0,\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"state\": \"submitted\",\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2024-10-30T15:09:46.044Z\",\n        \"modified\": \"2024-10-30T15:09:46.045Z\",\n        \"__v\": 0\n    },\n    {\n        \"_id\": \"69d53c988ae33e911322ef25\",\n        \"form\": \"650a5bfcb9ac8160c0968dc1\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"60\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"memberCount\": 1\n        },\n        \"data\": {\n            \"name\": \"Form Builders\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2026-04-07T17:19:20.561Z\",\n        \"modified\": \"2026-04-07T17:19:20.562Z\",\n        \"__v\": 0\n    },\n    {\n        \"_id\": \"69d53d508ae33e911322f040\",\n        \"form\": \"650a5bfcb9ac8160c0968dc1\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"60\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"memberCount\": 1\n        },\n        \"data\": {\n            \"name\": \"Form Builders\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2026-04-07T17:22:24.285Z\",\n        \"modified\": \"2026-04-07T17:22:24.286Z\",\n        \"__v\": 0\n    },\n    {\n        \"_id\": \"69d53f3aa0002582b8a0265a\",\n        \"form\": \"650a5bfcb9ac8160c0968dc1\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"60\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"memberCount\": 1\n        },\n        \"data\": {\n            \"name\": \"Form Builders\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2026-04-07T17:30:34.266Z\",\n        \"modified\": \"2026-04-07T17:30:34.267Z\",\n        \"__v\": 0\n    }\n]"}],"_postman_id":"9be3d460-f695-4588-972f-d4d4022197bc"},{"name":"Get all Teams per User","event":[{"listen":"test","script":{"id":"e5e59d16-338c-4d1c-ab3a-4f452b357199","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"e9274456-5522-4715-b43b-22bdb79fc70b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}","description":"<p>A platform administrators JWT token</p>\n"}],"url":"{{ baseUrl }}/team/all","description":"<p>By authenticating as the Platform user, instead of the platform administrator, the same API can be used to only retrieve the teams that the current user has been added to.</p>\n","urlObject":{"path":["team","all"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"c67edbd6-e16a-4e44-97e4-ee2575ca28dd","name":"Get all Teams per User","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}","description":"A platform administrators JWT token"}],"url":"https://forms.example.com/team/all"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 14:05:34 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"742"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2e6-NrD3ySAuvlMEcX031j/DPF+wnAQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65f4f040fa2cea257235e\",\n        \"form\": \"650a5bfcb9ac8160c0968dc1\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"60\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"memberCount\": 3,\n            \"ssoteam\": false\n        },\n        \"data\": {\n            \"name\": \"Form Builders\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2026-04-08T13:59:43.467Z\",\n        \"modified\": \"2026-04-08T13:59:43.468Z\",\n        \"__v\": 0\n    }\n]"}],"_postman_id":"e9274456-5522-4715-b43b-22bdb79fc70b"},{"name":"Get Team","id":"204ebb70-a015-4358-9e2c-a93530ffb9d0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","description":"<p>A platform administrator JWT token</p>\n"}],"url":"{{ baseUrl }}/team/{{ teamId }}","urlObject":{"path":["team","{{ teamId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"f4b004a6-1221-4dab-aa84-632bcf6c34f8","name":"Get Team","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","description":"A platform administrator JWT token"}],"url":"https://forms.example.com/team/69dfb8c8bb04c38a91029e2e"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 17:31:17 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"875"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"36b-Yo4cbNNI0bu0NdMKWxXodkjdIKA\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d53f3aa0002582b8a0265a\",\n    \"form\": \"650a5bfcb9ac8160c0968dc1\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"deleted\": null,\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"60\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"memberCount\": 1\n    },\n    \"data\": {\n        \"name\": \"Form Builders\",\n        \"members\": [],\n        \"admins\": [\n            {\n                \"_id\": \"650a5bfdb9ac8160c0968e59\",\n                \"memberId\": \"69d53f3aa0002582b8a0265e\",\n                \"data\": {\n                    \"email\": \"admin@example.com\"\n                },\n                \"status\": \"accepted\"\n            }\n        ]\n    },\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"externalTokens\": [],\n    \"created\": \"2026-04-07T17:30:34.266Z\",\n    \"modified\": \"2026-04-07T17:30:34.267Z\",\n    \"__v\": 0\n}"}],"_postman_id":"204ebb70-a015-4358-9e2c-a93530ffb9d0"},{"name":"Update Team","id":"f737566c-8015-4ff5-a2a5-f2839f09a49b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"name\": \"Form Builders Updated\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/team/{{ teamId }}","urlObject":{"path":["team","{{ teamId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"37dbd6d9-043b-4ab0-ab70-191e5ac4ad7f","name":"Update Team","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"name\": \"Form Builders\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/team/69dfb8c8bb04c38a91029e2e"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Tue, 07 Apr 2026 17:31:58 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"732"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2dc-YxWMD04A392gGHB5NPPeSEzo2hc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d53f3aa0002582b8a0265a\",\n    \"form\": \"650a5bfcb9ac8160c0968dc1\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"deleted\": null,\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"60\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"memberCount\": 1,\n        \"ssoteam\": false\n    },\n    \"data\": {\n        \"name\": \"Form Builders\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"externalTokens\": [],\n    \"created\": \"2026-04-07T17:30:34.266Z\",\n    \"modified\": \"2026-04-07T17:30:34.267Z\",\n    \"__v\": 0\n}"}],"_postman_id":"f737566c-8015-4ff5-a2a5-f2839f09a49b"},{"name":"Add Team Member","event":[{"listen":"test","script":{"id":"6d95924c-bb44-4cdd-a556-1e0efe620968","exec":["pm.environment.set(\" memberId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"9b25c88d-fd1e-4f3d-9e64-bc4d28b2a373","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"team\": {\n      \"_id\": \"{{ teamId }}\"\n    },\n    \"email\": \"{{ platformUserEmail }}\",\n    \"admin\": false\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/team/{{ teamId }}/member","urlObject":{"path":["team","{{ teamId }}","member"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"0909c9e1-7ba3-41a4-8cb8-a3286c846084","name":"Add Team Member","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"team\": {\n      \"_id\": \"69dfb8c8bb04c38a91029e2e\"\n    },\n    \"email\": \"developer@example.com\",\n    \"admin\": false\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/team/69dfb8c8bb04c38a91029e2e/member"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 12:48:19 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1398"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"576-jXu/HHGQjQBIyei71DlXfmSBz4g\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"650a5bfcb9ac8160c0968dcc\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"163\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"team\": {\n            \"_id\": \"69d64e3ca0002582b8a03282\",\n            \"form\": \"650a5bfcb9ac8160c0968dc1\",\n            \"owner\": \"650a5bfdb9ac8160c0968e59\",\n            \"roles\": [],\n            \"access\": [],\n            \"metadata\": {\n                \"headers\": {\n                    \"host\": \"forms.example.com\",\n                    \"x-real-ip\": \"172.19.0.1\",\n                    \"x-forwarded-for\": \"172.19.0.1\",\n                    \"x-forwarded-proto\": \"https\",\n                    \"connection\": \"close\",\n                    \"content-length\": \"60\",\n                    \"content-type\": \"application/json\",\n                    \"user-agent\": \"PostmanRuntime/7.53.0\",\n                    \"accept\": \"*/*\",\n                    \"cache-control\": \"no-cache\",\n                    \"accept-encoding\": \"gzip, deflate, br\"\n                },\n                \"memberCount\": 1,\n                \"ssoteam\": false\n            },\n            \"data\": {\n                \"name\": \"Form Builders\"\n            },\n            \"_fvid\": 0,\n            \"project\": \"650a5bfbb9ac8160c0968d80\",\n            \"state\": \"submitted\",\n            \"eSignatures\": [],\n            \"externalIds\": [],\n            \"externalTokens\": [],\n            \"created\": \"2026-04-08T12:46:52.804Z\",\n            \"modified\": \"2026-04-08T12:46:52.804Z\"\n        },\n        \"email\": \"developer@example.com\",\n        \"admin\": false\n    },\n    \"_id\": \"69d64e93a0002582b8a032dc\",\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-08T12:48:19.184Z\",\n    \"modified\": \"2026-04-08T12:48:19.184Z\"\n}"}],"_postman_id":"9b25c88d-fd1e-4f3d-9e64-bc4d28b2a373"},{"name":"Add Team Admin","id":"cd32a212-07fa-4e48-9537-26a97a56cee8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"team\": {\n      \"_id\": \"{{ teamId }}\"\n    },\n    \"email\": \"Marvin.Ratke@gmail.com\",\n    \"admin\": true\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/team/{{ teamId }}/member","urlObject":{"path":["team","{{ teamId }}","member"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"98d661ef-1f16-474a-afbd-e771c616fc34","name":"Add Team Admin","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"team\": {\n      \"_id\": \"69dfb8c8bb04c38a91029e2e\"\n    },\n    \"email\": \"devadmin@example.com\",\n    \"admin\": true\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/team/69dfb8c8bb04c38a91029e2e/member"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 12:48:39 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1396"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"574-MunYfT+a5uAwG+E8BEF4DFIqljw\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"650a5bfcb9ac8160c0968dcc\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"161\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"team\": {\n            \"_id\": \"69d64e3ca0002582b8a03282\",\n            \"form\": \"650a5bfcb9ac8160c0968dc1\",\n            \"owner\": \"650a5bfdb9ac8160c0968e59\",\n            \"roles\": [],\n            \"access\": [],\n            \"metadata\": {\n                \"headers\": {\n                    \"host\": \"forms.example.com\",\n                    \"x-real-ip\": \"172.19.0.1\",\n                    \"x-forwarded-for\": \"172.19.0.1\",\n                    \"x-forwarded-proto\": \"https\",\n                    \"connection\": \"close\",\n                    \"content-length\": \"60\",\n                    \"content-type\": \"application/json\",\n                    \"user-agent\": \"PostmanRuntime/7.53.0\",\n                    \"accept\": \"*/*\",\n                    \"cache-control\": \"no-cache\",\n                    \"accept-encoding\": \"gzip, deflate, br\"\n                },\n                \"memberCount\": 1,\n                \"ssoteam\": false\n            },\n            \"data\": {\n                \"name\": \"Form Builders\"\n            },\n            \"_fvid\": 0,\n            \"project\": \"650a5bfbb9ac8160c0968d80\",\n            \"state\": \"submitted\",\n            \"eSignatures\": [],\n            \"externalIds\": [],\n            \"externalTokens\": [],\n            \"created\": \"2026-04-08T12:46:52.804Z\",\n            \"modified\": \"2026-04-08T12:46:52.804Z\"\n        },\n        \"email\": \"devadmin@example.com\",\n        \"admin\": true\n    },\n    \"_id\": \"69d64ea7a0002582b8a032f3\",\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-08T12:48:39.103Z\",\n    \"modified\": \"2026-04-08T12:48:39.104Z\"\n}"}],"_postman_id":"cd32a212-07fa-4e48-9537-26a97a56cee8"},{"name":"Assign Team Admin","id":"844712a6-2aeb-4fe4-b548-dd02ec92c6a0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"{{ platformUserEmail }}\",\n    \"admin\": true\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/team/{{ teamId }}/member/{{ memberId }}","description":"<p>A team member can be turned into a team admin by sending the following request the team member endpoint.</p>\n","urlObject":{"path":["team","{{ teamId }}","member","{{ memberId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"11ccc08b-80b7-4471-a235-33e22f1208e4","name":"Assign Team Admin","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"developer@example.com\",\n    \"admin\": true\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/team/69dfb8c8bb04c38a91029e2e/member/69d64e93a0002582b8a032dc"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 12:50:14 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1397"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"575-Qe68NexxbOcvScrQSfi/ovwiqj8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"650a5bfcb9ac8160c0968dcc\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [],\n    \"access\": [],\n    \"externalIds\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"163\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"team\": {\n            \"_id\": \"69d64e3ca0002582b8a03282\",\n            \"form\": \"650a5bfcb9ac8160c0968dc1\",\n            \"owner\": \"650a5bfdb9ac8160c0968e59\",\n            \"roles\": [],\n            \"access\": [],\n            \"metadata\": {\n                \"headers\": {\n                    \"host\": \"forms.example.com\",\n                    \"x-real-ip\": \"172.19.0.1\",\n                    \"x-forwarded-for\": \"172.19.0.1\",\n                    \"x-forwarded-proto\": \"https\",\n                    \"connection\": \"close\",\n                    \"content-length\": \"60\",\n                    \"content-type\": \"application/json\",\n                    \"user-agent\": \"PostmanRuntime/7.53.0\",\n                    \"accept\": \"*/*\",\n                    \"cache-control\": \"no-cache\",\n                    \"accept-encoding\": \"gzip, deflate, br\"\n                },\n                \"memberCount\": 1,\n                \"ssoteam\": false\n            },\n            \"data\": {\n                \"name\": \"Form Builders\"\n            },\n            \"_fvid\": 0,\n            \"project\": \"650a5bfbb9ac8160c0968d80\",\n            \"state\": \"submitted\",\n            \"eSignatures\": [],\n            \"externalIds\": [],\n            \"externalTokens\": [],\n            \"created\": \"2026-04-08T12:46:52.804Z\",\n            \"modified\": \"2026-04-08T12:46:52.804Z\"\n        },\n        \"email\": \"developer@example.com\",\n        \"admin\": true\n    },\n    \"_id\": \"69d64e93a0002582b8a032dc\",\n    \"created\": \"2026-04-08T12:48:19.184Z\",\n    \"modified\": \"2026-04-08T12:50:14.880Z\",\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": []\n}"}],"_postman_id":"844712a6-2aeb-4fe4-b548-dd02ec92c6a0"},{"name":"Login as Team Member","event":[{"listen":"test","script":{"id":"0604e966-f527-4431-b4aa-9c4b39743582","exec":["pm.environment.set(\" platformUserJWT \", response.headers().get('x-jwt-token'));"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"46617a44-eaac-4676-82ff-92f170349caf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"{{ platformUserEmail }}\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/formio/user/login","urlObject":{"path":["formio","user","login"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"46617a44-eaac-4676-82ff-92f170349caf"},{"name":"Accept Team Invite","id":"2c658f29-f960-44a8-af17-3aabdbd634f2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}"}],"url":"{{ baseUrl }}/team/{{ teamId }}/join","urlObject":{"path":["team","{{ teamId }}","join"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"30b8ae79-c3a0-486a-bc9f-408d9d109cd0","name":"Accept Team Invite","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}"}],"url":"https://forms.example.com/team/69dfb8c8bb04c38a91029e2e/join"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:56:59 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"769"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"301-88C9r0YEPjUv75qFBR74FFWCJPA\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d65e81040fa2cea2571927\",\n    \"form\": \"650a5bfcb9ac8160c0968dcc\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"deleted\": null,\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"167\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"team\": {\n            \"_id\": \"69d65e81040fa2cea25718ce\"\n        },\n        \"email\": \"wilford_boyle@hotmail.com\",\n        \"admin\": true\n    },\n    \"_fvid\": 0,\n    \"project\": \"650a5bfbb9ac8160c0968d80\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"externalTokens\": [],\n    \"created\": \"2026-04-08T13:56:17.342Z\",\n    \"modified\": \"2026-04-08T13:56:17.508Z\",\n    \"__v\": 0\n}"}],"_postman_id":"2c658f29-f960-44a8-af17-3aabdbd634f2"},{"name":"Assign team to Project","id":"cf23c7eb-74da-4b18-a489-85c87f6ec07a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ projectId }}\",\n  \"title\": \"Example Project: 642 Updated\",\n  \"name\": \"{{ projectName }}\",\n  \"type\": \"project\",\n  \"description\": \"This is an updated project.\",\n  \"tag\": \"0.0.0\",\n  \"owner\": \"650a5bfdb9ac8160c0968e59\",\n  \"plan\": \"commercial\",\n  \"steps\": [],\n  \"framework\": \"angular\",\n  \"protect\": false,\n  \"formDefaults\": {},\n  \"access\": [\n    {\n      \"type\": \"create_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_read\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_write\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_admin\",\n      \"roles\": [\n        \"{{ teamId }}\"\n      ]\n    },\n    {\n      \"type\": \"team_access\",\n      \"roles\": []\n    }\n  ],\n  \"trial\": \"2026-03-31T16:08:57.320Z\",\n  \"created\": \"2026-03-31T16:08:57.320Z\",\n  \"modified\": \"2026-04-08T13:16:16.252Z\",\n  \"config\": {},\n  \"stageTitle\": \"Live\",\n  \"settings\": {\n    \"cors\": \"*\",\n    \"appOrigin\": \"https://forms.example.com\",\n    \"allowConfig\": false,\n    \"email\": {\n      \"smtp\": {\n        \"secure\": false,\n        \"host\": \"\",\n        \"port\": \"\",\n        \"auth\": {\n          \"user\": \"\",\n          \"pass\": \"\"\n        }\n      },\n      \"sendgrid\": {\n        \"auth\": {\n          \"api_key\": \"\"\n        }\n      },\n      \"mailgun\": {\n        \"auth\": {\n          \"api_key\": \"\",\n          \"domain\": \"\"\n        }\n      },\n      \"custom\": {\n        \"url\": \"\",\n        \"username\": \"\",\n        \"password\": \"\"\n      }\n    },\n    \"storage\": {\n      \"azure\": {\n        \"connectionString\": \"\",\n        \"container\": \"\",\n        \"startsWith\": \"\"\n      }\n    },\n    \"oauth\": {\n      \"github\": {\n        \"clientId\": \"\",\n        \"clientSecret\": \"\"\n      },\n      \"google\": {\n        \"clientId\": \"\",\n        \"clientSecret\": \"\"\n      }\n    },\n    \"sqlconnector\": {\n      \"host\": \"\",\n      \"type\": \"\",\n      \"user\": \"\",\n      \"password\": \"\"\n    },\n    \"ldap\": {\n      \"url\": \"\",\n      \"bindDn\": \"\",\n      \"bindCredentials\": \"\",\n      \"searchBase\": \"\",\n      \"searchFilter\": \"\"\n    },\n    \"tenantNamePath\": \"\",\n    \"tenantRolePath\": \"\",\n    \"esign\": {\n      \"kms\": \"\"\n    },\n    \"kms\": {},\n    \"pdf\": {\n      \"translationsUrl\": \"\"\n    },\n    \"csp\": \"\",\n    \"secret\": \"\",\n    \"custom\": {\n      \"css\": \"\",\n      \"js\": \"\"\n    },\n    \"formModule\": \"\",\n    \"recaptcha\": {\n      \"siteKey\": \"\",\n      \"secretKey\": \"\"\n    },\n    \"captcha\": {\n      \"siteKey\": \"\",\n      \"secretKey\": \"\"\n    },\n    \"google\": {\n      \"clientId\": \"\",\n      \"cskey\": \"\",\n      \"refreshtoken\": \"\"\n    },\n    \"kickbox\": {\n      \"apikey\": \"\"\n    }\n  },\n  \"public\": {\n    \"formModule\": \"\",\n    \"custom\": {\n      \"css\": \"\",\n      \"js\": \"\"\n    },\n    \"defaultStage\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}","description":"<p>In order to assign a team to a project, you need to add the team to the access property of that project, and then send an update API to that project. It is important to ensure that you also include all the other existing project access entries when making this change since the <code>access</code> is taken in its entirety when updating the project. Because of this, the following flow is recommended for adding a team to a project.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const projectUrl = '--- YOUR PROJECT ENDPOINT ---';\nconst projectHeaders = {\n  'Content-Type': 'application/json',\n  'x-jwt-token': '--- PLATFORM ADMIN JWT ---'\n};\nconst teamId = '--- TEAM ID ---';\n// Get the project via GET\nconst project = await (await (fetch(projectUrl, {\n  method: 'GET',\n  headers: projectHeaders\n}))).json();\n// Find existing access for 'team_admin'\nconst access = project.access.find(acc =&gt; (acc.type === 'team_admin'));\nif (access) {\n  const team = access.roles.find(r =&gt; r === teamId);\n  if (!team) {\n    // Add the team to the existing roles array.\n    access.roles.push(teamId);\n  }\n}\nelse {\n  // Add the project access.\n  project.access.push({\n    type: 'team_admin',\n    roles: [teamId]\n  });\n}\n// Update the project to include the team onto the project.\nawait fetch(projectUrl, {\n  method: 'PUT',\n  headers: projectHeaders,\n  body: JSON.stringify(project)\n});\n\n</code></pre>\n<p>The following permissions can be used when assigning a team to a project.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Team Permission</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>team_access</td>\n<td>This permission allows any user assigned to the team to 'see' the Project on the homepage, and to click on that project. But they do not have any other access available to them within the project. This is useful if you wish to grant a team access to a Stage, but do NOT wish to give that team access to the top-level project that contains the stage. In this scenario, you would assign a project with <code>team_access</code> to the top-level project, and then grant that team full access to one of the stages (using Stage Teams).</td>\n</tr>\n<tr>\n<td>team_read</td>\n<td>Grants a team 'read' access to the project. They have read access to all the Forms and Submission data within this project.</td>\n</tr>\n<tr>\n<td>team_write</td>\n<td>Grants a team 'write' access to the project. They have all permissions of <code>team_read</code> plus the ability to create and update forms and submissions within a project.</td>\n</tr>\n<tr>\n<td>team_admin</td>\n<td>Grants a team FULL access to the project. This provides anyone in this team the <code>team_write</code> permission plus the ability to configure the Project Settings of this project. Because of this, they would also be able to see any of the settings within the project.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["{{ projectName }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"849b39ff-2192-407b-be2a-7c2d63904085","name":"Assign team to Project","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69d6527d42ae1f2fed8c5627\",\n  \"title\": \"Example Project Updated\",\n  \"name\": \"example\",\n  \"type\": \"project\",\n  \"description\": \"This is an updated project.\",\n  \"tag\": \"0.0.0\",\n  \"owner\": \"650a5bfdb9ac8160c0968e59\",\n  \"plan\": \"commercial\",\n  \"steps\": [],\n  \"framework\": \"angular\",\n  \"protect\": false,\n  \"formDefaults\": {},\n  \"access\": [\n    {\n      \"type\": \"create_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_read\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_write\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_admin\",\n      \"roles\": [\n        \"69dfb8c8bb04c38a91029e2e\"\n      ]\n    },\n    {\n      \"type\": \"team_access\",\n      \"roles\": []\n    }\n  ],\n  \"trial\": \"2026-03-31T16:08:57.320Z\",\n  \"created\": \"2026-03-31T16:08:57.320Z\",\n  \"modified\": \"2026-04-08T13:16:16.252Z\",\n  \"config\": {},\n  \"stageTitle\": \"Live\",\n  \"settings\": {\n    \"cors\": \"*\",\n    \"appOrigin\": \"https://forms.example.com\",\n    \"allowConfig\": false,\n    \"email\": {\n      \"smtp\": {\n        \"secure\": false,\n        \"host\": \"\",\n        \"port\": \"\",\n        \"auth\": {\n          \"user\": \"\",\n          \"pass\": \"\"\n        }\n      },\n      \"sendgrid\": {\n        \"auth\": {\n          \"api_key\": \"\"\n        }\n      },\n      \"mailgun\": {\n        \"auth\": {\n          \"api_key\": \"\",\n          \"domain\": \"\"\n        }\n      },\n      \"custom\": {\n        \"url\": \"\",\n        \"username\": \"\",\n        \"password\": \"\"\n      }\n    },\n    \"storage\": {\n      \"azure\": {\n        \"connectionString\": \"\",\n        \"container\": \"\",\n        \"startsWith\": \"\"\n      }\n    },\n    \"oauth\": {\n      \"github\": {\n        \"clientId\": \"\",\n        \"clientSecret\": \"\"\n      },\n      \"google\": {\n        \"clientId\": \"\",\n        \"clientSecret\": \"\"\n      }\n    },\n    \"sqlconnector\": {\n      \"host\": \"\",\n      \"type\": \"\",\n      \"user\": \"\",\n      \"password\": \"\"\n    },\n    \"ldap\": {\n      \"url\": \"\",\n      \"bindDn\": \"\",\n      \"bindCredentials\": \"\",\n      \"searchBase\": \"\",\n      \"searchFilter\": \"\"\n    },\n    \"tenantNamePath\": \"\",\n    \"tenantRolePath\": \"\",\n    \"esign\": {\n      \"kms\": \"\"\n    },\n    \"kms\": {},\n    \"pdf\": {\n      \"translationsUrl\": \"\"\n    },\n    \"csp\": \"\",\n    \"secret\": \"\",\n    \"custom\": {\n      \"css\": \"\",\n      \"js\": \"\"\n    },\n    \"formModule\": \"\",\n    \"recaptcha\": {\n      \"siteKey\": \"\",\n      \"secretKey\": \"\"\n    },\n    \"captcha\": {\n      \"siteKey\": \"\",\n      \"secretKey\": \"\"\n    },\n    \"google\": {\n      \"clientId\": \"\",\n      \"cskey\": \"\",\n      \"refreshtoken\": \"\"\n    },\n    \"kickbox\": {\n      \"apikey\": \"\"\n    }\n  },\n  \"public\": {\n    \"formModule\": \"\",\n    \"custom\": {\n      \"css\": \"\",\n      \"js\": \"\"\n    },\n    \"defaultStage\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:22:55 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1863"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"747-GiLrqiMsrxlVO7PQ9qIY1TxxVS8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Example Project Updated\",\n    \"name\": \"example\",\n    \"type\": \"project\",\n    \"description\": \"This is an updated project.\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"config\": {},\n    \"framework\": \"angular\",\n    \"protect\": false,\n    \"access\": [\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": [\n                \"69d6503972199d60c56509e2\"\n            ]\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        }\n    ],\n    \"trial\": \"2026-03-31T16:08:57.320Z\",\n    \"formDefaults\": {},\n    \"stageTitle\": \"Live\",\n    \"_id\": \"69d6527d42ae1f2fed8c5627\",\n    \"created\": \"2026-03-31T16:08:57.320Z\",\n    \"modified\": \"2026-04-08T13:22:55.382Z\",\n    \"settings\": {\n        \"cors\": \"*\",\n        \"appOrigin\": \"https://forms.example.com\",\n        \"allowConfig\": false,\n        \"email\": {\n            \"smtp\": {\n                \"secure\": false,\n                \"host\": \"\",\n                \"port\": \"\",\n                \"auth\": {\n                    \"user\": \"\",\n                    \"pass\": \"\"\n                }\n            },\n            \"sendgrid\": {\n                \"auth\": {\n                    \"api_key\": \"\"\n                }\n            },\n            \"mailgun\": {\n                \"auth\": {\n                    \"api_key\": \"\",\n                    \"domain\": \"\"\n                }\n            },\n            \"custom\": {\n                \"url\": \"\",\n                \"username\": \"\",\n                \"password\": \"\"\n            }\n        },\n        \"storage\": {\n            \"azure\": {\n                \"connectionString\": \"\",\n                \"container\": \"\",\n                \"startsWith\": \"\"\n            }\n        },\n        \"oauth\": {\n            \"github\": {\n                \"clientId\": \"\",\n                \"clientSecret\": \"\"\n            },\n            \"google\": {\n                \"clientId\": \"\",\n                \"clientSecret\": \"\"\n            }\n        },\n        \"sqlconnector\": {\n            \"host\": \"\",\n            \"type\": \"\",\n            \"user\": \"\",\n            \"password\": \"\"\n        },\n        \"ldap\": {\n            \"url\": \"\",\n            \"bindDn\": \"\",\n            \"bindCredentials\": \"\",\n            \"searchBase\": \"\",\n            \"searchFilter\": \"\"\n        },\n        \"tenantNamePath\": \"\",\n        \"tenantRolePath\": \"\",\n        \"esign\": {\n            \"kms\": \"\"\n        },\n        \"kms\": {},\n        \"pdf\": {\n            \"translationsUrl\": \"\"\n        },\n        \"csp\": \"\",\n        \"secret\": \"\",\n        \"custom\": {\n            \"css\": \"\",\n            \"js\": \"\"\n        },\n        \"formModule\": \"\",\n        \"recaptcha\": {\n            \"siteKey\": \"\",\n            \"secretKey\": \"\"\n        },\n        \"captcha\": {\n            \"siteKey\": \"\",\n            \"secretKey\": \"\"\n        },\n        \"google\": {\n            \"clientId\": \"\",\n            \"cskey\": \"\",\n            \"refreshtoken\": \"\"\n        },\n        \"kickbox\": {\n            \"apikey\": \"\"\n        }\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {\n            \"css\": \"\",\n            \"js\": \"\"\n        },\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"cf23c7eb-74da-4b18-a489-85c87f6ec07a"},{"name":"Get a list of projects within a team","id":"f31d32e7-50a6-492b-97d4-dccf27f4abf6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/team/{{ teamId }}/projects","description":"<p>This request will return a list of projects that this team has been added to.</p>\n","urlObject":{"path":["team","{{ teamId }}","projects"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"295bb9b7-c54f-4fba-8eb1-a06ef7dfb37b","name":"Get a list of projects within a team","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"https://forms.example.com/team/69dfb8c8bb04c38a91029e2e/projects"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 14:02:31 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"157"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"9d-KSiRZzo9dfrq1LQB9QJY6b3gHUI\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65f4e040fa2cea257224d\",\n        \"title\": \"Example Project Updated\",\n        \"name\": \"example\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"permission\": \"team_admin\"\n    }\n]"}],"_postman_id":"f31d32e7-50a6-492b-97d4-dccf27f4abf6"},{"name":"Team Member has Project Access","id":"84dfcc72-9bf9-4f98-b3c8-e704ac635040","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?select=title,type,modified","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"select","value":"title,type,modified"}],"variable":[]}},"response":[{"id":"69c6ed62-8899-4feb-8766-21f5807e3fa4","name":"Team Member has Project Access","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformUserJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/form?select=title,type,modified","protocol":"https","host":["forms","example","com"],"path":["example","form"],"query":[{"key":"select","value":"title,type,modified"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:58:19 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"656"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-5/6"},{"key":"Link","value":""},{"key":"Last-Modified","value":"Wed, 08 Apr 2026 13:56:16 GMT"},{"key":"ETag","value":"W/\"290-gkOht1ourTYa8OJWXh5xOFbgRuo\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65e80040fa2cea25717e4\",\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-08T13:56:16.197Z\"\n    },\n    {\n        \"_id\": \"69d65e80040fa2cea25717ea\",\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-08T13:56:16.216Z\"\n    },\n    {\n        \"_id\": \"69d65e80040fa2cea25717f0\",\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"modified\": \"2026-04-08T13:56:16.233Z\"\n    },\n    {\n        \"_id\": \"69d65e80040fa2cea25717f6\",\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-08T13:56:16.256Z\"\n    },\n    {\n        \"_id\": \"69d65e80040fa2cea25717fd\",\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-08T13:56:16.273Z\"\n    },\n    {\n        \"_id\": \"69d65e80040fa2cea2571804\",\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"modified\": \"2026-04-08T13:56:16.288Z\"\n    }\n]"}],"_postman_id":"84dfcc72-9bf9-4f98-b3c8-e704ac635040"},{"name":"Remove from Team","id":"aad7e4c4-5b3d-44d0-a0eb-44c5f0110ad2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/team/{{ teamId }}/member/{{ memberId }}","description":"<p>A team member can be removed by simply sending a DELETE request to the team member endpoint.</p>\n","urlObject":{"path":["team","{{ teamId }}","member","{{ memberId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"7e11cc75-ee64-4450-a836-3b39fc9aeaf1","name":"Remove from Team","originalRequest":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/team/69dfb8c8bb04c38a91029e2e/member/69d64e93a0002582b8a032dc"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 12:51:49 GMT"},{"key":"Content-Type","value":"text/html; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"OK"}],"_postman_id":"aad7e4c4-5b3d-44d0-a0eb-44c5f0110ad2"},{"name":"Delete a team","id":"78a634fe-23d7-46dc-a60e-8c4178d7666a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","description":"<p>A platform administrators JWT token</p>\n"}],"url":"{{ baseUrl }}/team/{{ teamToDeleteId }}","description":"<p>To delete a team, simply send a DELETE Rest API to the team endpoint. For this example, the <code>teamToDeleteId</code> is the <code>_id</code> of the team you wish to delete.</p>\n","urlObject":{"path":["team","{{ teamToDeleteId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"78a634fe-23d7-46dc-a60e-8c4178d7666a"}],"id":"8d7c5f0c-be3f-4891-b3e7-274236f28b6e","description":"<p>Teams allow multiple developers and form builders to collaborate and have access to Projects and Stages. Any user on the platform can create a new team. They can then assign that team to a project they own or administer.</p>\n<p>After a team is created, Form.io users can be assigned to it, granting them access to the projects and stages associated with that team.</p>\n<h3 id=\"team-token-assignments\">Team Token Assignments</h3>\n<p>For every team, the <code>_id</code> of that team will be referred to as <code>{{ teamId }} within the API documentation.</code></p>\n","_postman_id":"8d7c5f0c-be3f-4891-b3e7-274236f28b6e"},{"name":"Staging API","item":[{"name":"Create Stage","event":[{"listen":"test","script":{"id":"5be00e8c-53e0-4354-a34e-c8ffa41f9b73","exec":["pm.environment.set(\" stageId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"4557cbc0-3d99-49f7-b640-666408a9fe3c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Forms\",\n  \"type\": \"stage\",\n  \"project\": \"{{ projectId }}\",\n  \"copyFromProject\": \"{{ projectId }}\",\n  \"framework\": \"custom\",\n  \"name\": \"{{ projectName }}-stage\",\n  \"stageTitle\": \"Forms\",\n  \"settings\": {\n    \"cors\": \"*\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/project","description":"<p>The API to create a new stage is the exact same API to create a new project, but with one key difference. Within the POST body, you need to provide the project ID of the project you wish to be a stage of as the <code>project</code> property.</p>\n<p>The _id of the stage that is created will be represented within this documentation as <code>{{ stageId }}</code>.</p>\n","urlObject":{"path":["project"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"8454bea5-00e3-45cd-8fdc-eb1ff632060f","name":"Create Stage","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Forms\",\n  \"type\": \"stage\",\n  \"project\": \"69dfb6dcbb04c38a91029771\",\n  \"copyFromProject\": \"69dfb6dcbb04c38a91029771\",\n  \"framework\": \"custom\",\n  \"name\": \"example-stage\",\n  \"stageTitle\": \"Forms\",\n  \"settings\": {\n    \"cors\": \"*\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/project"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:25:51 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"907"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"38b-Syf+MV5v6F7CRzhvXipQQi/OPdY\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d6575f42ae1f2fed8c5980\",\n    \"title\": \"Forms\",\n    \"name\": \"example-stage\",\n    \"type\": \"stage\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"project\": \"69d6527d42ae1f2fed8c5627\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"custom\",\n    \"protect\": false,\n    \"access\": [\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": [\n                \"69d6503972199d60c56509e2\"\n            ]\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        }\n    ],\n    \"formDefaults\": null,\n    \"stageTitle\": \"Forms\",\n    \"trial\": \"2026-04-08T13:25:51.089Z\",\n    \"created\": \"2026-04-08T13:25:51.089Z\",\n    \"modified\": \"2026-04-08T13:25:51.093Z\",\n    \"settings\": {\n        \"cors\": \"*\"\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {},\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"4557cbc0-3d99-49f7-b640-666408a9fe3c"},{"name":"Get Stage","id":"cb3fc723-cd1f-45d9-aed0-abeaa0212c6d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/project/{{ stageId }}","description":"<p>To get the full stage object, simply use the standard Project endpoint to fetch this stage. This is possible because a stage is a project, but nested below a parent project.</p>\n","urlObject":{"path":["project","{{ stageId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"33adb5f3-575e-4bd5-8d96-19e6484b235c","name":"Get Stage","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"https://forms.example.com/project/69d6575f42ae1f2fed8c5980"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:29:11 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1339"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"53b-Kxx5TqisRGq9XH9KayfuLPggi+8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d6575f42ae1f2fed8c5980\",\n    \"title\": \"Forms\",\n    \"name\": \"example-stage\",\n    \"type\": \"stage\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"project\": \"69d6527d42ae1f2fed8c5627\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"custom\",\n    \"protect\": false,\n    \"access\": [\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": [\n                \"69d6503972199d60c56509e2\"\n            ]\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        }\n    ],\n    \"formDefaults\": null,\n    \"stageTitle\": \"Forms\",\n    \"trial\": \"2026-04-08T13:25:51.089Z\",\n    \"created\": \"2026-04-08T13:25:51.089Z\",\n    \"modified\": \"2026-04-08T13:26:03.305Z\",\n    \"apiCalls\": {\n        \"limit\": {\n            \"options\": {\n                \"server\": true,\n                \"pdf\": true,\n                \"premium\": true,\n                \"offline\": true,\n                \"reporting\": true,\n                \"appserver\": true,\n                \"sac\": true\n            },\n            \"endpoints\": [\n                \".*\"\n            ],\n            \"hostnames\": [\n                \".*\"\n            ],\n            \"stages\": 7,\n            \"tenants\": 0,\n            \"projectsNumberLimit\": 10,\n            \"formManagers\": 1,\n            \"scopes\": [\n                \"apiServer\",\n                \"pdfServer\",\n                \"project\",\n                \"formManager\",\n                \"tenant\",\n                \"stage\"\n            ]\n        },\n        \"used\": {},\n        \"licenseId\": \"remote\",\n        \"formManager\": true,\n        \"accessibility\": true,\n        \"tenant\": true\n    },\n    \"settings\": {\n        \"cors\": \"*\",\n        \"appOrigin\": \"https://forms.example.com\"\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {},\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"cb3fc723-cd1f-45d9-aed0-abeaa0212c6d"},{"name":"Get a list of stages within a project","id":"061dbdf2-b6ac-4d6a-9c7e-972f12da13e2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/project?project={{ projectId }}&type=stage","urlObject":{"path":["project"],"host":["{{ baseUrl }}"],"query":[{"key":"project","value":"{{ projectId }}"},{"key":"type","value":"stage"}],"variable":[]}},"response":[{"id":"3329c376-6d21-46ce-8896-5618b93146a3","name":"Get a list of stages within a project","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/project?project=69dfb6dcbb04c38a91029771&type=stage","protocol":"https","host":["forms","example","com"],"path":["project"],"query":[{"key":"project","value":"69dfb6dcbb04c38a91029771"},{"key":"type","value":"stage"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:26:11 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"942"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"3ae-aRdAzvOOon16TswqCRilAvP7vIk\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d6575f42ae1f2fed8c5980\",\n        \"title\": \"Forms\",\n        \"name\": \"example-stage\",\n        \"type\": \"stage\",\n        \"tag\": \"0.0.0\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"project\": \"69d6527d42ae1f2fed8c5627\",\n        \"plan\": \"commercial\",\n        \"steps\": [],\n        \"framework\": \"custom\",\n        \"protect\": false,\n        \"access\": [\n            {\n                \"type\": \"team_read\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"team_write\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"team_admin\",\n                \"roles\": [\n                    \"69d6503972199d60c56509e2\"\n                ]\n            },\n            {\n                \"type\": \"team_access\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"create_own\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"create_all\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"read_own\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"read_all\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"update_own\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"update_all\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"delete_own\",\n                \"roles\": []\n            },\n            {\n                \"type\": \"delete_all\",\n                \"roles\": []\n            }\n        ],\n        \"formDefaults\": null,\n        \"stageTitle\": \"Forms\",\n        \"trial\": \"2026-04-08T13:25:51.089Z\",\n        \"created\": \"2026-04-08T13:25:51.089Z\",\n        \"modified\": \"2026-04-08T13:26:03.305Z\",\n        \"settings\": {\n            \"cors\": \"*\",\n            \"appOrigin\": \"https://forms.example.com\"\n        },\n        \"public\": {\n            \"formModule\": \"\",\n            \"custom\": {},\n            \"defaultStage\": \"\"\n        }\n    }\n]"}],"_postman_id":"061dbdf2-b6ac-4d6a-9c7e-972f12da13e2"},{"name":"Stage Remote Connection","id":"9d71ab30-f92e-4e42-989f-a94799d389f3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ stageId }}\",\n  \"title\": \"Forms\",\n  \"name\": \"{{ projectName }}-stage\",\n  \"type\": \"stage\",\n  \"tag\": \"0.0.0\",\n  \"owner\": \"650a5bfdb9ac8160c0968e59\",\n  \"project\": \"{{ projectId }}\",\n  \"plan\": \"commercial\",\n  \"steps\": [],\n  \"framework\": \"custom\",\n  \"protect\": false,\n  \"access\": [\n    {\n      \"type\": \"team_read\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_write\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_admin\",\n      \"roles\": [\n        \"69d6503972199d60c56509e2\"\n      ]\n    },\n    {\n      \"type\": \"team_access\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_all\",\n      \"roles\": []\n    }\n  ],\n  \"formDefaults\": null,\n  \"stageTitle\": \"Forms\",\n  \"trial\": \"2026-04-08T13:25:51.089Z\",\n  \"created\": \"2026-04-08T13:25:51.089Z\",\n  \"modified\": \"2026-04-08T13:26:03.305Z\",\n  \"remote\": {\n    \"type\": \"Subdirectories\",\n    \"url\": \"{{ remoteUrl }}\"\n  },\n  \"settings\": {\n    \"cors\": \"*\",\n    \"appOrigin\": \"https://forms.example.com\",\n    \"remoteSecret\": \"{{ PORTAL_SECRET }}\"\n  },\n  \"public\": {\n    \"formModule\": \"\",\n    \"custom\": {},\n    \"defaultStage\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/project/{{ stageId }}","description":"<p>Once you have created your stages, the next process is to connect each stage to their Remote Environments. Before you do this step, it is important to ensure that your remote environments have been deployed and are ready to go.</p>\n<p>If you wish to perform a Remote connection, you will need to ensure that you establish a <code>PORTAL_SECRET</code> as an environment variable for each of the environments that you create. The value of this should be different between the different environments and should be kept secret.</p>\n<p>Once you have your remote environment ready to go, then the first step is to store that remote secret token within the stage that is going to be connecting to the remote deployment. To do this, you need to save the PORTAL_SECRET of the remote server within the encrypted project settings of the connecting stage.</p>\n<p>For this request the following tokens apply:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Token Name</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>stageId</code></td>\n<td>The ID of the stage within the portal environment that will be connecting to the remotely deployed Form.io server.</td>\n</tr>\n<tr>\n<td><code>stageName</code></td>\n<td>The 'name' of the stage project. This is also used as the project URL alias for that stage. i.e. { baseUrl }/{ stageName }.</td>\n</tr>\n<tr>\n<td><code>remoteUrl</code></td>\n<td>This is the full URL of the remotely deployed Form.io Enterprise Server</td>\n</tr>\n<tr>\n<td><code>PORTAL_SECRET</code></td>\n<td>This is the value of the <code>PORTAL_SECRET</code> environment variable in the remotely deployed server that the stage is connecting to.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["project","{{ stageId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"53dd4aa7-31bc-4050-9105-449c38a4cdf3","name":"Stage Remote Connection","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69d6575f42ae1f2fed8c5980\",\n  \"title\": \"Forms\",\n  \"name\": \"example-stage\",\n  \"type\": \"stage\",\n  \"tag\": \"0.0.0\",\n  \"owner\": \"650a5bfdb9ac8160c0968e59\",\n  \"project\": \"69dfb6dcbb04c38a91029771\",\n  \"plan\": \"commercial\",\n  \"steps\": [],\n  \"framework\": \"custom\",\n  \"protect\": false,\n  \"access\": [\n    {\n      \"type\": \"team_read\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_write\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_admin\",\n      \"roles\": [\n        \"69d6503972199d60c56509e2\"\n      ]\n    },\n    {\n      \"type\": \"team_access\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_all\",\n      \"roles\": []\n    }\n  ],\n  \"formDefaults\": null,\n  \"stageTitle\": \"Forms\",\n  \"trial\": \"2026-04-08T13:25:51.089Z\",\n  \"created\": \"2026-04-08T13:25:51.089Z\",\n  \"modified\": \"2026-04-08T13:26:03.305Z\",\n  \"remote\": {\n    \"type\": \"Subdirectories\",\n    \"url\": \"{{ remoteUrl }}\"\n  },\n  \"settings\": {\n    \"cors\": \"*\",\n    \"appOrigin\": \"https://forms.example.com\",\n    \"remoteSecret\": \"{{ PORTAL_SECRET }}\"\n  },\n  \"public\": {\n    \"formModule\": \"\",\n    \"custom\": {},\n    \"defaultStage\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/project/69d6575f42ae1f2fed8c5980"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:33:09 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1028"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"404-zfEDKYlx4aIrcZ9LPylGtqgX3Io\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Forms\",\n    \"name\": \"example-stage\",\n    \"type\": \"stage\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"project\": \"69d6527d42ae1f2fed8c5627\",\n    \"remote\": {\n        \"type\": \"Subdirectories\",\n        \"url\": \"https://forms.example.com\"\n    },\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"custom\",\n    \"protect\": false,\n    \"access\": [\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": [\n                \"69d6503972199d60c56509e2\"\n            ]\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        }\n    ],\n    \"trial\": \"2026-04-08T13:25:51.089Z\",\n    \"formDefaults\": null,\n    \"stageTitle\": \"Forms\",\n    \"_id\": \"69d6575f42ae1f2fed8c5980\",\n    \"created\": \"2026-04-08T13:25:51.089Z\",\n    \"modified\": \"2026-04-08T13:33:09.743Z\",\n    \"settings\": {\n        \"cors\": \"*\",\n        \"appOrigin\": \"https://forms.example.com\",\n        \"remoteSecret\": \"CHANGEME\"\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {},\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"9d71ab30-f92e-4e42-989f-a94799d389f3"},{"name":"Stage Remote Token","id":"91cf1a79-983e-4955-a410-b8e47f6da70d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"{{ baseUrl }}/project/{{ stageId }}/access/remote","description":"<p>Once you have the <code>settings.remoteSecret</code> saved within the project settings, you can use the following endpoint to retrieve what is called the <strong>Remote Token</strong>. The result of this request is a special JWT Token which is used to communicate to the remote deployment using the <code>x-remote-token</code> authorization header. Using this special token, it is now possible to make the same project administrator API calls using <code>x-remote-token</code> instead of the <code>x-jwt-token</code>.</p>\n<p>For example, if you wish to update a form within the remote environment, it can be done as follows:</p>\n<p><strong>Create a form within a separate environment:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl '{{ remoteUrl }}/{{ remoteProject }}/form' \\\n  -X 'POST' \\\n  -H 'content-type: application/json' \\\n  -H 'x-remote-token: {{ remoteToken }}' \\\n  --data-raw $'{-- FORM POST BODY ---}'\n\n</code></pre>\n","urlObject":{"path":["project","{{ stageId }}","access","remote"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"6df8a055-bbc6-4e44-96de-d12dc3a401a3","name":"Stage Remote Token","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"https://forms.example.com/project/69d6575f42ae1f2fed8c5980/access/remote"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:34:15 GMT"},{"key":"Content-Type","value":"text/html; charset=utf-8"},{"key":"Content-Length","value":"525"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"20d-GTrICvQ0VA+bvlm5zWNTHMuc708\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9qZWN0Ijp7Il9pZCI6IjY5ZDY1NzVmNDJhZTFmMmZlZDhjNTk4MCIsInRpdGxlIjoiRm9ybXMiLCJuYW1lIjoiZXhhbXBsZS01MjQtc3RhZ2UiLCJvd25lciI6IjY1MGE1YmZkYjlhYzgxNjBjMDk2OGU1OSJ9LCJwZXJtaXNzaW9uIjoib3duZXIiLCJ1c2VyIjp7Il9pZCI6IjY1MGE1YmZkYjlhYzgxNjBjMDk2OGU1OSIsImRhdGEiOnsiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSJ9LCJjcmVhdGVkIjoiMjAyMy0wOS0yMFQwMjo0MjowNS43MjlaIiwibW9kaWZpZWQiOiIyMDIzLTA5LTI0VDAzOjA1OjM2LjIyN1oifSwiaWF0IjoxNzc1NjU1MjU1LCJleHAiOjE3NzYyNTUyNTV9.maCn_XFbc7FZqoPdaH_1IVudo-HBQetgF29SZbNX6v8"}],"_postman_id":"91cf1a79-983e-4955-a410-b8e47f6da70d"},{"name":"Set Remote Connection","id":"6663fcde-c177-4887-81e6-5b385fb24805","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Forms\",\n  \"_id\": \"{{ stageId }}\",\n  \"name\": \"{{ projectName }}-stage\",\n  \"type\": \"stage\",\n  \"tag\": \"0.0.0\",\n  \"owner\": \"650a5bfdb9ac8160c0968e59\",\n  \"project\": \"{{ projectId }}\",\n  \"remote\": {\n    \"type\": \"Subdirectories\",\n    \"url\": \"{{ remoteUrl }}\",\n    \"project\": {\n      \"_id\": \"--- REMOTE PROJECT ID ---\",\n      \"title\": \"Remote Project Title\",\n      \"name\": \"remote-project-name\"\n    }\n  },\n  \"plan\": \"commercial\",\n  \"steps\": [],\n  \"framework\": \"custom\",\n  \"protect\": false,\n  \"access\": [\n    {\n      \"type\": \"team_read\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_write\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_admin\",\n      \"roles\": [\n        \"69d6503972199d60c56509e2\"\n      ]\n    },\n    {\n      \"type\": \"team_access\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_all\",\n      \"roles\": []\n    }\n  ],\n  \"trial\": \"2026-04-08T13:25:51.089Z\",\n  \"formDefaults\": null,\n  \"stageTitle\": \"Forms\",\n  \"created\": \"2026-04-08T13:25:51.089Z\",\n  \"modified\": \"2026-04-08T13:33:09.743Z\",\n  \"settings\": {\n    \"cors\": \"*\",\n    \"appOrigin\": \"https://forms.example.com\",\n    \"remoteSecret\": \"{{ PORTAL_SECRET }}\"\n  },\n  \"public\": {\n    \"formModule\": \"\",\n    \"custom\": {},\n    \"defaultStage\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/project/{{ stageId }}","description":"<p>The remote environment can now be saved onto the connecting project by simply updating the project with the <code>remote</code> property that contains the information about the remotely deployed server that this project is connected to. By setting this configuration setting, the Form.io Portal will now visually show a stage project connected to a remotely deployed project.</p>\n","urlObject":{"path":["project","{{ stageId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"6663fcde-c177-4887-81e6-5b385fb24805"},{"name":"Project Export","id":"3e2209d8-2621-43f0-8e7d-ec6d854074ae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/export","description":"<p>Any project within the Form.io Enterprise Server can be 'exported' into a <strong>Template</strong> JSON. This template contains the following entities within a project.</p>\n<ul>\n<li><p><strong>forms</strong> - The forms of that project.</p>\n</li>\n<li><p><strong>resources</strong> - The resources of that project.</p>\n</li>\n<li><p><strong>roles</strong> - The roles for that project.</p>\n</li>\n<li><p><strong>actions</strong> - The form and resource actions.</p>\n</li>\n</ul>\n<p>Project settings and Submission data are NOT included in the exported project template. Once a project has been exported as a template JSON file, it can then be imported into another project using the deploy endpoint described below.</p>\n","urlObject":{"path":["{{ projectName }}","export"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"f93b1b51-3ccd-4c69-972e-46f319e5f55b","name":"Project Export","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"https://forms.example.com/example/export"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:42:06 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Disposition","value":"attachment; filename=\"example-524-undefined.json\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Example Project Updated\",\n    \"version\": \"2.0.0\",\n    \"description\": \"This is an updated project.\",\n    \"name\": \"example\",\n    \"roles\": {\n        \"administrator\": {\n            \"title\": \"Administrator\",\n            \"description\": \"A role for Administrative Users.\",\n            \"admin\": true,\n            \"default\": false\n        },\n        \"authenticated\": {\n            \"title\": \"Authenticated\",\n            \"description\": \"A role for Authenticated Users.\",\n            \"admin\": false,\n            \"default\": false\n        },\n        \"anonymous\": {\n            \"title\": \"Anonymous\",\n            \"description\": \"A role for Anonymous Users.\",\n            \"admin\": false,\n            \"default\": true\n        }\n    },\n    \"forms\": {\n        \"adminLogin\": {\n            \"title\": \"Admin Login\",\n            \"type\": \"form\",\n            \"name\": \"adminLogin\",\n            \"path\": \"admin/login\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": false,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"lockKey\": true,\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"lockKey\": true,\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"button\",\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"tableView\": false,\n                    \"label\": \"Submit\",\n                    \"input\": true\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        },\n        \"userRegister\": {\n            \"title\": \"User Register\",\n            \"type\": \"form\",\n            \"name\": \"userRegister\",\n            \"path\": \"user/register\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": false,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"lockKey\": true,\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"lockKey\": true,\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"label\": \"Submit\",\n                    \"input\": true,\n                    \"type\": \"button\"\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        },\n        \"userLogin\": {\n            \"title\": \"User Login\",\n            \"type\": \"form\",\n            \"name\": \"userLogin\",\n            \"path\": \"user/login\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": false,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"lockKey\": true,\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"lockKey\": true,\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"button\",\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"tableView\": false,\n                    \"label\": \"Submit\",\n                    \"input\": true\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": [\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        }\n    },\n    \"actions\": {\n        \"user:role\": {\n            \"title\": \"Role Assignment\",\n            \"name\": \"role\",\n            \"form\": \"user\",\n            \"settings\": {\n                \"association\": \"new\",\n                \"type\": \"add\",\n                \"role\": \"authenticated\"\n            },\n            \"priority\": 1,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"after\"\n            ]\n        },\n        \"user:save\": {\n            \"title\": \"Save Submission\",\n            \"name\": \"save\",\n            \"form\": \"user\",\n            \"priority\": 10,\n            \"method\": [\n                \"create\",\n                \"update\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"admin:role\": {\n            \"title\": \"Role Assignment\",\n            \"name\": \"role\",\n            \"form\": \"admin\",\n            \"settings\": {\n                \"association\": \"new\",\n                \"type\": \"add\",\n                \"role\": \"administrator\"\n            },\n            \"priority\": 1,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"after\"\n            ]\n        },\n        \"admin:save\": {\n            \"title\": \"Save Submission\",\n            \"name\": \"save\",\n            \"form\": \"admin\",\n            \"priority\": 10,\n            \"method\": [\n                \"create\",\n                \"update\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"reportingui:save\": {\n            \"title\": \"Save Submission\",\n            \"name\": \"save\",\n            \"form\": \"reportingui\",\n            \"priority\": 10,\n            \"method\": [\n                \"create\",\n                \"update\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"userLogin:login\": {\n            \"title\": \"Login\",\n            \"name\": \"login\",\n            \"form\": \"userLogin\",\n            \"settings\": {\n                \"resources\": [\n                    \"user\"\n                ],\n                \"username\": \"email\",\n                \"password\": \"password\",\n                \"allowedAttempts\": 5,\n                \"attemptWindow\": 30,\n                \"lockWait\": 1800\n            },\n            \"priority\": 2,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"userRegister:save\": {\n            \"title\": \"Save Submission\",\n            \"name\": \"save\",\n            \"form\": \"userRegister\",\n            \"settings\": {\n                \"resource\": \"user\",\n                \"fields\": {\n                    \"email\": \"email\",\n                    \"password\": \"password\"\n                }\n            },\n            \"priority\": 11,\n            \"method\": [\n                \"create\",\n                \"update\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"userRegister:login\": {\n            \"title\": \"Login\",\n            \"name\": \"login\",\n            \"form\": \"userRegister\",\n            \"settings\": {\n                \"resources\": [\n                    \"user\"\n                ],\n                \"username\": \"email\",\n                \"password\": \"password\"\n            },\n            \"priority\": 2,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        },\n        \"adminLogin:login\": {\n            \"title\": \"Login\",\n            \"name\": \"login\",\n            \"form\": \"adminLogin\",\n            \"settings\": {\n                \"resources\": [\n                    \"admin\"\n                ],\n                \"username\": \"email\",\n                \"password\": \"password\",\n                \"allowedAttempts\": 5,\n                \"attemptWindow\": 30,\n                \"lockWait\": 1800\n            },\n            \"priority\": 2,\n            \"method\": [\n                \"create\"\n            ],\n            \"handler\": [\n                \"before\"\n            ]\n        }\n    },\n    \"resources\": {\n        \"reportingui\": {\n            \"title\": \"Reporting UI\",\n            \"type\": \"resource\",\n            \"name\": \"reportingui\",\n            \"path\": \"reportingui\",\n            \"pdfComponents\": [],\n            \"display\": \"wizard\",\n            \"tags\": [\n                \"noBuilderResource\"\n            ],\n            \"settings\": {\n                \"wizardHeaderType\": \"Vertical\"\n            },\n            \"components\": [\n                {\n                    \"title\": \"Basic Settings\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"basic\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 6\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version1\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                            \"label\": \"Report Setup - Basic Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportSettings\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Columns\",\n                            \"columns\": [\n                                {\n                                    \"components\": [\n                                        {\n                                            \"label\": \"Report Title\",\n                                            \"placeholder\": \"Report Title\",\n                                            \"applyMaskOn\": \"change\",\n                                            \"tableView\": true,\n                                            \"validate\": {\n                                                \"required\": true\n                                            },\n                                            \"key\": \"title\",\n                                            \"type\": \"textfield\",\n                                            \"input\": true\n                                        }\n                                    ],\n                                    \"width\": 6,\n                                    \"offset\": 0,\n                                    \"push\": 0,\n                                    \"pull\": 0,\n                                    \"size\": \"md\",\n                                    \"currentWidth\": 6\n                                },\n                                {\n                                    \"components\": [\n                                        {\n                                            \"label\": \"Report Name\",\n                                            \"placeholder\": \"Report Name\",\n                                            \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                                            \"applyMaskOn\": \"change\",\n                                            \"tableView\": true,\n                                            \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                                            \"allowCalculateOverride\": true,\n                                            \"validate\": {\n                                                \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                            },\n                                            \"unique\": true,\n                                            \"key\": \"name\",\n                                            \"logic\": [\n                                                {\n                                                    \"name\": \"make required\",\n                                                    \"trigger\": {\n                                                        \"type\": \"javascript\",\n                                                        \"javascript\": \"result = data.title;\"\n                                                    },\n                                                    \"actions\": [\n                                                        {\n                                                            \"name\": \"make required\",\n                                                            \"type\": \"property\",\n                                                            \"property\": {\n                                                                \"label\": \"Required\",\n                                                                \"value\": \"validate.required\",\n                                                                \"type\": \"boolean\"\n                                                            },\n                                                            \"state\": true\n                                                        }\n                                                    ]\n                                                }\n                                            ],\n                                            \"type\": \"textfield\",\n                                            \"input\": true\n                                        }\n                                    ],\n                                    \"width\": 6,\n                                    \"offset\": 0,\n                                    \"push\": 0,\n                                    \"pull\": 0,\n                                    \"size\": \"md\",\n                                    \"currentWidth\": 6\n                                }\n                            ],\n                            \"key\": \"columns1\",\n                            \"type\": \"columns\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Report Forms\",\n                            \"persistent\": false,\n                            \"trigger\": {\n                                \"init\": false,\n                                \"server\": false\n                            },\n                            \"refreshOn\": \"forms\",\n                            \"refreshOnEvent\": \"formsSet\",\n                            \"event\": \"reportingFormsUpdated\",\n                            \"dataSrc\": \"url\",\n                            \"fetch\": {\n                                \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                                \"method\": \"get\",\n                                \"headers\": [\n                                    {\n                                        \"key\": \"\",\n                                        \"value\": \"\"\n                                    }\n                                ],\n                                \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                                \"forwardHeaders\": false,\n                                \"authenticate\": true\n                            },\n                            \"allowCaching\": true,\n                            \"key\": \"reportingForms\",\n                            \"type\": \"datasource\",\n                            \"indexeddb\": {},\n                            \"input\": true,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Container\",\n                            \"tableView\": false,\n                            \"key\": \"gridSettings\",\n                            \"type\": \"container\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                                    \"label\": \"Reporting Grid Basic Settings\",\n                                    \"refreshOnChange\": false,\n                                    \"key\": \"basicReportingSettings3\",\n                                    \"type\": \"content\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Items per page\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                                    \"tableView\": true,\n                                    \"defaultValue\": 10,\n                                    \"data\": {\n                                        \"values\": [\n                                            {\n                                                \"label\": \"5\",\n                                                \"value\": 5\n                                            },\n                                            {\n                                                \"label\": \"10\",\n                                                \"value\": 10\n                                            },\n                                            {\n                                                \"label\": \"25\",\n                                                \"value\": 25\n                                            },\n                                            {\n                                                \"label\": \"50\",\n                                                \"value\": 50\n                                            },\n                                            {\n                                                \"label\": \"100\",\n                                                \"value\": 100\n                                            },\n                                            {\n                                                \"label\": \"All\",\n                                                \"value\": -1\n                                            }\n                                        ]\n                                    },\n                                    \"key\": \"itemsPerPage\",\n                                    \"type\": \"select\",\n                                    \"input\": true,\n                                    \"weight\": 442\n                                },\n                                {\n                                    \"label\": \"Enable to Store Request Result in the Cache\",\n                                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                                    \"tableView\": false,\n                                    \"defaultValue\": true,\n                                    \"key\": \"allowCaching\",\n                                    \"type\": \"checkbox\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Cell max width\",\n                                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"key\": \"cellMaxWidth\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Source Forms\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"dataSourcePanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 1\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version2\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                            \"label\": \"Basic Report Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"sourceFormsSettings\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Choose from the Forms within this Project:\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                            \"tableView\": false,\n                            \"multiple\": true,\n                            \"dataSrc\": \"url\",\n                            \"data\": {\n                                \"url\": \"{{Formio.projectUrl}}/form\",\n                                \"headers\": [\n                                    {\n                                        \"key\": \"\",\n                                        \"value\": \"\"\n                                    }\n                                ]\n                            },\n                            \"valueProperty\": \"_id\",\n                            \"template\": \"<span>{{ item.title }}</span>\",\n                            \"validate\": {\n                                \"required\": true,\n                                \"select\": false\n                            },\n                            \"key\": \"forms\",\n                            \"type\": \"select\",\n                            \"disableLimit\": false,\n                            \"searchField\": \"title__regex\",\n                            \"noRefreshOnScroll\": false,\n                            \"authenticate\": true,\n                            \"input\": true\n                        },\n                        {\n                            \"label\": \"Forms Connections\",\n                            \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                            \"tableView\": false,\n                            \"templates\": {\n                                \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                            },\n                            \"addAnother\": \"Add Connection\",\n                            \"redrawOn\": \"reportingForms\",\n                            \"validate\": {\n                                \"required\": true\n                            },\n                            \"rowDrafts\": false,\n                            \"key\": \"connections\",\n                            \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                            \"logic\": [\n                                {\n                                    \"name\": \"min max validation\",\n                                    \"trigger\": {\n                                        \"type\": \"javascript\",\n                                        \"javascript\": \"result = !!data.reportingForms;\"\n                                    },\n                                    \"actions\": [\n                                        {\n                                            \"name\": \"min max validation\",\n                                            \"type\": \"mergeComponentSchema\",\n                                            \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                                        }\n                                    ]\n                                }\n                            ],\n                            \"type\": \"editgrid\",\n                            \"displayAsTable\": false,\n                            \"reorder\": false,\n                            \"addAnotherPosition\": \"bottom\",\n                            \"layoutFixed\": false,\n                            \"enableRowGroups\": false,\n                            \"initEmpty\": false,\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Data Source Connections\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Base Form\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"placeholder\": \"Source Form\",\n                                                    \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                                                    \"tableView\": true,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"baseForm\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                },\n                                                {\n                                                    \"label\": \"Connecting field of base Form\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"placeholder\": \"Connecting Field\",\n                                                    \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                                                    \"disabled\": true,\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"baseFormField\",\n                                                    \"logic\": [\n                                                        {\n                                                            \"name\": \"enable\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = row.baseForm\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"enable\",\n                                                                    \"type\": \"property\",\n                                                                    \"property\": {\n                                                                        \"label\": \"Disabled\",\n                                                                        \"value\": \"disabled\",\n                                                                        \"type\": \"boolean\"\n                                                                    },\n                                                                    \"state\": false\n                                                                }\n                                                            ]\n                                                        },\n                                                        {\n                                                            \"name\": \"clear value\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = !row.baseForm\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"clear value\",\n                                                                    \"type\": \"customAction\",\n                                                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                                                }\n                                                            ]\n                                                        }\n                                                    ],\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                },\n                                                {\n                                                    \"label\": \"Base Form path to connecting value\",\n                                                    \"placeholder\": \"Path\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": false,\n                                                    \"key\": \"baseFormValuePath\",\n                                                    \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Joining Form\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"placeholder\": \"Source Form\",\n                                                    \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                                                    \"tableView\": true,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"refreshOn\": \"connections.baseForm\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"joiningForm\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                },\n                                                {\n                                                    \"label\": \"Connecting field of joining Form\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"placeholder\": \"Connecting Field\",\n                                                    \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                                                    \"disabled\": true,\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"joiningFormField\",\n                                                    \"logic\": [\n                                                        {\n                                                            \"name\": \"enable\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = row.joiningForm\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"enable\",\n                                                                    \"type\": \"property\",\n                                                                    \"property\": {\n                                                                        \"label\": \"Disabled\",\n                                                                        \"value\": \"disabled\",\n                                                                        \"type\": \"boolean\"\n                                                                    },\n                                                                    \"state\": false\n                                                                }\n                                                            ]\n                                                        },\n                                                        {\n                                                            \"name\": \"clear value\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = !row.joiningForm\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"clear value\",\n                                                                    \"type\": \"customAction\",\n                                                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                                                }\n                                                            ]\n                                                        }\n                                                    ],\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                },\n                                                {\n                                                    \"label\": \"Joining Form path to connecting value\",\n                                                    \"placeholder\": \"Path\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": false,\n                                                    \"key\": \"joiningFormValuePath\",\n                                                    \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"hideLabel\": true,\n                                    \"key\": \"columns\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Calculated Columns\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"extraColumnsPanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 7\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version3\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"calculatedColumnsSettingsDescription\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Calculated Extra Columns\",\n                            \"hideLabel\": true,\n                            \"tableView\": false,\n                            \"templates\": {\n                                \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                            },\n                            \"addAnother\": \"Add Column\",\n                            \"redrawOn\": \"reportingForms\",\n                            \"rowDrafts\": false,\n                            \"key\": \"calculatedColumns\",\n                            \"type\": \"editgrid\",\n                            \"displayAsTable\": false,\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Column Title\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": true,\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"name\",\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Column Key\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": false,\n                                                    \"calculateValue\": \"value = _.camelCase(row.name);\",\n                                                    \"allowCalculateOverride\": true,\n                                                    \"validate\": {\n                                                        \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                        \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                                                        \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                    },\n                                                    \"key\": \"key\",\n                                                    \"logic\": [\n                                                        {\n                                                            \"name\": \"make required\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = row.title;\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"make required\",\n                                                                    \"type\": \"property\",\n                                                                    \"property\": {\n                                                                        \"label\": \"Required\",\n                                                                        \"value\": \"validate.required\",\n                                                                        \"type\": \"boolean\"\n                                                                    },\n                                                                    \"state\": true\n                                                                }\n                                                            ]\n                                                        }\n                                                    ],\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"key\": \"columns\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Operator\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"operator\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Arguments\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": false,\n                                    \"multiple\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"args\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Argument\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": false,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"arg\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Arguments\",\n                                    \"reorder\": false,\n                                    \"addAnotherPosition\": \"bottom\",\n                                    \"layoutFixed\": false,\n                                    \"enableRowGroups\": false,\n                                    \"initEmpty\": false,\n                                    \"tableView\": false,\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"concatArgs\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"datagrid\",\n                                    \"input\": true,\n                                    \"components\": [\n                                        {\n                                            \"label\": \"Field\",\n                                            \"widget\": \"choicesjs\",\n                                            \"tableView\": false,\n                                            \"dataSrc\": \"custom\",\n                                            \"data\": {\n                                                \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                                            },\n                                            \"valueProperty\": \"value\",\n                                            \"validate\": {\n                                                \"required\": true\n                                            },\n                                            \"key\": \"field\",\n                                            \"type\": \"select\",\n                                            \"input\": true\n                                        },\n                                        {\n                                            \"label\": \"Connector\",\n                                            \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                                            \"applyMaskOn\": \"change\",\n                                            \"tableView\": false,\n                                            \"key\": \"connector\",\n                                            \"type\": \"textfield\",\n                                            \"input\": true\n                                        }\n                                    ]\n                                },\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Dividend\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"dividend\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Divisor\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"divisor\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"key\": \"divideArgs\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Minuend\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"minuend\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Subtrahend\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"subtrahend\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"key\": \"subtractArgs\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Start Date\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"startDate\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 4,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 4\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"End Date\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"endDate\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 4,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 4\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Unit\",\n                                                    \"widget\": \"choicesjs\",\n                                                    \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                                                    \"tableView\": false,\n                                                    \"dataSrc\": \"custom\",\n                                                    \"data\": {\n                                                        \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                                                    },\n                                                    \"valueProperty\": \"value\",\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"unit\",\n                                                    \"type\": \"select\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"size\": \"md\",\n                                            \"width\": 4,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"currentWidth\": 4\n                                        }\n                                    ],\n                                    \"key\": \"dateDiffArgs\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Date\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": false,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"date\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Decimal Places\",\n                                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"mask\": false,\n                                    \"tableView\": false,\n                                    \"delimiter\": false,\n                                    \"requireDecimal\": false,\n                                    \"inputFormat\": \"plain\",\n                                    \"truncateMultipleSpaces\": false,\n                                    \"key\": \"decimalLimit\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"number\",\n                                    \"input\": true\n                                }\n                            ]\n                        },\n                        {\n                            \"label\": \"Container\",\n                            \"tableView\": false,\n                            \"key\": \"calculatedColumnsSettings\",\n                            \"type\": \"container\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                                    \"label\": \"Reporting Grid Basic Settings\",\n                                    \"refreshOnChange\": false,\n                                    \"key\": \"calcSettingsDescription\",\n                                    \"type\": \"content\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Use Thousands Separator\",\n                                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                                    \"tableView\": false,\n                                    \"defaultValue\": false,\n                                    \"key\": \"thousandsSeparator\",\n                                    \"type\": \"checkbox\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Aggregation\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"groupingPanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 8\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version4\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                            \"label\": \"Content\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"content\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Fields to group by\",\n                            \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                            \"reorder\": false,\n                            \"addAnother\": \"Add Field\",\n                            \"addAnotherPosition\": \"bottom\",\n                            \"layoutFixed\": false,\n                            \"enableRowGroups\": false,\n                            \"initEmpty\": true,\n                            \"tableView\": false,\n                            \"redrawOn\": \"reportingForms\",\n                            \"key\": \"groups.groupingFields\",\n                            \"type\": \"datagrid\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Field\",\n                                    \"widget\": \"choicesjs\",\n                                    \"placeholder\": \"Grouping Field\",\n                                    \"hideLabel\": true,\n                                    \"tableView\": false,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"field\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                }\n                            ]\n                        },\n                        {\n                            \"label\": \"Calculated Aggregation Columns\",\n                            \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                            \"tableView\": false,\n                            \"templates\": {\n                                \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                            },\n                            \"addAnother\": \"Add Column\",\n                            \"rowDrafts\": false,\n                            \"key\": \"groups.calculatedColumns\",\n                            \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                            \"type\": \"editgrid\",\n                            \"displayAsTable\": false,\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Columns\",\n                                    \"columns\": [\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Column Title\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": true,\n                                                    \"validate\": {\n                                                        \"required\": true\n                                                    },\n                                                    \"key\": \"name\",\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        },\n                                        {\n                                            \"components\": [\n                                                {\n                                                    \"label\": \"Column Key\",\n                                                    \"applyMaskOn\": \"change\",\n                                                    \"tableView\": false,\n                                                    \"calculateValue\": \"value = _.camelCase(row.name);\",\n                                                    \"allowCalculateOverride\": true,\n                                                    \"validate\": {\n                                                        \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                        \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                                                        \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                    },\n                                                    \"key\": \"key\",\n                                                    \"logic\": [\n                                                        {\n                                                            \"name\": \"make required\",\n                                                            \"trigger\": {\n                                                                \"type\": \"javascript\",\n                                                                \"javascript\": \"result = row.title;\"\n                                                            },\n                                                            \"actions\": [\n                                                                {\n                                                                    \"name\": \"make required\",\n                                                                    \"type\": \"property\",\n                                                                    \"property\": {\n                                                                        \"label\": \"Required\",\n                                                                        \"value\": \"validate.required\",\n                                                                        \"type\": \"boolean\"\n                                                                    },\n                                                                    \"state\": true\n                                                                }\n                                                            ]\n                                                        }\n                                                    ],\n                                                    \"type\": \"textfield\",\n                                                    \"input\": true\n                                                }\n                                            ],\n                                            \"width\": 6,\n                                            \"offset\": 0,\n                                            \"push\": 0,\n                                            \"pull\": 0,\n                                            \"size\": \"md\",\n                                            \"currentWidth\": 6\n                                        }\n                                    ],\n                                    \"key\": \"columns\",\n                                    \"type\": \"columns\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Operator\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tooltip\": \"Select operator to calculate column value\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"operator\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Argument\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": false,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"argument\",\n                                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Decimal Places\",\n                                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"mask\": false,\n                                    \"tableView\": false,\n                                    \"delimiter\": false,\n                                    \"requireDecimal\": false,\n                                    \"inputFormat\": \"plain\",\n                                    \"truncateMultipleSpaces\": false,\n                                    \"key\": \"decimalLimit\",\n                                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                    \"type\": \"number\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Columns\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"columnsPanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 2\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version5\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportingSettings2\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Columns List\",\n                            \"persistent\": false,\n                            \"redrawOn\": \"reportingForms\",\n                            \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                            \"key\": \"columnsList\",\n                            \"type\": \"hidden\",\n                            \"input\": true,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Report Type\",\n                            \"persistent\": false,\n                            \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                            \"key\": \"reportType\",\n                            \"type\": \"hidden\",\n                            \"input\": true,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Available Columns\",\n                            \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                            \"reorder\": true,\n                            \"addAnother\": \"Add Column\",\n                            \"addAnotherPosition\": \"bottom\",\n                            \"layoutFixed\": false,\n                            \"enableRowGroups\": false,\n                            \"initEmpty\": true,\n                            \"tableView\": false,\n                            \"validate\": {\n                                \"required\": true\n                            },\n                            \"key\": \"availableColumns\",\n                            \"logic\": [\n                                {\n                                    \"name\": \"clear Columns\",\n                                    \"trigger\": {\n                                        \"type\": \"javascript\",\n                                        \"javascript\": \"result = data.reportType?.typeChanged;\"\n                                    },\n                                    \"actions\": [\n                                        {\n                                            \"name\": \"clear\",\n                                            \"type\": \"customAction\",\n                                            \"customAction\": \"instance.resetValue();\"\n                                        }\n                                    ]\n                                }\n                            ],\n                            \"type\": \"datagrid\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Column\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"refreshOn\": \"columnsList\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"column\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Display Title\",\n                                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"key\": \"displayTitle\",\n                                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                }\n                            ]\n                        },\n                        {\n                            \"label\": \"Default Columns\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                            \"tableView\": false,\n                            \"multiple\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                                \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"availableColumns\",\n                            \"key\": \"defaultColumns\",\n                            \"logic\": [\n                                {\n                                    \"name\": \"clear Columns\",\n                                    \"trigger\": {\n                                        \"type\": \"javascript\",\n                                        \"javascript\": \"result = data.reportType?.typeChanged;\"\n                                    },\n                                    \"actions\": [\n                                        {\n                                            \"name\": \"clear\",\n                                            \"type\": \"customAction\",\n                                            \"customAction\": \"instance.resetValue();\"\n                                        }\n                                    ]\n                                }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Control Panel\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"collapsible\": false,\n                    \"key\": \"controlsPanel\",\n                    \"type\": \"panel\",\n                    \"label\": \"Page 9\",\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version6\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportingSettings7\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Enable Control Panel\",\n                            \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                            \"tableView\": false,\n                            \"defaultValue\": false,\n                            \"key\": \"enableControls\",\n                            \"type\": \"checkbox\",\n                            \"input\": true\n                        },\n                        {\n                            \"label\": \"Controls Settings\",\n                            \"tableView\": false,\n                            \"key\": \"controlsSettings\",\n                            \"customConditional\": \"show = data.enableControls;\",\n                            \"type\": \"container\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                                    \"label\": \"Reporting Grid Basic Settings\",\n                                    \"refreshOnChange\": false,\n                                    \"key\": \"basicReportingSettings8\",\n                                    \"type\": \"content\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                },\n                                {\n                                    \"label\": \"Control Panel Title\",\n                                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"key\": \"title\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Control Panel Theme\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": true,\n                                    \"defaultValue\": \"default\",\n                                    \"data\": {\n                                        \"values\": [\n                                            {\n                                                \"label\": \"Default\",\n                                                \"value\": \"default\"\n                                            },\n                                            {\n                                                \"label\": \"Primary\",\n                                                \"value\": \"primary\"\n                                            },\n                                            {\n                                                \"label\": \"Info\",\n                                                \"value\": \"info\"\n                                            },\n                                            {\n                                                \"label\": \"Success\",\n                                                \"value\": \"success\"\n                                            },\n                                            {\n                                                \"label\": \"Danger\",\n                                                \"value\": \"danger\"\n                                            },\n                                            {\n                                                \"label\": \"Warning\",\n                                                \"value\": \"warning\"\n                                            }\n                                        ]\n                                    },\n                                    \"key\": \"theme\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Initially Collapsed\",\n                                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                                    \"tableView\": false,\n                                    \"defaultValue\": false,\n                                    \"key\": \"collapsePanel\",\n                                    \"type\": \"checkbox\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Filters\",\n                    \"collapsible\": false,\n                    \"key\": \"filtersPanel\",\n                    \"conditional\": {\n                        \"show\": true,\n                        \"conjunction\": \"all\",\n                        \"conditions\": [\n                            {\n                                \"component\": \"enableControls\",\n                                \"operator\": \"isEqual\",\n                                \"value\": true\n                            }\n                        ]\n                    },\n                    \"type\": \"panel\",\n                    \"label\": \"Page 3\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version7\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filtersenable end users of this report to view any subset of data needed at runtime. Customize Filtersfor your Report Below.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportingSettings5\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Number Of FiltersPer Row\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"How many filters display horizontally in each row of the Control Panel FiltersSection.\",\n                            \"tableView\": false,\n                            \"defaultValue\": 2,\n                            \"data\": {\n                                \"values\": [\n                                    {\n                                        \"label\": \"1\",\n                                        \"value\": \"1\"\n                                    },\n                                    {\n                                        \"label\": \"2\",\n                                        \"value\": \"2\"\n                                    },\n                                    {\n                                        \"label\": \"3\",\n                                        \"value\": \"3\"\n                                    },\n                                    {\n                                        \"label\": \"4\",\n                                        \"value\": \"4\"\n                                    }\n                                ]\n                            },\n                            \"dataType\": \"number\",\n                            \"key\": \"filtersPerRow\",\n                            \"type\": \"select\",\n                            \"input\": true\n                        },\n                        {\n                            \"label\": \"Filter Label Position\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                            \"tableView\": false,\n                            \"defaultValue\": \"top\",\n                            \"data\": {\n                                \"values\": [\n                                    {\n                                        \"label\": \"Top\",\n                                        \"value\": \"top\"\n                                    },\n                                    {\n                                        \"label\": \"Left\",\n                                        \"value\": \"left-left\"\n                                    },\n                                    {\n                                        \"label\": \"Right\",\n                                        \"value\": \"right-right\"\n                                    }\n                                ]\n                            },\n                            \"key\": \"filterLabelPosition\",\n                            \"type\": \"select\",\n                            \"input\": true\n                        },\n                        {\n                            \"label\": \"Control Panel Filters\",\n                            \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                            \"reorder\": true,\n                            \"addAnotherPosition\": \"bottom\",\n                            \"layoutFixed\": false,\n                            \"enableRowGroups\": false,\n                            \"initEmpty\": true,\n                            \"tableView\": false,\n                            \"key\": \"filters\",\n                            \"type\": \"datagrid\",\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Field\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"values = instance.root.data.columnsList;\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"refreshOn\": \"columnsList\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"field\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Filter Type\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                                    \"tableView\": true,\n                                    \"dataSrc\": \"custom\",\n                                    \"data\": {\n                                        \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                                    },\n                                    \"valueProperty\": \"value\",\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"filterType\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Filter Title\",\n                                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"key\": \"filterTitle\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                }\n                            ]\n                        }\n                    ]\n                },\n                {\n                    \"title\": \"Actions\",\n                    \"collapsible\": false,\n                    \"key\": \"actionsPanel\",\n                    \"conditional\": {\n                        \"show\": true,\n                        \"conjunction\": \"all\",\n                        \"conditions\": [\n                            {\n                                \"component\": \"enableControls\",\n                                \"operator\": \"isEqual\",\n                                \"value\": true\n                            }\n                        ]\n                    },\n                    \"type\": \"panel\",\n                    \"label\": \"Page 4\",\n                    \"breadcrumbClickable\": true,\n                    \"buttonSettings\": {\n                        \"previous\": true,\n                        \"cancel\": true,\n                        \"next\": true\n                    },\n                    \"navigateOnEnter\": false,\n                    \"saveOnEnter\": false,\n                    \"scrollToTop\": false,\n                    \"input\": false,\n                    \"tableView\": false,\n                    \"components\": [\n                        {\n                            \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                            \"label\": \"Content\",\n                            \"customClass\": \"text-muted\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"version8\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                            \"label\": \"Basic Reporting Settings\",\n                            \"refreshOnChange\": false,\n                            \"key\": \"basicReportingSettings6\",\n                            \"type\": \"content\",\n                            \"input\": false,\n                            \"tableView\": false\n                        },\n                        {\n                            \"label\": \"Actions\",\n                            \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                            \"tableView\": false,\n                            \"templates\": {\n                                \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                            },\n                            \"addAnother\": \"Add Action\",\n                            \"rowDrafts\": false,\n                            \"key\": \"actions\",\n                            \"type\": \"editgrid\",\n                            \"displayAsTable\": false,\n                            \"input\": true,\n                            \"components\": [\n                                {\n                                    \"label\": \"Title\",\n                                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"tableView\": true,\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"title\",\n                                    \"type\": \"textfield\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Type\",\n                                    \"widget\": \"choicesjs\",\n                                    \"tableView\": true,\n                                    \"data\": {\n                                        \"values\": [\n                                            {\n                                                \"label\": \"Export CSV\",\n                                                \"value\": \"csv\"\n                                            },\n                                            {\n                                                \"label\": \"Download PDF\",\n                                                \"value\": \"pdf\"\n                                            },\n                                            {\n                                                \"label\": \"Custom\",\n                                                \"value\": \"custom\"\n                                            }\n                                        ]\n                                    },\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"type\",\n                                    \"type\": \"select\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Apply action for:\",\n                                    \"optionsLabelPosition\": \"right\",\n                                    \"inline\": true,\n                                    \"tableView\": false,\n                                    \"defaultValue\": \"availableColumns\",\n                                    \"values\": [\n                                        {\n                                            \"label\": \"All Available Columns\",\n                                            \"value\": \"availableColumns\",\n                                            \"shortcut\": \"\"\n                                        },\n                                        {\n                                            \"label\": \"Visible Columns\",\n                                            \"value\": \"visibleColumns\",\n                                            \"shortcut\": \"\"\n                                        }\n                                    ],\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"applyFor\",\n                                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                                    \"type\": \"radio\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Print Limit\",\n                                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"mask\": false,\n                                    \"tableView\": false,\n                                    \"delimiter\": false,\n                                    \"requireDecimal\": false,\n                                    \"inputFormat\": \"plain\",\n                                    \"truncateMultipleSpaces\": false,\n                                    \"validateWhenHidden\": false,\n                                    \"key\": \"printLimit\",\n                                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                                    \"type\": \"number\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"Custom JS Code\",\n                                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                                    \"applyMaskOn\": \"change\",\n                                    \"editor\": \"ace\",\n                                    \"autoExpand\": false,\n                                    \"tableView\": false,\n                                    \"validate\": {\n                                        \"required\": true\n                                    },\n                                    \"key\": \"customCode\",\n                                    \"conditional\": {\n                                        \"conjunction\": \"all\"\n                                    },\n                                    \"customConditional\": \"show = row.type === 'custom';\",\n                                    \"type\": \"textarea\",\n                                    \"input\": true\n                                },\n                                {\n                                    \"label\": \"HTML\",\n                                    \"attrs\": [\n                                        {\n                                            \"attr\": \"\",\n                                            \"value\": \"\"\n                                        }\n                                    ],\n                                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                                    \"refreshOnChange\": false,\n                                    \"key\": \"html\",\n                                    \"customConditional\": \"show = row.type === 'custom';\",\n                                    \"type\": \"htmlelement\",\n                                    \"input\": false,\n                                    \"tableView\": false\n                                }\n                            ]\n                        }\n                    ]\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"administrator\",\n                        \"authenticated\",\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"administrator\",\n                        \"authenticated\",\n                        \"anonymous\"\n                    ]\n                }\n            ],\n            \"properties\": {\n                \"version\": 9\n            },\n            \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        },\n        \"admin\": {\n            \"title\": \"Admin\",\n            \"type\": \"resource\",\n            \"name\": \"admin\",\n            \"path\": \"admin\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": true,\n                    \"required\": true,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"button\",\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"tableView\": false,\n                    \"label\": \"Submit\",\n                    \"input\": true\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\",\n                        \"authenticated\",\n                        \"administrator\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"update_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"delete_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"read_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"update_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"delete_own\",\n                    \"roles\": []\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        },\n        \"user\": {\n            \"title\": \"User\",\n            \"type\": \"resource\",\n            \"name\": \"user\",\n            \"path\": \"user\",\n            \"pdfComponents\": [],\n            \"tags\": [],\n            \"components\": [\n                {\n                    \"type\": \"email\",\n                    \"persistent\": true,\n                    \"unique\": true,\n                    \"required\": true,\n                    \"protected\": false,\n                    \"defaultValue\": \"\",\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your email address\",\n                    \"key\": \"email\",\n                    \"label\": \"Email\",\n                    \"inputType\": \"email\",\n                    \"tableView\": true,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"password\",\n                    \"persistent\": true,\n                    \"protected\": true,\n                    \"suffix\": \"\",\n                    \"prefix\": \"\",\n                    \"placeholder\": \"Enter your password.\",\n                    \"key\": \"password\",\n                    \"label\": \"Password\",\n                    \"inputType\": \"password\",\n                    \"tableView\": false,\n                    \"input\": true\n                },\n                {\n                    \"type\": \"button\",\n                    \"theme\": \"primary\",\n                    \"disableOnInvalid\": true,\n                    \"action\": \"submit\",\n                    \"block\": false,\n                    \"rightIcon\": \"\",\n                    \"leftIcon\": \"\",\n                    \"size\": \"md\",\n                    \"key\": \"submit\",\n                    \"tableView\": false,\n                    \"label\": \"Submit\",\n                    \"input\": true\n                }\n            ],\n            \"access\": [\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"anonymous\",\n                        \"authenticated\",\n                        \"administrator\"\n                    ]\n                }\n            ],\n            \"submissionAccess\": [\n                {\n                    \"type\": \"create_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"read_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"update_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"delete_all\",\n                    \"roles\": [\n                        \"administrator\"\n                    ]\n                },\n                {\n                    \"type\": \"create_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"read_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"update_own\",\n                    \"roles\": []\n                },\n                {\n                    \"type\": \"delete_own\",\n                    \"roles\": []\n                }\n            ],\n            \"submissionRevisions\": \"\",\n            \"revisions\": \"\",\n            \"esign\": {}\n        }\n    },\n    \"revisions\": {},\n    \"reports\": {},\n    \"access\": [\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        }\n    ]\n}"}],"_postman_id":"3e2209d8-2621-43f0-8e7d-ec6d854074ae"},{"name":"Project Import","id":"5774f938-90d3-4e5b-a7f7-fbc10b977ebc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"template\": {\n    \"title\": \"Example Project: 642 Updated\",\n    \"version\": \"2.0.0\",\n    \"description\": \"This is an updated project.\",\n    \"name\": \"example-524\",\n    \"roles\": {\n      \"administrator\": {\n        \"title\": \"Administrator\",\n        \"description\": \"A role for Administrative Users.\",\n        \"admin\": true,\n        \"default\": false\n      },\n      \"authenticated\": {\n        \"title\": \"Authenticated\",\n        \"description\": \"A role for Authenticated Users.\",\n        \"admin\": false,\n        \"default\": false\n      },\n      \"anonymous\": {\n        \"title\": \"Anonymous\",\n        \"description\": \"A role for Anonymous Users.\",\n        \"admin\": false,\n        \"default\": true\n      }\n    },\n    \"forms\": {\n      \"adminLogin\": {\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userRegister\": {\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"label\": \"Submit\",\n            \"input\": true,\n            \"type\": \"button\"\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userLogin\": {\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"actions\": {\n      \"user:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"user\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"authenticated\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"user:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"user\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"admin:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"admin\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"administrator\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"admin:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"admin\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"reportingui:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"reportingui\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resource\": \"user\",\n          \"fields\": {\n            \"email\": \"email\",\n            \"password\": \"password\"\n          }\n        },\n        \"priority\": 11,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\"\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"adminLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"adminLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"admin\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      }\n    },\n    \"resources\": {\n      \"reportingui\": {\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"pdfComponents\": [],\n        \"display\": \"wizard\",\n        \"tags\": [\n          \"noBuilderResource\"\n        ],\n        \"settings\": {\n          \"wizardHeaderType\": \"Vertical\"\n        },\n        \"components\": [\n          {\n            \"title\": \"Basic Settings\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"basic\",\n            \"type\": \"panel\",\n            \"label\": \"Page 6\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version1\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                \"label\": \"Report Setup - Basic Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns\",\n                \"columns\": [\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Title\",\n                        \"placeholder\": \"Report Title\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"title\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  },\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Name\",\n                        \"placeholder\": \"Report Name\",\n                        \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                        \"allowCalculateOverride\": true,\n                        \"validate\": {\n                          \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                          \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                        },\n                        \"unique\": true,\n                        \"key\": \"name\",\n                        \"logic\": [\n                          {\n                            \"name\": \"make required\",\n                            \"trigger\": {\n                              \"type\": \"javascript\",\n                              \"javascript\": \"result = data.title;\"\n                            },\n                            \"actions\": [\n                              {\n                                \"name\": \"make required\",\n                                \"type\": \"property\",\n                                \"property\": {\n                                  \"label\": \"Required\",\n                                  \"value\": \"validate.required\",\n                                  \"type\": \"boolean\"\n                                },\n                                \"state\": true\n                              }\n                            ]\n                          }\n                        ],\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  }\n                ],\n                \"key\": \"columns1\",\n                \"type\": \"columns\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Forms\",\n                \"persistent\": false,\n                \"trigger\": {\n                  \"init\": false,\n                  \"server\": false\n                },\n                \"refreshOn\": \"forms\",\n                \"refreshOnEvent\": \"formsSet\",\n                \"event\": \"reportingFormsUpdated\",\n                \"dataSrc\": \"url\",\n                \"fetch\": {\n                  \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                  \"method\": \"get\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ],\n                  \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                  \"forwardHeaders\": false,\n                  \"authenticate\": true\n                },\n                \"allowCaching\": true,\n                \"key\": \"reportingForms\",\n                \"type\": \"datasource\",\n                \"indexeddb\": {},\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"gridSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings3\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Items per page\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                    \"tableView\": true,\n                    \"defaultValue\": 10,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"5\",\n                          \"value\": 5\n                        },\n                        {\n                          \"label\": \"10\",\n                          \"value\": 10\n                        },\n                        {\n                          \"label\": \"25\",\n                          \"value\": 25\n                        },\n                        {\n                          \"label\": \"50\",\n                          \"value\": 50\n                        },\n                        {\n                          \"label\": \"100\",\n                          \"value\": 100\n                        },\n                        {\n                          \"label\": \"All\",\n                          \"value\": -1\n                        }\n                      ]\n                    },\n                    \"key\": \"itemsPerPage\",\n                    \"type\": \"select\",\n                    \"input\": true,\n                    \"weight\": 442\n                  },\n                  {\n                    \"label\": \"Enable to Store Request Result in the Cache\",\n                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                    \"tableView\": false,\n                    \"defaultValue\": true,\n                    \"key\": \"allowCaching\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Cell max width\",\n                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"cellMaxWidth\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Source Forms\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"dataSourcePanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 1\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                \"label\": \"Basic Report Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"sourceFormsSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Choose from the Forms within this Project:\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"url\",\n                \"data\": {\n                  \"url\": \"{{Formio.projectUrl}}/form\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ]\n                },\n                \"valueProperty\": \"_id\",\n                \"template\": \"<span>{{ item.title }}</span>\",\n                \"validate\": {\n                  \"required\": true,\n                  \"select\": false\n                },\n                \"key\": \"forms\",\n                \"type\": \"select\",\n                \"disableLimit\": false,\n                \"searchField\": \"title__regex\",\n                \"noRefreshOnScroll\": false,\n                \"authenticate\": true,\n                \"input\": true\n              },\n              {\n                \"label\": \"Forms Connections\",\n                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Connection\",\n                \"redrawOn\": \"reportingForms\",\n                \"validate\": {\n                  \"required\": true\n                },\n                \"rowDrafts\": false,\n                \"key\": \"connections\",\n                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                \"logic\": [\n                  {\n                    \"name\": \"min max validation\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = !!data.reportingForms;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"min max validation\",\n                        \"type\": \"mergeComponentSchema\",\n                        \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"reorder\": false,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Data Source Connections\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Base Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"baseFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"connections.baseForm\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Joining Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"joiningFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"hideLabel\": true,\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Calculated Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"extraColumnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 7\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version3\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"calculatedColumnsSettingsDescription\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Calculated Extra Columns\",\n                \"hideLabel\": true,\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"redrawOn\": \"reportingForms\",\n                \"rowDrafts\": false,\n                \"key\": \"calculatedColumns\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"multiple\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"args\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"arg\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"reorder\": false,\n                    \"addAnotherPosition\": \"bottom\",\n                    \"layoutFixed\": false,\n                    \"enableRowGroups\": false,\n                    \"initEmpty\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"concatArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"datagrid\",\n                    \"input\": true,\n                    \"components\": [\n                      {\n                        \"label\": \"Field\",\n                        \"widget\": \"choicesjs\",\n                        \"tableView\": false,\n                        \"dataSrc\": \"custom\",\n                        \"data\": {\n                          \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                        },\n                        \"valueProperty\": \"value\",\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"field\",\n                        \"type\": \"select\",\n                        \"input\": true\n                      },\n                      {\n                        \"label\": \"Connector\",\n                        \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": false,\n                        \"key\": \"connector\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ]\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Dividend\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"dividend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Divisor\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"divisor\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"divideArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Minuend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"minuend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Subtrahend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"subtrahend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"subtractArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Start Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"startDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"End Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"endDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Unit\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"unit\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"size\": \"md\",\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"currentWidth\": 4\n                      }\n                    ],\n                    \"key\": \"dateDiffArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Date\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"date\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"calculatedColumnsSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"calcSettingsDescription\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Use Thousands Separator\",\n                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"thousandsSeparator\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Aggregation\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"groupingPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 8\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version4\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                \"label\": \"Content\",\n                \"refreshOnChange\": false,\n                \"key\": \"content\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Fields to group by\",\n                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                \"reorder\": false,\n                \"addAnother\": \"Add Field\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"key\": \"groups.groupingFields\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"placeholder\": \"Grouping Field\",\n                    \"hideLabel\": true,\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Calculated Aggregation Columns\",\n                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"rowDrafts\": false,\n                \"key\": \"groups.calculatedColumns\",\n                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select operator to calculate column value\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"argument\",\n                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"columnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 2\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns List\",\n                \"persistent\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                \"key\": \"columnsList\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Type\",\n                \"persistent\": false,\n                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                \"key\": \"reportType\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Available Columns\",\n                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                \"reorder\": true,\n                \"addAnother\": \"Add Column\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"validate\": {\n                  \"required\": true\n                },\n                \"key\": \"availableColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Column\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"column\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Display Title\",\n                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"displayTitle\",\n                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Default Columns\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"custom\",\n                \"data\": {\n                  \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                },\n                \"valueProperty\": \"value\",\n                \"refreshOn\": \"availableColumns\",\n                \"key\": \"defaultColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"select\",\n                \"input\": true\n              }\n            ]\n          },\n          {\n            \"title\": \"Control Panel\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"controlsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 9\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Enable Control Panel\",\n                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                \"tableView\": false,\n                \"defaultValue\": false,\n                \"key\": \"enableControls\",\n                \"type\": \"checkbox\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Controls Settings\",\n                \"tableView\": false,\n                \"key\": \"controlsSettings\",\n                \"customConditional\": \"show = data.enableControls;\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings8\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Control Panel Title\",\n                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Control Panel Theme\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"defaultValue\": \"default\",\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Default\",\n                          \"value\": \"default\"\n                        },\n                        {\n                          \"label\": \"Primary\",\n                          \"value\": \"primary\"\n                        },\n                        {\n                          \"label\": \"Info\",\n                          \"value\": \"info\"\n                        },\n                        {\n                          \"label\": \"Success\",\n                          \"value\": \"success\"\n                        },\n                        {\n                          \"label\": \"Danger\",\n                          \"value\": \"danger\"\n                        },\n                        {\n                          \"label\": \"Warning\",\n                          \"value\": \"warning\"\n                        }\n                      ]\n                    },\n                    \"key\": \"theme\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Initially Collapsed\",\n                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"collapsePanel\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Filters \",\n            \"collapsible\": false,\n            \"key\": \"filtersPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 3\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filters enable end users of this report to view any subset of data needed at runtime. Customize Filters for your Report Below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Number Of Filters Per Row\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel Filters Section.\",\n                \"tableView\": false,\n                \"defaultValue\": 2,\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"1\",\n                      \"value\": \"1\"\n                    },\n                    {\n                      \"label\": \"2\",\n                      \"value\": \"2\"\n                    },\n                    {\n                      \"label\": \"3\",\n                      \"value\": \"3\"\n                    },\n                    {\n                      \"label\": \"4\",\n                      \"value\": \"4\"\n                    }\n                  ]\n                },\n                \"dataType\": \"number\",\n                \"key\": \"filtersPerRow\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Filter Label Position\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                \"tableView\": false,\n                \"defaultValue\": \"top\",\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"Top\",\n                      \"value\": \"top\"\n                    },\n                    {\n                      \"label\": \"Left\",\n                      \"value\": \"left-left\"\n                    },\n                    {\n                      \"label\": \"Right\",\n                      \"value\": \"right-right\"\n                    }\n                  ]\n                },\n                \"key\": \"filterLabelPosition\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Control Panel Filters\",\n                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                \"reorder\": true,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"key\": \"filters\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = instance.root.data.columnsList;\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"filterType\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Title\",\n                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"filterTitle\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Actions\",\n            \"collapsible\": false,\n            \"key\": \"actionsPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 4\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version8\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Actions\",\n                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Action\",\n                \"rowDrafts\": false,\n                \"key\": \"actions\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Title\",\n                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Export CSV\",\n                          \"value\": \"csv\"\n                        },\n                        {\n                          \"label\": \"Download PDF\",\n                          \"value\": \"pdf\"\n                        },\n                        {\n                          \"label\": \"Custom\",\n                          \"value\": \"custom\"\n                        }\n                      ]\n                    },\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"type\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Apply action for:\",\n                    \"optionsLabelPosition\": \"right\",\n                    \"inline\": true,\n                    \"tableView\": false,\n                    \"defaultValue\": \"availableColumns\",\n                    \"values\": [\n                      {\n                        \"label\": \"All Available Columns\",\n                        \"value\": \"availableColumns\",\n                        \"shortcut\": \"\"\n                      },\n                      {\n                        \"label\": \"Visible Columns\",\n                        \"value\": \"visibleColumns\",\n                        \"shortcut\": \"\"\n                      }\n                    ],\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"applyFor\",\n                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                    \"type\": \"radio\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Print Limit\",\n                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"printLimit\",\n                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Custom JS Code\",\n                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                    \"applyMaskOn\": \"change\",\n                    \"editor\": \"ace\",\n                    \"autoExpand\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"customCode\",\n                    \"conditional\": {\n                      \"conjunction\": \"all\"\n                    },\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"textarea\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"HTML\",\n                    \"attrs\": [\n                      {\n                        \"attr\": \"\",\n                        \"value\": \"\"\n                      }\n                    ],\n                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"html\",\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"htmlelement\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"properties\": {\n          \"version\": 9\n        },\n        \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"admin\": {\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"user\": {\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"revisions\": {},\n    \"reports\": {},\n    \"access\": [\n      {\n        \"type\": \"create_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"create_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_all\",\n        \"roles\": []\n      }\n    ]\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/import","description":"<p>This API allows you to import template JSON into an existing template, which can be fetched using the export API on any project endpoint. The import process is an 'additive' process. Any forms that exist wtihin the template that do not exist within the destination project will be created. Any forms that exist in both the template and the destination project will be completely overwritten to match the form within the template. However, any forms that exist within the destination project that DO NOT exist within the template will not be touched. For this reason, you can import a minimal template that ONLY contains the forms and resources you wish to modify and once imported it will modify (or create) those forms, but will not touch the forms and resources within the destination project that are not contained within the template.</p>\n","urlObject":{"path":["{{ projectName }}","import"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"da8bc397-bb8d-439f-87d2-d418f185bc2e","name":"Project Import","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"template\": {\n    \"title\": \"Example Project Updated\",\n    \"version\": \"2.0.0\",\n    \"description\": \"This is an updated project.\",\n    \"name\": \"example\",\n    \"roles\": {\n      \"administrator\": {\n        \"title\": \"Administrator\",\n        \"description\": \"A role for Administrative Users.\",\n        \"admin\": true,\n        \"default\": false\n      },\n      \"authenticated\": {\n        \"title\": \"Authenticated\",\n        \"description\": \"A role for Authenticated Users.\",\n        \"admin\": false,\n        \"default\": false\n      },\n      \"anonymous\": {\n        \"title\": \"Anonymous\",\n        \"description\": \"A role for Anonymous Users.\",\n        \"admin\": false,\n        \"default\": true\n      }\n    },\n    \"forms\": {\n      \"adminLogin\": {\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userRegister\": {\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"label\": \"Submit\",\n            \"input\": true,\n            \"type\": \"button\"\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userLogin\": {\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"actions\": {\n      \"user:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"user\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"authenticated\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"user:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"user\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"admin:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"admin\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"administrator\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"admin:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"admin\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"reportingui:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"reportingui\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resource\": \"user\",\n          \"fields\": {\n            \"email\": \"email\",\n            \"password\": \"password\"\n          }\n        },\n        \"priority\": 11,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\"\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"adminLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"adminLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"admin\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      }\n    },\n    \"resources\": {\n      \"reportingui\": {\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"pdfComponents\": [],\n        \"display\": \"wizard\",\n        \"tags\": [\n          \"noBuilderResource\"\n        ],\n        \"settings\": {\n          \"wizardHeaderType\": \"Vertical\"\n        },\n        \"components\": [\n          {\n            \"title\": \"Basic Settings\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"basic\",\n            \"type\": \"panel\",\n            \"label\": \"Page 6\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version1\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                \"label\": \"Report Setup - Basic Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns\",\n                \"columns\": [\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Title\",\n                        \"placeholder\": \"Report Title\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"title\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  },\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Name\",\n                        \"placeholder\": \"Report Name\",\n                        \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                        \"allowCalculateOverride\": true,\n                        \"validate\": {\n                          \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                          \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                        },\n                        \"unique\": true,\n                        \"key\": \"name\",\n                        \"logic\": [\n                          {\n                            \"name\": \"make required\",\n                            \"trigger\": {\n                              \"type\": \"javascript\",\n                              \"javascript\": \"result = data.title;\"\n                            },\n                            \"actions\": [\n                              {\n                                \"name\": \"make required\",\n                                \"type\": \"property\",\n                                \"property\": {\n                                  \"label\": \"Required\",\n                                  \"value\": \"validate.required\",\n                                  \"type\": \"boolean\"\n                                },\n                                \"state\": true\n                              }\n                            ]\n                          }\n                        ],\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  }\n                ],\n                \"key\": \"columns1\",\n                \"type\": \"columns\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Forms\",\n                \"persistent\": false,\n                \"trigger\": {\n                  \"init\": false,\n                  \"server\": false\n                },\n                \"refreshOn\": \"forms\",\n                \"refreshOnEvent\": \"formsSet\",\n                \"event\": \"reportingFormsUpdated\",\n                \"dataSrc\": \"url\",\n                \"fetch\": {\n                  \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                  \"method\": \"get\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ],\n                  \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                  \"forwardHeaders\": false,\n                  \"authenticate\": true\n                },\n                \"allowCaching\": true,\n                \"key\": \"reportingForms\",\n                \"type\": \"datasource\",\n                \"indexeddb\": {},\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"gridSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings3\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Items per page\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                    \"tableView\": true,\n                    \"defaultValue\": 10,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"5\",\n                          \"value\": 5\n                        },\n                        {\n                          \"label\": \"10\",\n                          \"value\": 10\n                        },\n                        {\n                          \"label\": \"25\",\n                          \"value\": 25\n                        },\n                        {\n                          \"label\": \"50\",\n                          \"value\": 50\n                        },\n                        {\n                          \"label\": \"100\",\n                          \"value\": 100\n                        },\n                        {\n                          \"label\": \"All\",\n                          \"value\": -1\n                        }\n                      ]\n                    },\n                    \"key\": \"itemsPerPage\",\n                    \"type\": \"select\",\n                    \"input\": true,\n                    \"weight\": 442\n                  },\n                  {\n                    \"label\": \"Enable to Store Request Result in the Cache\",\n                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                    \"tableView\": false,\n                    \"defaultValue\": true,\n                    \"key\": \"allowCaching\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Cell max width\",\n                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"cellMaxWidth\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Source Forms\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"dataSourcePanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 1\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                \"label\": \"Basic Report Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"sourceFormsSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Choose from the Forms within this Project:\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"url\",\n                \"data\": {\n                  \"url\": \"{{Formio.projectUrl}}/form\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ]\n                },\n                \"valueProperty\": \"_id\",\n                \"template\": \"<span>{{ item.title }}</span>\",\n                \"validate\": {\n                  \"required\": true,\n                  \"select\": false\n                },\n                \"key\": \"forms\",\n                \"type\": \"select\",\n                \"disableLimit\": false,\n                \"searchField\": \"title__regex\",\n                \"noRefreshOnScroll\": false,\n                \"authenticate\": true,\n                \"input\": true\n              },\n              {\n                \"label\": \"Forms Connections\",\n                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Connection\",\n                \"redrawOn\": \"reportingForms\",\n                \"validate\": {\n                  \"required\": true\n                },\n                \"rowDrafts\": false,\n                \"key\": \"connections\",\n                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                \"logic\": [\n                  {\n                    \"name\": \"min max validation\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = !!data.reportingForms;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"min max validation\",\n                        \"type\": \"mergeComponentSchema\",\n                        \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"reorder\": false,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Data Source Connections\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Base Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"baseFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"connections.baseForm\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Joining Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"joiningFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"hideLabel\": true,\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Calculated Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"extraColumnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 7\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version3\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"calculatedColumnsSettingsDescription\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Calculated Extra Columns\",\n                \"hideLabel\": true,\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"redrawOn\": \"reportingForms\",\n                \"rowDrafts\": false,\n                \"key\": \"calculatedColumns\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"multiple\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"args\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"arg\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"reorder\": false,\n                    \"addAnotherPosition\": \"bottom\",\n                    \"layoutFixed\": false,\n                    \"enableRowGroups\": false,\n                    \"initEmpty\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"concatArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"datagrid\",\n                    \"input\": true,\n                    \"components\": [\n                      {\n                        \"label\": \"Field\",\n                        \"widget\": \"choicesjs\",\n                        \"tableView\": false,\n                        \"dataSrc\": \"custom\",\n                        \"data\": {\n                          \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                        },\n                        \"valueProperty\": \"value\",\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"field\",\n                        \"type\": \"select\",\n                        \"input\": true\n                      },\n                      {\n                        \"label\": \"Connector\",\n                        \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": false,\n                        \"key\": \"connector\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ]\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Dividend\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"dividend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Divisor\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"divisor\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"divideArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Minuend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"minuend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Subtrahend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"subtrahend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"subtractArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Start Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"startDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"End Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"endDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Unit\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"unit\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"size\": \"md\",\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"currentWidth\": 4\n                      }\n                    ],\n                    \"key\": \"dateDiffArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Date\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"date\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"calculatedColumnsSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"calcSettingsDescription\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Use Thousands Separator\",\n                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"thousandsSeparator\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Aggregation\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"groupingPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 8\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version4\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                \"label\": \"Content\",\n                \"refreshOnChange\": false,\n                \"key\": \"content\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Fields to group by\",\n                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                \"reorder\": false,\n                \"addAnother\": \"Add Field\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"key\": \"groups.groupingFields\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"placeholder\": \"Grouping Field\",\n                    \"hideLabel\": true,\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Calculated Aggregation Columns\",\n                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"rowDrafts\": false,\n                \"key\": \"groups.calculatedColumns\",\n                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select operator to calculate column value\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"argument\",\n                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"columnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 2\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns List\",\n                \"persistent\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                \"key\": \"columnsList\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Type\",\n                \"persistent\": false,\n                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                \"key\": \"reportType\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Available Columns\",\n                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                \"reorder\": true,\n                \"addAnother\": \"Add Column\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"validate\": {\n                  \"required\": true\n                },\n                \"key\": \"availableColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Column\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"column\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Display Title\",\n                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"displayTitle\",\n                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Default Columns\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"custom\",\n                \"data\": {\n                  \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                },\n                \"valueProperty\": \"value\",\n                \"refreshOn\": \"availableColumns\",\n                \"key\": \"defaultColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"select\",\n                \"input\": true\n              }\n            ]\n          },\n          {\n            \"title\": \"Control Panel\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"controlsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 9\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Enable Control Panel\",\n                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                \"tableView\": false,\n                \"defaultValue\": false,\n                \"key\": \"enableControls\",\n                \"type\": \"checkbox\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Controls Settings\",\n                \"tableView\": false,\n                \"key\": \"controlsSettings\",\n                \"customConditional\": \"show = data.enableControls;\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings8\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Control Panel Title\",\n                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Control Panel Theme\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"defaultValue\": \"default\",\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Default\",\n                          \"value\": \"default\"\n                        },\n                        {\n                          \"label\": \"Primary\",\n                          \"value\": \"primary\"\n                        },\n                        {\n                          \"label\": \"Info\",\n                          \"value\": \"info\"\n                        },\n                        {\n                          \"label\": \"Success\",\n                          \"value\": \"success\"\n                        },\n                        {\n                          \"label\": \"Danger\",\n                          \"value\": \"danger\"\n                        },\n                        {\n                          \"label\": \"Warning\",\n                          \"value\": \"warning\"\n                        }\n                      ]\n                    },\n                    \"key\": \"theme\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Initially Collapsed\",\n                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"collapsePanel\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Filters\",\n            \"collapsible\": false,\n            \"key\": \"filtersPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 3\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filters enable end users of this report to view any subset of data needed at runtime. Customize Filters for your Report Below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Number Of Filters Per Row\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel Filters Section.\",\n                \"tableView\": false,\n                \"defaultValue\": 2,\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"1\",\n                      \"value\": \"1\"\n                    },\n                    {\n                      \"label\": \"2\",\n                      \"value\": \"2\"\n                    },\n                    {\n                      \"label\": \"3\",\n                      \"value\": \"3\"\n                    },\n                    {\n                      \"label\": \"4\",\n                      \"value\": \"4\"\n                    }\n                  ]\n                },\n                \"dataType\": \"number\",\n                \"key\": \"filtersPerRow\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Filter Label Position\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                \"tableView\": false,\n                \"defaultValue\": \"top\",\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"Top\",\n                      \"value\": \"top\"\n                    },\n                    {\n                      \"label\": \"Left\",\n                      \"value\": \"left-left\"\n                    },\n                    {\n                      \"label\": \"Right\",\n                      \"value\": \"right-right\"\n                    }\n                  ]\n                },\n                \"key\": \"filterLabelPosition\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Control Panel Filters\",\n                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                \"reorder\": true,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"key\": \"filters\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = instance.root.data.columnsList;\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"filterType\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Title\",\n                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"filterTitle\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Actions\",\n            \"collapsible\": false,\n            \"key\": \"actionsPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 4\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version8\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Actions\",\n                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Action\",\n                \"rowDrafts\": false,\n                \"key\": \"actions\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Title\",\n                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Export CSV\",\n                          \"value\": \"csv\"\n                        },\n                        {\n                          \"label\": \"Download PDF\",\n                          \"value\": \"pdf\"\n                        },\n                        {\n                          \"label\": \"Custom\",\n                          \"value\": \"custom\"\n                        }\n                      ]\n                    },\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"type\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Apply action for:\",\n                    \"optionsLabelPosition\": \"right\",\n                    \"inline\": true,\n                    \"tableView\": false,\n                    \"defaultValue\": \"availableColumns\",\n                    \"values\": [\n                      {\n                        \"label\": \"All Available Columns\",\n                        \"value\": \"availableColumns\",\n                        \"shortcut\": \"\"\n                      },\n                      {\n                        \"label\": \"Visible Columns\",\n                        \"value\": \"visibleColumns\",\n                        \"shortcut\": \"\"\n                      }\n                    ],\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"applyFor\",\n                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                    \"type\": \"radio\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Print Limit\",\n                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"printLimit\",\n                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Custom JS Code\",\n                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                    \"applyMaskOn\": \"change\",\n                    \"editor\": \"ace\",\n                    \"autoExpand\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"customCode\",\n                    \"conditional\": {\n                      \"conjunction\": \"all\"\n                    },\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"textarea\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"HTML\",\n                    \"attrs\": [\n                      {\n                        \"attr\": \"\",\n                        \"value\": \"\"\n                      }\n                    ],\n                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"html\",\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"htmlelement\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"properties\": {\n          \"version\": 9\n        },\n        \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"admin\": {\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"user\": {\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"revisions\": {},\n    \"reports\": {},\n    \"access\": [\n      {\n        \"type\": \"create_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"create_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_all\",\n        \"roles\": []\n      }\n    ]\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/import"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 13:25:51 GMT"},{"key":"Content-Type","value":"text/html; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2-sKmCFqMkJrnmakrB623y6W4bSVw\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"Ok"}],"_postman_id":"5774f938-90d3-4e5b-a7f7-fbc10b977ebc"},{"name":"Create Version","id":"8efe53be-a137-43fa-b581-296c4520bf4f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"project\": \"{{ projectId }}\",\n  \"tag\": \"1.0.0\",\n  \"description\": \"Initial Version\",\n  \"template\": {\n    \"title\": \"Example Project: 642 Updated\",\n    \"version\": \"2.0.0\",\n    \"description\": \"This is an updated project.\",\n    \"name\": \"example-524\",\n    \"roles\": {\n      \"administrator\": {\n        \"title\": \"Administrator\",\n        \"description\": \"A role for Administrative Users.\",\n        \"admin\": true,\n        \"default\": false\n      },\n      \"authenticated\": {\n        \"title\": \"Authenticated\",\n        \"description\": \"A role for Authenticated Users.\",\n        \"admin\": false,\n        \"default\": false\n      },\n      \"anonymous\": {\n        \"title\": \"Anonymous\",\n        \"description\": \"A role for Anonymous Users.\",\n        \"admin\": false,\n        \"default\": true\n      }\n    },\n    \"forms\": {\n      \"adminLogin\": {\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userRegister\": {\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"label\": \"Submit\",\n            \"input\": true,\n            \"type\": \"button\"\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userLogin\": {\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"actions\": {\n      \"user:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"user\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"authenticated\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"user:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"user\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"admin:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"admin\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"administrator\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"admin:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"admin\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"reportingui:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"reportingui\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resource\": \"user\",\n          \"fields\": {\n            \"email\": \"email\",\n            \"password\": \"password\"\n          }\n        },\n        \"priority\": 11,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\"\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"adminLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"adminLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"admin\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      }\n    },\n    \"resources\": {\n      \"reportingui\": {\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"pdfComponents\": [],\n        \"display\": \"wizard\",\n        \"tags\": [\n          \"noBuilderResource\"\n        ],\n        \"settings\": {\n          \"wizardHeaderType\": \"Vertical\"\n        },\n        \"components\": [\n          {\n            \"title\": \"Basic Settings\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"basic\",\n            \"type\": \"panel\",\n            \"label\": \"Page 6\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version1\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                \"label\": \"Report Setup - Basic Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns\",\n                \"columns\": [\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Title\",\n                        \"placeholder\": \"Report Title\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"title\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  },\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Name\",\n                        \"placeholder\": \"Report Name\",\n                        \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                        \"allowCalculateOverride\": true,\n                        \"validate\": {\n                          \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                          \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                        },\n                        \"unique\": true,\n                        \"key\": \"name\",\n                        \"logic\": [\n                          {\n                            \"name\": \"make required\",\n                            \"trigger\": {\n                              \"type\": \"javascript\",\n                              \"javascript\": \"result = data.title;\"\n                            },\n                            \"actions\": [\n                              {\n                                \"name\": \"make required\",\n                                \"type\": \"property\",\n                                \"property\": {\n                                  \"label\": \"Required\",\n                                  \"value\": \"validate.required\",\n                                  \"type\": \"boolean\"\n                                },\n                                \"state\": true\n                              }\n                            ]\n                          }\n                        ],\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  }\n                ],\n                \"key\": \"columns1\",\n                \"type\": \"columns\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Forms\",\n                \"persistent\": false,\n                \"trigger\": {\n                  \"init\": false,\n                  \"server\": false\n                },\n                \"refreshOn\": \"forms\",\n                \"refreshOnEvent\": \"formsSet\",\n                \"event\": \"reportingFormsUpdated\",\n                \"dataSrc\": \"url\",\n                \"fetch\": {\n                  \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                  \"method\": \"get\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ],\n                  \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                  \"forwardHeaders\": false,\n                  \"authenticate\": true\n                },\n                \"allowCaching\": true,\n                \"key\": \"reportingForms\",\n                \"type\": \"datasource\",\n                \"indexeddb\": {},\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"gridSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings3\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Items per page\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                    \"tableView\": true,\n                    \"defaultValue\": 10,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"5\",\n                          \"value\": 5\n                        },\n                        {\n                          \"label\": \"10\",\n                          \"value\": 10\n                        },\n                        {\n                          \"label\": \"25\",\n                          \"value\": 25\n                        },\n                        {\n                          \"label\": \"50\",\n                          \"value\": 50\n                        },\n                        {\n                          \"label\": \"100\",\n                          \"value\": 100\n                        },\n                        {\n                          \"label\": \"All\",\n                          \"value\": -1\n                        }\n                      ]\n                    },\n                    \"key\": \"itemsPerPage\",\n                    \"type\": \"select\",\n                    \"input\": true,\n                    \"weight\": 442\n                  },\n                  {\n                    \"label\": \"Enable to Store Request Result in the Cache\",\n                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                    \"tableView\": false,\n                    \"defaultValue\": true,\n                    \"key\": \"allowCaching\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Cell max width\",\n                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"cellMaxWidth\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Source Forms\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"dataSourcePanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 1\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                \"label\": \"Basic Report Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"sourceFormsSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Choose from the Forms within this Project:\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"url\",\n                \"data\": {\n                  \"url\": \"{{Formio.projectUrl}}/form\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ]\n                },\n                \"valueProperty\": \"_id\",\n                \"template\": \"<span>{{ item.title }}</span>\",\n                \"validate\": {\n                  \"required\": true,\n                  \"select\": false\n                },\n                \"key\": \"forms\",\n                \"type\": \"select\",\n                \"disableLimit\": false,\n                \"searchField\": \"title__regex\",\n                \"noRefreshOnScroll\": false,\n                \"authenticate\": true,\n                \"input\": true\n              },\n              {\n                \"label\": \"Forms Connections\",\n                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Connection\",\n                \"redrawOn\": \"reportingForms\",\n                \"validate\": {\n                  \"required\": true\n                },\n                \"rowDrafts\": false,\n                \"key\": \"connections\",\n                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                \"logic\": [\n                  {\n                    \"name\": \"min max validation\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = !!data.reportingForms;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"min max validation\",\n                        \"type\": \"mergeComponentSchema\",\n                        \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"reorder\": false,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Data Source Connections\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Base Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"baseFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"connections.baseForm\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Joining Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"joiningFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"hideLabel\": true,\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Calculated Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"extraColumnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 7\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version3\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"calculatedColumnsSettingsDescription\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Calculated Extra Columns\",\n                \"hideLabel\": true,\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"redrawOn\": \"reportingForms\",\n                \"rowDrafts\": false,\n                \"key\": \"calculatedColumns\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"multiple\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"args\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"arg\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"reorder\": false,\n                    \"addAnotherPosition\": \"bottom\",\n                    \"layoutFixed\": false,\n                    \"enableRowGroups\": false,\n                    \"initEmpty\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"concatArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"datagrid\",\n                    \"input\": true,\n                    \"components\": [\n                      {\n                        \"label\": \"Field\",\n                        \"widget\": \"choicesjs\",\n                        \"tableView\": false,\n                        \"dataSrc\": \"custom\",\n                        \"data\": {\n                          \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                        },\n                        \"valueProperty\": \"value\",\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"field\",\n                        \"type\": \"select\",\n                        \"input\": true\n                      },\n                      {\n                        \"label\": \"Connector\",\n                        \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": false,\n                        \"key\": \"connector\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ]\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Dividend\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"dividend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Divisor\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"divisor\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"divideArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Minuend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"minuend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Subtrahend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"subtrahend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"subtractArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Start Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"startDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"End Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"endDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Unit\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"unit\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"size\": \"md\",\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"currentWidth\": 4\n                      }\n                    ],\n                    \"key\": \"dateDiffArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Date\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"date\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"calculatedColumnsSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"calcSettingsDescription\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Use Thousands Separator\",\n                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"thousandsSeparator\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Aggregation\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"groupingPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 8\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version4\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                \"label\": \"Content\",\n                \"refreshOnChange\": false,\n                \"key\": \"content\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Fields to group by\",\n                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                \"reorder\": false,\n                \"addAnother\": \"Add Field\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"key\": \"groups.groupingFields\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"placeholder\": \"Grouping Field\",\n                    \"hideLabel\": true,\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Calculated Aggregation Columns\",\n                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"rowDrafts\": false,\n                \"key\": \"groups.calculatedColumns\",\n                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select operator to calculate column value\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"argument\",\n                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"columnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 2\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns List\",\n                \"persistent\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                \"key\": \"columnsList\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Type\",\n                \"persistent\": false,\n                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                \"key\": \"reportType\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Available Columns\",\n                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                \"reorder\": true,\n                \"addAnother\": \"Add Column\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"validate\": {\n                  \"required\": true\n                },\n                \"key\": \"availableColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Column\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"column\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Display Title\",\n                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"displayTitle\",\n                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Default Columns\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"custom\",\n                \"data\": {\n                  \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                },\n                \"valueProperty\": \"value\",\n                \"refreshOn\": \"availableColumns\",\n                \"key\": \"defaultColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"select\",\n                \"input\": true\n              }\n            ]\n          },\n          {\n            \"title\": \"Control Panel\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"controlsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 9\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Enable Control Panel\",\n                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                \"tableView\": false,\n                \"defaultValue\": false,\n                \"key\": \"enableControls\",\n                \"type\": \"checkbox\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Controls Settings\",\n                \"tableView\": false,\n                \"key\": \"controlsSettings\",\n                \"customConditional\": \"show = data.enableControls;\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings8\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Control Panel Title\",\n                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Control Panel Theme\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"defaultValue\": \"default\",\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Default\",\n                          \"value\": \"default\"\n                        },\n                        {\n                          \"label\": \"Primary\",\n                          \"value\": \"primary\"\n                        },\n                        {\n                          \"label\": \"Info\",\n                          \"value\": \"info\"\n                        },\n                        {\n                          \"label\": \"Success\",\n                          \"value\": \"success\"\n                        },\n                        {\n                          \"label\": \"Danger\",\n                          \"value\": \"danger\"\n                        },\n                        {\n                          \"label\": \"Warning\",\n                          \"value\": \"warning\"\n                        }\n                      ]\n                    },\n                    \"key\": \"theme\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Initially Collapsed\",\n                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"collapsePanel\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Filters \",\n            \"collapsible\": false,\n            \"key\": \"filtersPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 3\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filters enable end users of this report to view any subset of data needed at runtime. Customize Filters for your Report Below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Number Of Filters Per Row\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel Filters Section.\",\n                \"tableView\": false,\n                \"defaultValue\": 2,\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"1\",\n                      \"value\": \"1\"\n                    },\n                    {\n                      \"label\": \"2\",\n                      \"value\": \"2\"\n                    },\n                    {\n                      \"label\": \"3\",\n                      \"value\": \"3\"\n                    },\n                    {\n                      \"label\": \"4\",\n                      \"value\": \"4\"\n                    }\n                  ]\n                },\n                \"dataType\": \"number\",\n                \"key\": \"filtersPerRow\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Filter Label Position\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                \"tableView\": false,\n                \"defaultValue\": \"top\",\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"Top\",\n                      \"value\": \"top\"\n                    },\n                    {\n                      \"label\": \"Left\",\n                      \"value\": \"left-left\"\n                    },\n                    {\n                      \"label\": \"Right\",\n                      \"value\": \"right-right\"\n                    }\n                  ]\n                },\n                \"key\": \"filterLabelPosition\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Control Panel Filters\",\n                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                \"reorder\": true,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"key\": \"filters\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = instance.root.data.columnsList;\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"filterType\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Title\",\n                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"filterTitle\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Actions\",\n            \"collapsible\": false,\n            \"key\": \"actionsPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 4\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version8\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Actions\",\n                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Action\",\n                \"rowDrafts\": false,\n                \"key\": \"actions\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Title\",\n                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Export CSV\",\n                          \"value\": \"csv\"\n                        },\n                        {\n                          \"label\": \"Download PDF\",\n                          \"value\": \"pdf\"\n                        },\n                        {\n                          \"label\": \"Custom\",\n                          \"value\": \"custom\"\n                        }\n                      ]\n                    },\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"type\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Apply action for:\",\n                    \"optionsLabelPosition\": \"right\",\n                    \"inline\": true,\n                    \"tableView\": false,\n                    \"defaultValue\": \"availableColumns\",\n                    \"values\": [\n                      {\n                        \"label\": \"All Available Columns\",\n                        \"value\": \"availableColumns\",\n                        \"shortcut\": \"\"\n                      },\n                      {\n                        \"label\": \"Visible Columns\",\n                        \"value\": \"visibleColumns\",\n                        \"shortcut\": \"\"\n                      }\n                    ],\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"applyFor\",\n                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                    \"type\": \"radio\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Print Limit\",\n                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"printLimit\",\n                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Custom JS Code\",\n                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                    \"applyMaskOn\": \"change\",\n                    \"editor\": \"ace\",\n                    \"autoExpand\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"customCode\",\n                    \"conditional\": {\n                      \"conjunction\": \"all\"\n                    },\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"textarea\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"HTML\",\n                    \"attrs\": [\n                      {\n                        \"attr\": \"\",\n                        \"value\": \"\"\n                      }\n                    ],\n                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"html\",\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"htmlelement\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"properties\": {\n          \"version\": 9\n        },\n        \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"admin\": {\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"user\": {\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"revisions\": {},\n    \"reports\": {},\n    \"access\": [\n      {\n        \"type\": \"create_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"create_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_all\",\n        \"roles\": []\n      }\n    ]\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/project/{{ projectId }}/tag","description":"<p>Once a project has been exported using the export endpoint, it can be used to create versions of your stage so that it can be deployed to other environments. This process creates a JSON representation of the project and then allows you to provide a version (usually using <a href=\"https://semver.org/\"><b>Semantic versioning</b></a>) of that stage so that it can then be deployed to other environments. In a typical form management workflow, all changes to forms will take place within a single stage. This allows a single point of origin for any of the versioning that will take place.</p>\n<p>When creating versions, it is important to use the <strong>projectId</strong> that is associated with the project where the form changes are being made (Authoring environment). This ensures that the versions that are managed are on the same deployment as the project where the form changes are being made.</p>\n","urlObject":{"path":["project","{{ projectId }}","tag"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"f6ec572b-c7e8-4239-9ba9-23f7c85e46fb","name":"Create Version","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"project\": \"69dfb6dcbb04c38a91029771\",\n  \"tag\": \"1.0.0\",\n  \"description\": \"Initial Version\",\n  \"template\": {\n    \"title\": \"Example Project Updated\",\n    \"version\": \"2.0.0\",\n    \"description\": \"This is an updated project.\",\n    \"name\": \"example\",\n    \"roles\": {\n      \"administrator\": {\n        \"title\": \"Administrator\",\n        \"description\": \"A role for Administrative Users.\",\n        \"admin\": true,\n        \"default\": false\n      },\n      \"authenticated\": {\n        \"title\": \"Authenticated\",\n        \"description\": \"A role for Authenticated Users.\",\n        \"admin\": false,\n        \"default\": false\n      },\n      \"anonymous\": {\n        \"title\": \"Anonymous\",\n        \"description\": \"A role for Anonymous Users.\",\n        \"admin\": false,\n        \"default\": true\n      }\n    },\n    \"forms\": {\n      \"adminLogin\": {\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userRegister\": {\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"label\": \"Submit\",\n            \"input\": true,\n            \"type\": \"button\"\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userLogin\": {\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"actions\": {\n      \"user:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"user\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"authenticated\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"user:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"user\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"admin:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"admin\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"administrator\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"admin:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"admin\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"reportingui:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"reportingui\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resource\": \"user\",\n          \"fields\": {\n            \"email\": \"email\",\n            \"password\": \"password\"\n          }\n        },\n        \"priority\": 11,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\"\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"adminLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"adminLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"admin\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      }\n    },\n    \"resources\": {\n      \"reportingui\": {\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"pdfComponents\": [],\n        \"display\": \"wizard\",\n        \"tags\": [\n          \"noBuilderResource\"\n        ],\n        \"settings\": {\n          \"wizardHeaderType\": \"Vertical\"\n        },\n        \"components\": [\n          {\n            \"title\": \"Basic Settings\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"basic\",\n            \"type\": \"panel\",\n            \"label\": \"Page 6\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version1\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                \"label\": \"Report Setup - Basic Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns\",\n                \"columns\": [\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Title\",\n                        \"placeholder\": \"Report Title\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"title\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  },\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Name\",\n                        \"placeholder\": \"Report Name\",\n                        \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                        \"allowCalculateOverride\": true,\n                        \"validate\": {\n                          \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                          \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                        },\n                        \"unique\": true,\n                        \"key\": \"name\",\n                        \"logic\": [\n                          {\n                            \"name\": \"make required\",\n                            \"trigger\": {\n                              \"type\": \"javascript\",\n                              \"javascript\": \"result = data.title;\"\n                            },\n                            \"actions\": [\n                              {\n                                \"name\": \"make required\",\n                                \"type\": \"property\",\n                                \"property\": {\n                                  \"label\": \"Required\",\n                                  \"value\": \"validate.required\",\n                                  \"type\": \"boolean\"\n                                },\n                                \"state\": true\n                              }\n                            ]\n                          }\n                        ],\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  }\n                ],\n                \"key\": \"columns1\",\n                \"type\": \"columns\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Forms\",\n                \"persistent\": false,\n                \"trigger\": {\n                  \"init\": false,\n                  \"server\": false\n                },\n                \"refreshOn\": \"forms\",\n                \"refreshOnEvent\": \"formsSet\",\n                \"event\": \"reportingFormsUpdated\",\n                \"dataSrc\": \"url\",\n                \"fetch\": {\n                  \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                  \"method\": \"get\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ],\n                  \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                  \"forwardHeaders\": false,\n                  \"authenticate\": true\n                },\n                \"allowCaching\": true,\n                \"key\": \"reportingForms\",\n                \"type\": \"datasource\",\n                \"indexeddb\": {},\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"gridSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings3\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Items per page\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                    \"tableView\": true,\n                    \"defaultValue\": 10,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"5\",\n                          \"value\": 5\n                        },\n                        {\n                          \"label\": \"10\",\n                          \"value\": 10\n                        },\n                        {\n                          \"label\": \"25\",\n                          \"value\": 25\n                        },\n                        {\n                          \"label\": \"50\",\n                          \"value\": 50\n                        },\n                        {\n                          \"label\": \"100\",\n                          \"value\": 100\n                        },\n                        {\n                          \"label\": \"All\",\n                          \"value\": -1\n                        }\n                      ]\n                    },\n                    \"key\": \"itemsPerPage\",\n                    \"type\": \"select\",\n                    \"input\": true,\n                    \"weight\": 442\n                  },\n                  {\n                    \"label\": \"Enable to Store Request Result in the Cache\",\n                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                    \"tableView\": false,\n                    \"defaultValue\": true,\n                    \"key\": \"allowCaching\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Cell max width\",\n                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"cellMaxWidth\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Source Forms\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"dataSourcePanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 1\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                \"label\": \"Basic Report Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"sourceFormsSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Choose from the Forms within this Project:\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"url\",\n                \"data\": {\n                  \"url\": \"{{Formio.projectUrl}}/form\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ]\n                },\n                \"valueProperty\": \"_id\",\n                \"template\": \"<span>{{ item.title }}</span>\",\n                \"validate\": {\n                  \"required\": true,\n                  \"select\": false\n                },\n                \"key\": \"forms\",\n                \"type\": \"select\",\n                \"disableLimit\": false,\n                \"searchField\": \"title__regex\",\n                \"noRefreshOnScroll\": false,\n                \"authenticate\": true,\n                \"input\": true\n              },\n              {\n                \"label\": \"Forms Connections\",\n                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Connection\",\n                \"redrawOn\": \"reportingForms\",\n                \"validate\": {\n                  \"required\": true\n                },\n                \"rowDrafts\": false,\n                \"key\": \"connections\",\n                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                \"logic\": [\n                  {\n                    \"name\": \"min max validation\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = !!data.reportingForms;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"min max validation\",\n                        \"type\": \"mergeComponentSchema\",\n                        \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"reorder\": false,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Data Source Connections\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Base Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"baseFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"connections.baseForm\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Joining Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"joiningFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"hideLabel\": true,\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Calculated Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"extraColumnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 7\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version3\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"calculatedColumnsSettingsDescription\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Calculated Extra Columns\",\n                \"hideLabel\": true,\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"redrawOn\": \"reportingForms\",\n                \"rowDrafts\": false,\n                \"key\": \"calculatedColumns\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"multiple\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"args\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"arg\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"reorder\": false,\n                    \"addAnotherPosition\": \"bottom\",\n                    \"layoutFixed\": false,\n                    \"enableRowGroups\": false,\n                    \"initEmpty\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"concatArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"datagrid\",\n                    \"input\": true,\n                    \"components\": [\n                      {\n                        \"label\": \"Field\",\n                        \"widget\": \"choicesjs\",\n                        \"tableView\": false,\n                        \"dataSrc\": \"custom\",\n                        \"data\": {\n                          \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                        },\n                        \"valueProperty\": \"value\",\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"field\",\n                        \"type\": \"select\",\n                        \"input\": true\n                      },\n                      {\n                        \"label\": \"Connector\",\n                        \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": false,\n                        \"key\": \"connector\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ]\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Dividend\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"dividend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Divisor\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"divisor\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"divideArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Minuend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"minuend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Subtrahend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"subtrahend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"subtractArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Start Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"startDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"End Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"endDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Unit\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"unit\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"size\": \"md\",\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"currentWidth\": 4\n                      }\n                    ],\n                    \"key\": \"dateDiffArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Date\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"date\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"calculatedColumnsSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"calcSettingsDescription\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Use Thousands Separator\",\n                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"thousandsSeparator\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Aggregation\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"groupingPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 8\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version4\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                \"label\": \"Content\",\n                \"refreshOnChange\": false,\n                \"key\": \"content\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Fields to group by\",\n                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                \"reorder\": false,\n                \"addAnother\": \"Add Field\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"key\": \"groups.groupingFields\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"placeholder\": \"Grouping Field\",\n                    \"hideLabel\": true,\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Calculated Aggregation Columns\",\n                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"rowDrafts\": false,\n                \"key\": \"groups.calculatedColumns\",\n                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select operator to calculate column value\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"argument\",\n                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"columnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 2\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns List\",\n                \"persistent\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                \"key\": \"columnsList\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Type\",\n                \"persistent\": false,\n                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                \"key\": \"reportType\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Available Columns\",\n                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                \"reorder\": true,\n                \"addAnother\": \"Add Column\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"validate\": {\n                  \"required\": true\n                },\n                \"key\": \"availableColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Column\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"column\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Display Title\",\n                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"displayTitle\",\n                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Default Columns\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"custom\",\n                \"data\": {\n                  \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                },\n                \"valueProperty\": \"value\",\n                \"refreshOn\": \"availableColumns\",\n                \"key\": \"defaultColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"select\",\n                \"input\": true\n              }\n            ]\n          },\n          {\n            \"title\": \"Control Panel\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"controlsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 9\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Enable Control Panel\",\n                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                \"tableView\": false,\n                \"defaultValue\": false,\n                \"key\": \"enableControls\",\n                \"type\": \"checkbox\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Controls Settings\",\n                \"tableView\": false,\n                \"key\": \"controlsSettings\",\n                \"customConditional\": \"show = data.enableControls;\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings8\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Control Panel Title\",\n                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Control Panel Theme\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"defaultValue\": \"default\",\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Default\",\n                          \"value\": \"default\"\n                        },\n                        {\n                          \"label\": \"Primary\",\n                          \"value\": \"primary\"\n                        },\n                        {\n                          \"label\": \"Info\",\n                          \"value\": \"info\"\n                        },\n                        {\n                          \"label\": \"Success\",\n                          \"value\": \"success\"\n                        },\n                        {\n                          \"label\": \"Danger\",\n                          \"value\": \"danger\"\n                        },\n                        {\n                          \"label\": \"Warning\",\n                          \"value\": \"warning\"\n                        }\n                      ]\n                    },\n                    \"key\": \"theme\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Initially Collapsed\",\n                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"collapsePanel\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Filters\",\n            \"collapsible\": false,\n            \"key\": \"filtersPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 3\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filters enable end users of this report to view any subset of data needed at runtime. Customize Filters for your Report Below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Number Of Filters Per Row\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel Filters Section.\",\n                \"tableView\": false,\n                \"defaultValue\": 2,\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"1\",\n                      \"value\": \"1\"\n                    },\n                    {\n                      \"label\": \"2\",\n                      \"value\": \"2\"\n                    },\n                    {\n                      \"label\": \"3\",\n                      \"value\": \"3\"\n                    },\n                    {\n                      \"label\": \"4\",\n                      \"value\": \"4\"\n                    }\n                  ]\n                },\n                \"dataType\": \"number\",\n                \"key\": \"filtersPerRow\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Filter Label Position\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                \"tableView\": false,\n                \"defaultValue\": \"top\",\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"Top\",\n                      \"value\": \"top\"\n                    },\n                    {\n                      \"label\": \"Left\",\n                      \"value\": \"left-left\"\n                    },\n                    {\n                      \"label\": \"Right\",\n                      \"value\": \"right-right\"\n                    }\n                  ]\n                },\n                \"key\": \"filterLabelPosition\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Control Panel Filters\",\n                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                \"reorder\": true,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"key\": \"filters\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = instance.root.data.columnsList;\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"filterType\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Title\",\n                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"filterTitle\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Actions\",\n            \"collapsible\": false,\n            \"key\": \"actionsPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 4\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version8\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Actions\",\n                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Action\",\n                \"rowDrafts\": false,\n                \"key\": \"actions\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Title\",\n                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Export CSV\",\n                          \"value\": \"csv\"\n                        },\n                        {\n                          \"label\": \"Download PDF\",\n                          \"value\": \"pdf\"\n                        },\n                        {\n                          \"label\": \"Custom\",\n                          \"value\": \"custom\"\n                        }\n                      ]\n                    },\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"type\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Apply action for:\",\n                    \"optionsLabelPosition\": \"right\",\n                    \"inline\": true,\n                    \"tableView\": false,\n                    \"defaultValue\": \"availableColumns\",\n                    \"values\": [\n                      {\n                        \"label\": \"All Available Columns\",\n                        \"value\": \"availableColumns\",\n                        \"shortcut\": \"\"\n                      },\n                      {\n                        \"label\": \"Visible Columns\",\n                        \"value\": \"visibleColumns\",\n                        \"shortcut\": \"\"\n                      }\n                    ],\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"applyFor\",\n                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                    \"type\": \"radio\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Print Limit\",\n                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"printLimit\",\n                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Custom JS Code\",\n                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                    \"applyMaskOn\": \"change\",\n                    \"editor\": \"ace\",\n                    \"autoExpand\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"customCode\",\n                    \"conditional\": {\n                      \"conjunction\": \"all\"\n                    },\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"textarea\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"HTML\",\n                    \"attrs\": [\n                      {\n                        \"attr\": \"\",\n                        \"value\": \"\"\n                      }\n                    ],\n                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"html\",\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"htmlelement\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"properties\": {\n          \"version\": 9\n        },\n        \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"admin\": {\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"user\": {\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"revisions\": {},\n    \"reports\": {},\n    \"access\": [\n      {\n        \"type\": \"create_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"create_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"read_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"update_all\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_own\",\n        \"roles\": []\n      },\n      {\n        \"type\": \"delete_all\",\n        \"roles\": []\n      }\n    ]\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/project/69dfb6dcbb04c38a91029771/tag"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:43:29 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"52281"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"cc39-JMhre4Mdx3DxKKfP0U8SxpGlzuQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"project\": \"69d6527d42ae1f2fed8c5627\",\n    \"tag\": \"1.0.0\",\n    \"description\": \"Initial Version\",\n    \"template\": {\n        \"title\": \"Example Project Updated\",\n        \"version\": \"2.0.0\",\n        \"description\": \"This is an updated project.\",\n        \"name\": \"example\",\n        \"roles\": {\n            \"administrator\": {\n                \"title\": \"Administrator\",\n                \"description\": \"A role for Administrative Users.\",\n                \"admin\": true,\n                \"default\": false\n            },\n            \"authenticated\": {\n                \"title\": \"Authenticated\",\n                \"description\": \"A role for Authenticated Users.\",\n                \"admin\": false,\n                \"default\": false\n            },\n            \"anonymous\": {\n                \"title\": \"Anonymous\",\n                \"description\": \"A role for Anonymous Users.\",\n                \"admin\": false,\n                \"default\": true\n            }\n        },\n        \"reports\": {},\n        \"access\": [],\n        \"tag\": \"1.0.0\",\n        \"resources\": {\n            \"reportingui\": {\n                \"title\": \"Reporting UI\",\n                \"type\": \"resource\",\n                \"name\": \"reportingui\",\n                \"path\": \"reportingui\",\n                \"pdfComponents\": [],\n                \"display\": \"wizard\",\n                \"tags\": [\n                    \"noBuilderResource\"\n                ],\n                \"settings\": {\n                    \"wizardHeaderType\": \"Vertical\"\n                },\n                \"components\": [\n                    {\n                        \"title\": \"Basic Settings\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"basic\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 6\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version1\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                                \"label\": \"Report Setup - Basic Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportSettings\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Columns\",\n                                \"columns\": [\n                                    {\n                                        \"components\": [\n                                            {\n                                                \"label\": \"Report Title\",\n                                                \"placeholder\": \"Report Title\",\n                                                \"applyMaskOn\": \"change\",\n                                                \"tableView\": true,\n                                                \"validate\": {\n                                                    \"required\": true\n                                                },\n                                                \"key\": \"title\",\n                                                \"type\": \"textfield\",\n                                                \"input\": true\n                                            }\n                                        ],\n                                        \"width\": 6,\n                                        \"offset\": 0,\n                                        \"push\": 0,\n                                        \"pull\": 0,\n                                        \"size\": \"md\",\n                                        \"currentWidth\": 6\n                                    },\n                                    {\n                                        \"components\": [\n                                            {\n                                                \"label\": \"Report Name\",\n                                                \"placeholder\": \"Report Name\",\n                                                \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                                                \"applyMaskOn\": \"change\",\n                                                \"tableView\": true,\n                                                \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                                                \"allowCalculateOverride\": true,\n                                                \"validate\": {\n                                                    \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                    \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                },\n                                                \"unique\": true,\n                                                \"key\": \"name\",\n                                                \"logic\": [\n                                                    {\n                                                        \"name\": \"make required\",\n                                                        \"trigger\": {\n                                                            \"type\": \"javascript\",\n                                                            \"javascript\": \"result = data.title;\"\n                                                        },\n                                                        \"actions\": [\n                                                            {\n                                                                \"name\": \"make required\",\n                                                                \"type\": \"property\",\n                                                                \"property\": {\n                                                                    \"label\": \"Required\",\n                                                                    \"value\": \"validate.required\",\n                                                                    \"type\": \"boolean\"\n                                                                },\n                                                                \"state\": true\n                                                            }\n                                                        ]\n                                                    }\n                                                ],\n                                                \"type\": \"textfield\",\n                                                \"input\": true\n                                            }\n                                        ],\n                                        \"width\": 6,\n                                        \"offset\": 0,\n                                        \"push\": 0,\n                                        \"pull\": 0,\n                                        \"size\": \"md\",\n                                        \"currentWidth\": 6\n                                    }\n                                ],\n                                \"key\": \"columns1\",\n                                \"type\": \"columns\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Report Forms\",\n                                \"persistent\": false,\n                                \"trigger\": {\n                                    \"init\": false,\n                                    \"server\": false\n                                },\n                                \"refreshOn\": \"forms\",\n                                \"refreshOnEvent\": \"formsSet\",\n                                \"event\": \"reportingFormsUpdated\",\n                                \"dataSrc\": \"url\",\n                                \"fetch\": {\n                                    \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                                    \"method\": \"get\",\n                                    \"headers\": [\n                                        {\n                                            \"key\": \"\",\n                                            \"value\": \"\"\n                                        }\n                                    ],\n                                    \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                                    \"forwardHeaders\": false,\n                                    \"authenticate\": true\n                                },\n                                \"allowCaching\": true,\n                                \"key\": \"reportingForms\",\n                                \"type\": \"datasource\",\n                                \"indexeddb\": {},\n                                \"input\": true,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Container\",\n                                \"tableView\": false,\n                                \"key\": \"gridSettings\",\n                                \"type\": \"container\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                                        \"label\": \"Reporting Grid Basic Settings\",\n                                        \"refreshOnChange\": false,\n                                        \"key\": \"basicReportingSettings3\",\n                                        \"type\": \"content\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Items per page\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                                        \"tableView\": true,\n                                        \"defaultValue\": 10,\n                                        \"data\": {\n                                            \"values\": [\n                                                {\n                                                    \"label\": \"5\",\n                                                    \"value\": 5\n                                                },\n                                                {\n                                                    \"label\": \"10\",\n                                                    \"value\": 10\n                                                },\n                                                {\n                                                    \"label\": \"25\",\n                                                    \"value\": 25\n                                                },\n                                                {\n                                                    \"label\": \"50\",\n                                                    \"value\": 50\n                                                },\n                                                {\n                                                    \"label\": \"100\",\n                                                    \"value\": 100\n                                                },\n                                                {\n                                                    \"label\": \"All\",\n                                                    \"value\": -1\n                                                }\n                                            ]\n                                        },\n                                        \"key\": \"itemsPerPage\",\n                                        \"type\": \"select\",\n                                        \"input\": true,\n                                        \"weight\": 442\n                                    },\n                                    {\n                                        \"label\": \"Enable to Store Request Result in the Cache\",\n                                        \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                                        \"tableView\": false,\n                                        \"defaultValue\": true,\n                                        \"key\": \"allowCaching\",\n                                        \"type\": \"checkbox\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Cell max width\",\n                                        \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"key\": \"cellMaxWidth\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Source Forms\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"dataSourcePanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 1\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version2\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                                \"label\": \"Basic Report Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"sourceFormsSettings\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Choose from the Forms within this Project:\",\n                                \"widget\": \"choicesjs\",\n                                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                                \"tableView\": false,\n                                \"multiple\": true,\n                                \"dataSrc\": \"url\",\n                                \"data\": {\n                                    \"url\": \"{{Formio.projectUrl}}/form\",\n                                    \"headers\": [\n                                        {\n                                            \"key\": \"\",\n                                            \"value\": \"\"\n                                        }\n                                    ]\n                                },\n                                \"valueProperty\": \"_id\",\n                                \"template\": \"<span>{{ item.title }}</span>\",\n                                \"validate\": {\n                                    \"required\": true,\n                                    \"select\": false\n                                },\n                                \"key\": \"forms\",\n                                \"type\": \"select\",\n                                \"disableLimit\": false,\n                                \"searchField\": \"title__regex\",\n                                \"noRefreshOnScroll\": false,\n                                \"authenticate\": true,\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Forms Connections\",\n                                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                                \"tableView\": false,\n                                \"templates\": {\n                                    \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                    \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                                },\n                                \"addAnother\": \"Add Connection\",\n                                \"redrawOn\": \"reportingForms\",\n                                \"validate\": {\n                                    \"required\": true\n                                },\n                                \"rowDrafts\": false,\n                                \"key\": \"connections\",\n                                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                                \"logic\": [\n                                    {\n                                        \"name\": \"min max validation\",\n                                        \"trigger\": {\n                                            \"type\": \"javascript\",\n                                            \"javascript\": \"result = !!data.reportingForms;\"\n                                        },\n                                        \"actions\": [\n                                            {\n                                                \"name\": \"min max validation\",\n                                                \"type\": \"mergeComponentSchema\",\n                                                \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                                            }\n                                        ]\n                                    }\n                                ],\n                                \"type\": \"editgrid\",\n                                \"displayAsTable\": false,\n                                \"reorder\": false,\n                                \"addAnotherPosition\": \"bottom\",\n                                \"layoutFixed\": false,\n                                \"enableRowGroups\": false,\n                                \"initEmpty\": false,\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Data Source Connections\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Base Form\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"placeholder\": \"Source Form\",\n                                                        \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                                                        \"tableView\": true,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"baseForm\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    },\n                                                    {\n                                                        \"label\": \"Connecting field of base Form\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"placeholder\": \"Connecting Field\",\n                                                        \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                                                        \"disabled\": true,\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"baseFormField\",\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"enable\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.baseForm\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"enable\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Disabled\",\n                                                                            \"value\": \"disabled\",\n                                                                            \"type\": \"boolean\"\n                                                                        },\n                                                                        \"state\": false\n                                                                    }\n                                                                ]\n                                                            },\n                                                            {\n                                                                \"name\": \"clear value\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = !row.baseForm\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"clear value\",\n                                                                        \"type\": \"customAction\",\n                                                                        \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ],\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    },\n                                                    {\n                                                        \"label\": \"Base Form path to connecting value\",\n                                                        \"placeholder\": \"Path\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": false,\n                                                        \"key\": \"baseFormValuePath\",\n                                                        \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Joining Form\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"placeholder\": \"Source Form\",\n                                                        \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                                                        \"tableView\": true,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"refreshOn\": \"connections.baseForm\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"joiningForm\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    },\n                                                    {\n                                                        \"label\": \"Connecting field of joining Form\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"placeholder\": \"Connecting Field\",\n                                                        \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                                                        \"disabled\": true,\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"joiningFormField\",\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"enable\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.joiningForm\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"enable\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Disabled\",\n                                                                            \"value\": \"disabled\",\n                                                                            \"type\": \"boolean\"\n                                                                        },\n                                                                        \"state\": false\n                                                                    }\n                                                                ]\n                                                            },\n                                                            {\n                                                                \"name\": \"clear value\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = !row.joiningForm\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"clear value\",\n                                                                        \"type\": \"customAction\",\n                                                                        \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ],\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    },\n                                                    {\n                                                        \"label\": \"Joining Form path to connecting value\",\n                                                        \"placeholder\": \"Path\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": false,\n                                                        \"key\": \"joiningFormValuePath\",\n                                                        \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"hideLabel\": true,\n                                        \"key\": \"columns\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Calculated Columns\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"extraColumnsPanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 7\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version3\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"calculatedColumnsSettingsDescription\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Calculated Extra Columns\",\n                                \"hideLabel\": true,\n                                \"tableView\": false,\n                                \"templates\": {\n                                    \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                    \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                                },\n                                \"addAnother\": \"Add Column\",\n                                \"redrawOn\": \"reportingForms\",\n                                \"rowDrafts\": false,\n                                \"key\": \"calculatedColumns\",\n                                \"type\": \"editgrid\",\n                                \"displayAsTable\": false,\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Column Title\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": true,\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"name\",\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Column Key\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": false,\n                                                        \"calculateValue\": \"value = _.camelCase(row.name);\",\n                                                        \"allowCalculateOverride\": true,\n                                                        \"validate\": {\n                                                            \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                            \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                                                            \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                        },\n                                                        \"key\": \"key\",\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"make required\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.title;\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"make required\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Required\",\n                                                                            \"value\": \"validate.required\",\n                                                                            \"type\": \"boolean\"\n                                                                        },\n                                                                        \"state\": true\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ],\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"key\": \"columns\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Operator\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tooltip\": \"Select an operator to calculate the column value.\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"operator\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Arguments\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": false,\n                                        \"multiple\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"args\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Argument\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": false,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"arg\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Arguments\",\n                                        \"reorder\": false,\n                                        \"addAnotherPosition\": \"bottom\",\n                                        \"layoutFixed\": false,\n                                        \"enableRowGroups\": false,\n                                        \"initEmpty\": false,\n                                        \"tableView\": false,\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"concatArgs\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"datagrid\",\n                                        \"input\": true,\n                                        \"components\": [\n                                            {\n                                                \"label\": \"Field\",\n                                                \"widget\": \"choicesjs\",\n                                                \"tableView\": false,\n                                                \"dataSrc\": \"custom\",\n                                                \"data\": {\n                                                    \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                                                },\n                                                \"valueProperty\": \"value\",\n                                                \"validate\": {\n                                                    \"required\": true\n                                                },\n                                                \"key\": \"field\",\n                                                \"type\": \"select\",\n                                                \"input\": true\n                                            },\n                                            {\n                                                \"label\": \"Connector\",\n                                                \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                                                \"applyMaskOn\": \"change\",\n                                                \"tableView\": false,\n                                                \"key\": \"connector\",\n                                                \"type\": \"textfield\",\n                                                \"input\": true\n                                            }\n                                        ]\n                                    },\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Dividend\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"dividend\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Divisor\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"divisor\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"key\": \"divideArgs\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Minuend\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"minuend\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Subtrahend\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"subtrahend\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"key\": \"subtractArgs\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Start Date\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"startDate\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 4,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 4\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"End Date\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"endDate\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 4,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 4\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Unit\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"unit\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"size\": \"md\",\n                                                \"width\": 4,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"currentWidth\": 4\n                                            }\n                                        ],\n                                        \"key\": \"dateDiffArgs\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Date\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": false,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"date\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Decimal Places\",\n                                        \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"mask\": false,\n                                        \"tableView\": false,\n                                        \"delimiter\": false,\n                                        \"requireDecimal\": false,\n                                        \"inputFormat\": \"plain\",\n                                        \"truncateMultipleSpaces\": false,\n                                        \"key\": \"decimalLimit\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"number\",\n                                        \"input\": true\n                                    }\n                                ]\n                            },\n                            {\n                                \"label\": \"Container\",\n                                \"tableView\": false,\n                                \"key\": \"calculatedColumnsSettings\",\n                                \"type\": \"container\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                                        \"label\": \"Reporting Grid Basic Settings\",\n                                        \"refreshOnChange\": false,\n                                        \"key\": \"calcSettingsDescription\",\n                                        \"type\": \"content\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Use Thousands Separator\",\n                                        \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                                        \"tableView\": false,\n                                        \"defaultValue\": false,\n                                        \"key\": \"thousandsSeparator\",\n                                        \"type\": \"checkbox\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Aggregation\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"groupingPanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 8\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version4\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                                \"label\": \"Content\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"content\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Fields to group by\",\n                                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                                \"reorder\": false,\n                                \"addAnother\": \"Add Field\",\n                                \"addAnotherPosition\": \"bottom\",\n                                \"layoutFixed\": false,\n                                \"enableRowGroups\": false,\n                                \"initEmpty\": true,\n                                \"tableView\": false,\n                                \"redrawOn\": \"reportingForms\",\n                                \"key\": \"groups.groupingFields\",\n                                \"type\": \"datagrid\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Field\",\n                                        \"widget\": \"choicesjs\",\n                                        \"placeholder\": \"Grouping Field\",\n                                        \"hideLabel\": true,\n                                        \"tableView\": false,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"field\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    }\n                                ]\n                            },\n                            {\n                                \"label\": \"Calculated Aggregation Columns\",\n                                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                                \"tableView\": false,\n                                \"templates\": {\n                                    \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                    \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                                },\n                                \"addAnother\": \"Add Column\",\n                                \"rowDrafts\": false,\n                                \"key\": \"groups.calculatedColumns\",\n                                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                                \"type\": \"editgrid\",\n                                \"displayAsTable\": false,\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Column Title\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": true,\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"name\",\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Column Key\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": false,\n                                                        \"calculateValue\": \"value = _.camelCase(row.name);\",\n                                                        \"allowCalculateOverride\": true,\n                                                        \"validate\": {\n                                                            \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                            \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                                                            \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                        },\n                                                        \"key\": \"key\",\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"make required\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.title;\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"make required\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Required\",\n                                                                            \"value\": \"validate.required\",\n                                                                            \"type\": \"boolean\"\n                                                                        },\n                                                                        \"state\": true\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ],\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"key\": \"columns\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Operator\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tooltip\": \"Select operator to calculate column value\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"operator\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Argument\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": false,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"argument\",\n                                        \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Decimal Places\",\n                                        \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"mask\": false,\n                                        \"tableView\": false,\n                                        \"delimiter\": false,\n                                        \"requireDecimal\": false,\n                                        \"inputFormat\": \"plain\",\n                                        \"truncateMultipleSpaces\": false,\n                                        \"key\": \"decimalLimit\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"number\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Columns\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"columnsPanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 2\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version5\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportingSettings2\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Columns List\",\n                                \"persistent\": false,\n                                \"redrawOn\": \"reportingForms\",\n                                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                                \"key\": \"columnsList\",\n                                \"type\": \"hidden\",\n                                \"input\": true,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Report Type\",\n                                \"persistent\": false,\n                                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                                \"key\": \"reportType\",\n                                \"type\": \"hidden\",\n                                \"input\": true,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Available Columns\",\n                                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                                \"reorder\": true,\n                                \"addAnother\": \"Add Column\",\n                                \"addAnotherPosition\": \"bottom\",\n                                \"layoutFixed\": false,\n                                \"enableRowGroups\": false,\n                                \"initEmpty\": true,\n                                \"tableView\": false,\n                                \"validate\": {\n                                    \"required\": true\n                                },\n                                \"key\": \"availableColumns\",\n                                \"logic\": [\n                                    {\n                                        \"name\": \"clear Columns\",\n                                        \"trigger\": {\n                                            \"type\": \"javascript\",\n                                            \"javascript\": \"result = data.reportType?.typeChanged;\"\n                                        },\n                                        \"actions\": [\n                                            {\n                                                \"name\": \"clear\",\n                                                \"type\": \"customAction\",\n                                                \"customAction\": \"instance.resetValue();\"\n                                            }\n                                        ]\n                                    }\n                                ],\n                                \"type\": \"datagrid\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Column\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"refreshOn\": \"columnsList\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"column\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Display Title\",\n                                        \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"key\": \"displayTitle\",\n                                        \"customConditional\": \"show = row.column && row.column.formId;\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    }\n                                ]\n                            },\n                            {\n                                \"label\": \"Default Columns\",\n                                \"widget\": \"choicesjs\",\n                                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                                \"tableView\": false,\n                                \"multiple\": true,\n                                \"dataSrc\": \"custom\",\n                                \"data\": {\n                                    \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                                },\n                                \"valueProperty\": \"value\",\n                                \"refreshOn\": \"availableColumns\",\n                                \"key\": \"defaultColumns\",\n                                \"logic\": [\n                                    {\n                                        \"name\": \"clear Columns\",\n                                        \"trigger\": {\n                                            \"type\": \"javascript\",\n                                            \"javascript\": \"result = data.reportType?.typeChanged;\"\n                                        },\n                                        \"actions\": [\n                                            {\n                                                \"name\": \"clear\",\n                                                \"type\": \"customAction\",\n                                                \"customAction\": \"instance.resetValue();\"\n                                            }\n                                        ]\n                                    }\n                                ],\n                                \"type\": \"select\",\n                                \"input\": true\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Control Panel\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"controlsPanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 9\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version6\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportingSettings7\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Enable Control Panel\",\n                                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                                \"tableView\": false,\n                                \"defaultValue\": false,\n                                \"key\": \"enableControls\",\n                                \"type\": \"checkbox\",\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Controls Settings\",\n                                \"tableView\": false,\n                                \"key\": \"controlsSettings\",\n                                \"customConditional\": \"show = data.enableControls;\",\n                                \"type\": \"container\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                                        \"label\": \"Reporting Grid Basic Settings\",\n                                        \"refreshOnChange\": false,\n                                        \"key\": \"basicReportingSettings8\",\n                                        \"type\": \"content\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Control Panel Title\",\n                                        \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"key\": \"title\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Control Panel Theme\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": true,\n                                        \"defaultValue\": \"default\",\n                                        \"data\": {\n                                            \"values\": [\n                                                {\n                                                    \"label\": \"Default\",\n                                                    \"value\": \"default\"\n                                                },\n                                                {\n                                                    \"label\": \"Primary\",\n                                                    \"value\": \"primary\"\n                                                },\n                                                {\n                                                    \"label\": \"Info\",\n                                                    \"value\": \"info\"\n                                                },\n                                                {\n                                                    \"label\": \"Success\",\n                                                    \"value\": \"success\"\n                                                },\n                                                {\n                                                    \"label\": \"Danger\",\n                                                    \"value\": \"danger\"\n                                                },\n                                                {\n                                                    \"label\": \"Warning\",\n                                                    \"value\": \"warning\"\n                                                }\n                                            ]\n                                        },\n                                        \"key\": \"theme\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Initially Collapsed\",\n                                        \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                                        \"tableView\": false,\n                                        \"defaultValue\": false,\n                                        \"key\": \"collapsePanel\",\n                                        \"type\": \"checkbox\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Filters\",\n                        \"collapsible\": false,\n                        \"key\": \"filtersPanel\",\n                        \"conditional\": {\n                            \"show\": true,\n                            \"conjunction\": \"all\",\n                            \"conditions\": [\n                                {\n                                    \"component\": \"enableControls\",\n                                    \"operator\": \"isEqual\",\n                                    \"value\": true\n                                }\n                            ]\n                        },\n                        \"type\": \"panel\",\n                        \"label\": \"Page 3\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version7\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filtersenable end users of this report to view any subset of data needed at runtime. Customize Filtersfor your Report Below.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportingSettings5\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Number Of FiltersPer Row\",\n                                \"widget\": \"choicesjs\",\n                                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel FiltersSection.\",\n                                \"tableView\": false,\n                                \"defaultValue\": 2,\n                                \"data\": {\n                                    \"values\": [\n                                        {\n                                            \"label\": \"1\",\n                                            \"value\": \"1\"\n                                        },\n                                        {\n                                            \"label\": \"2\",\n                                            \"value\": \"2\"\n                                        },\n                                        {\n                                            \"label\": \"3\",\n                                            \"value\": \"3\"\n                                        },\n                                        {\n                                            \"label\": \"4\",\n                                            \"value\": \"4\"\n                                        }\n                                    ]\n                                },\n                                \"dataType\": \"number\",\n                                \"key\": \"filtersPerRow\",\n                                \"type\": \"select\",\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Filter Label Position\",\n                                \"widget\": \"choicesjs\",\n                                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                                \"tableView\": false,\n                                \"defaultValue\": \"top\",\n                                \"data\": {\n                                    \"values\": [\n                                        {\n                                            \"label\": \"Top\",\n                                            \"value\": \"top\"\n                                        },\n                                        {\n                                            \"label\": \"Left\",\n                                            \"value\": \"left-left\"\n                                        },\n                                        {\n                                            \"label\": \"Right\",\n                                            \"value\": \"right-right\"\n                                        }\n                                    ]\n                                },\n                                \"key\": \"filterLabelPosition\",\n                                \"type\": \"select\",\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Control Panel Filters\",\n                                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                                \"reorder\": true,\n                                \"addAnotherPosition\": \"bottom\",\n                                \"layoutFixed\": false,\n                                \"enableRowGroups\": false,\n                                \"initEmpty\": true,\n                                \"tableView\": false,\n                                \"key\": \"filters\",\n                                \"type\": \"datagrid\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Field\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"values = instance.root.data.columnsList;\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"refreshOn\": \"columnsList\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"field\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Filter Type\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"filterType\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Filter Title\",\n                                        \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"key\": \"filterTitle\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Actions\",\n                        \"collapsible\": false,\n                        \"key\": \"actionsPanel\",\n                        \"conditional\": {\n                            \"show\": true,\n                            \"conjunction\": \"all\",\n                            \"conditions\": [\n                                {\n                                    \"component\": \"enableControls\",\n                                    \"operator\": \"isEqual\",\n                                    \"value\": true\n                                }\n                            ]\n                        },\n                        \"type\": \"panel\",\n                        \"label\": \"Page 4\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version8\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportingSettings6\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Actions\",\n                                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                                \"tableView\": false,\n                                \"templates\": {\n                                    \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                    \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                                },\n                                \"addAnother\": \"Add Action\",\n                                \"rowDrafts\": false,\n                                \"key\": \"actions\",\n                                \"type\": \"editgrid\",\n                                \"displayAsTable\": false,\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Title\",\n                                        \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"title\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Type\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": true,\n                                        \"data\": {\n                                            \"values\": [\n                                                {\n                                                    \"label\": \"Export CSV\",\n                                                    \"value\": \"csv\"\n                                                },\n                                                {\n                                                    \"label\": \"Download PDF\",\n                                                    \"value\": \"pdf\"\n                                                },\n                                                {\n                                                    \"label\": \"Custom\",\n                                                    \"value\": \"custom\"\n                                                }\n                                            ]\n                                        },\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"type\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Apply action for:\",\n                                        \"optionsLabelPosition\": \"right\",\n                                        \"inline\": true,\n                                        \"tableView\": false,\n                                        \"defaultValue\": \"availableColumns\",\n                                        \"values\": [\n                                            {\n                                                \"label\": \"All Available Columns\",\n                                                \"value\": \"availableColumns\",\n                                                \"shortcut\": \"\"\n                                            },\n                                            {\n                                                \"label\": \"Visible Columns\",\n                                                \"value\": \"visibleColumns\",\n                                                \"shortcut\": \"\"\n                                            }\n                                        ],\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"applyFor\",\n                                        \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                                        \"type\": \"radio\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Print Limit\",\n                                        \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"mask\": false,\n                                        \"tableView\": false,\n                                        \"delimiter\": false,\n                                        \"requireDecimal\": false,\n                                        \"inputFormat\": \"plain\",\n                                        \"truncateMultipleSpaces\": false,\n                                        \"validateWhenHidden\": false,\n                                        \"key\": \"printLimit\",\n                                        \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                                        \"type\": \"number\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Custom JS Code\",\n                                        \"placeholder\": \"promise = Promise.resolve(true);\",\n                                        \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"editor\": \"ace\",\n                                        \"autoExpand\": false,\n                                        \"tableView\": false,\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"customCode\",\n                                        \"conditional\": {\n                                            \"conjunction\": \"all\"\n                                        },\n                                        \"customConditional\": \"show = row.type === 'custom';\",\n                                        \"type\": \"textarea\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"HTML\",\n                                        \"attrs\": [\n                                            {\n                                                \"attr\": \"\",\n                                                \"value\": \"\"\n                                            }\n                                        ],\n                                        \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                                        \"refreshOnChange\": false,\n                                        \"key\": \"html\",\n                                        \"customConditional\": \"show = row.type === 'custom';\",\n                                        \"type\": \"htmlelement\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    }\n                                ]\n                            }\n                        ]\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"administrator\",\n                            \"authenticated\",\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"administrator\",\n                            \"authenticated\",\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"properties\": {\n                    \"version\": 9\n                },\n                \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            },\n            \"admin\": {\n                \"title\": \"Admin\",\n                \"type\": \"resource\",\n                \"name\": \"admin\",\n                \"path\": \"admin\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": true,\n                        \"required\": true,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"button\",\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"tableView\": false,\n                        \"label\": \"Submit\",\n                        \"input\": true\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\",\n                            \"authenticated\",\n                            \"administrator\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"update_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"delete_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"read_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"update_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"delete_own\",\n                        \"roles\": []\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            },\n            \"user\": {\n                \"title\": \"User\",\n                \"type\": \"resource\",\n                \"name\": \"user\",\n                \"path\": \"user\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": true,\n                        \"required\": true,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"button\",\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"tableView\": false,\n                        \"label\": \"Submit\",\n                        \"input\": true\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\",\n                            \"authenticated\",\n                            \"administrator\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"update_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"delete_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"read_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"update_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"delete_own\",\n                        \"roles\": []\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            }\n        },\n        \"actions\": {\n            \"reportingui:save\": {\n                \"title\": \"Save Submission\",\n                \"name\": \"save\",\n                \"form\": \"reportingui\",\n                \"priority\": 10,\n                \"method\": [\n                    \"create\",\n                    \"update\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"admin:role\": {\n                \"title\": \"Role Assignment\",\n                \"name\": \"role\",\n                \"form\": \"admin\",\n                \"settings\": {\n                    \"association\": \"new\",\n                    \"type\": \"add\",\n                    \"role\": \"administrator\"\n                },\n                \"priority\": 1,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"after\"\n                ]\n            },\n            \"admin:save\": {\n                \"title\": \"Save Submission\",\n                \"name\": \"save\",\n                \"form\": \"admin\",\n                \"priority\": 10,\n                \"method\": [\n                    \"create\",\n                    \"update\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"user:role\": {\n                \"title\": \"Role Assignment\",\n                \"name\": \"role\",\n                \"form\": \"user\",\n                \"settings\": {\n                    \"association\": \"new\",\n                    \"type\": \"add\",\n                    \"role\": \"authenticated\"\n                },\n                \"priority\": 1,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"after\"\n                ]\n            },\n            \"user:save\": {\n                \"title\": \"Save Submission\",\n                \"name\": \"save\",\n                \"form\": \"user\",\n                \"priority\": 10,\n                \"method\": [\n                    \"create\",\n                    \"update\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"userLogin:login\": {\n                \"title\": \"Login\",\n                \"name\": \"login\",\n                \"form\": \"userLogin\",\n                \"settings\": {\n                    \"resources\": [\n                        \"user\"\n                    ],\n                    \"username\": \"email\",\n                    \"password\": \"password\",\n                    \"allowedAttempts\": 5,\n                    \"attemptWindow\": 30,\n                    \"lockWait\": 1800\n                },\n                \"priority\": 2,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"userRegister:save\": {\n                \"title\": \"Save Submission\",\n                \"name\": \"save\",\n                \"form\": \"userRegister\",\n                \"settings\": {\n                    \"resource\": \"user\",\n                    \"fields\": {\n                        \"email\": \"email\",\n                        \"password\": \"password\"\n                    }\n                },\n                \"priority\": 11,\n                \"method\": [\n                    \"create\",\n                    \"update\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"userRegister:login\": {\n                \"title\": \"Login\",\n                \"name\": \"login\",\n                \"form\": \"userRegister\",\n                \"settings\": {\n                    \"resources\": [\n                        \"user\"\n                    ],\n                    \"username\": \"email\",\n                    \"password\": \"password\"\n                },\n                \"priority\": 2,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"adminLogin:login\": {\n                \"title\": \"Login\",\n                \"name\": \"login\",\n                \"form\": \"adminLogin\",\n                \"settings\": {\n                    \"resources\": [\n                        \"admin\"\n                    ],\n                    \"username\": \"email\",\n                    \"password\": \"password\",\n                    \"allowedAttempts\": 5,\n                    \"attemptWindow\": 30,\n                    \"lockWait\": 1800\n                },\n                \"priority\": 2,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            }\n        },\n        \"revisions\": {},\n        \"forms\": {\n            \"userLogin\": {\n                \"title\": \"User Login\",\n                \"type\": \"form\",\n                \"name\": \"userLogin\",\n                \"path\": \"user/login\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": false,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"lockKey\": true,\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"lockKey\": true,\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"button\",\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"tableView\": false,\n                        \"label\": \"Submit\",\n                        \"input\": true\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            },\n            \"userRegister\": {\n                \"title\": \"User Register\",\n                \"type\": \"form\",\n                \"name\": \"userRegister\",\n                \"path\": \"user/register\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": false,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"lockKey\": true,\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"lockKey\": true,\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"label\": \"Submit\",\n                        \"input\": true,\n                        \"type\": \"button\"\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            },\n            \"adminLogin\": {\n                \"title\": \"Admin Login\",\n                \"type\": \"form\",\n                \"name\": \"adminLogin\",\n                \"path\": \"admin/login\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": false,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"lockKey\": true,\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"lockKey\": true,\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"button\",\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"tableView\": false,\n                        \"label\": \"Submit\",\n                        \"input\": true\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            }\n        }\n    },\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"_id\": \"69d65b8142ae1f2fed8c5f97\",\n    \"created\": \"2026-04-08T13:43:29.701Z\",\n    \"modified\": \"2026-04-08T13:43:29.705Z\"\n}"}],"_postman_id":"8efe53be-a137-43fa-b581-296c4520bf4f"},{"name":"Get all versions","event":[{"listen":"test","script":{"id":"e418d50c-ff02-4911-aae8-b304a270cd23","exec":["pm.environment.set(' tagId ', pm.response.json()[0]._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"858df641-bcdc-419f-8910-3f648e8258af","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"{{ baseUrl }}/project/{{ projectId }}/tag?sort=-created&sort=-created","description":"<p>This API is an <strong>Index API</strong> that returns all of the versions available for project. The projectId should be the project that contains all of the versions (which is typically the authoring project).</p>\n","urlObject":{"path":["project","{{ projectId }}","tag"],"host":["{{ baseUrl }}"],"query":[{"key":"sort","value":"-created"},{"key":"sort","value":"-created"}],"variable":[]}},"response":[{"id":"53b25a1f-47f5-4bbe-adb0-5a9bd3801812","name":"Get all versions","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":{"raw":"https://forms.example.com/project/69dfb6dcbb04c38a91029771/tag?sort=-created&sort=-created","protocol":"https","host":["forms","example","com"],"path":["project","69dfb6dcbb04c38a91029771","tag"],"query":[{"key":"sort","value":"-created"},{"key":"sort","value":"-created"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:43:45 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"229"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"e5-TyyZ3WOSGr7QKYJpJO2f55HD7Ys\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65b8142ae1f2fed8c5f97\",\n        \"project\": \"69d6527d42ae1f2fed8c5627\",\n        \"tag\": \"1.0.0\",\n        \"description\": \"Initial Version\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"created\": \"2026-04-08T13:43:29.701Z\",\n        \"modified\": \"2026-04-08T13:43:29.705Z\"\n    }\n]"}],"_postman_id":"858df641-bcdc-419f-8910-3f648e8258af"},{"name":"Get a single version","id":"c13f6da0-9de5-4324-b98e-b99566c35331","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"{{ baseUrl }}/project/{{ projectId }}/tag/{{ tagId }}","description":"<p>This API is an <strong>Index API</strong> that returns all of the versions available for project. The projectId should be the project that contains all of the versions (which is typically the authoring project).</p>\n","urlObject":{"path":["project","{{ projectId }}","tag","{{ tagId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"a9d33100-8677-4559-839e-0e8f53a8bc7e","name":"Get a single version","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"https://forms.example.com/project/69dfb6dcbb04c38a91029771/tag/69d65b8142ae1f2fed8c5f97"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:44:32 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"52281"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"cc39-iIJfy4Bkph6jRmALvoD8zwHPFBE\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d65b8142ae1f2fed8c5f97\",\n    \"project\": \"69d6527d42ae1f2fed8c5627\",\n    \"tag\": \"1.0.0\",\n    \"description\": \"Initial Version\",\n    \"template\": {\n        \"title\": \"Example Project Updated\",\n        \"version\": \"2.0.0\",\n        \"description\": \"This is an updated project.\",\n        \"name\": \"example\",\n        \"roles\": {\n            \"administrator\": {\n                \"title\": \"Administrator\",\n                \"description\": \"A role for Administrative Users.\",\n                \"admin\": true,\n                \"default\": false\n            },\n            \"authenticated\": {\n                \"title\": \"Authenticated\",\n                \"description\": \"A role for Authenticated Users.\",\n                \"admin\": false,\n                \"default\": false\n            },\n            \"anonymous\": {\n                \"title\": \"Anonymous\",\n                \"description\": \"A role for Anonymous Users.\",\n                \"admin\": false,\n                \"default\": true\n            }\n        },\n        \"reports\": {},\n        \"access\": [],\n        \"tag\": \"1.0.0\",\n        \"resources\": {\n            \"reportingui\": {\n                \"title\": \"Reporting UI\",\n                \"type\": \"resource\",\n                \"name\": \"reportingui\",\n                \"path\": \"reportingui\",\n                \"pdfComponents\": [],\n                \"display\": \"wizard\",\n                \"tags\": [\n                    \"noBuilderResource\"\n                ],\n                \"settings\": {\n                    \"wizardHeaderType\": \"Vertical\"\n                },\n                \"components\": [\n                    {\n                        \"title\": \"Basic Settings\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"basic\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 6\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version1\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                                \"label\": \"Report Setup - Basic Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportSettings\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Columns\",\n                                \"columns\": [\n                                    {\n                                        \"components\": [\n                                            {\n                                                \"label\": \"Report Title\",\n                                                \"placeholder\": \"Report Title\",\n                                                \"applyMaskOn\": \"change\",\n                                                \"tableView\": true,\n                                                \"validate\": {\n                                                    \"required\": true\n                                                },\n                                                \"key\": \"title\",\n                                                \"type\": \"textfield\",\n                                                \"input\": true\n                                            }\n                                        ],\n                                        \"width\": 6,\n                                        \"offset\": 0,\n                                        \"push\": 0,\n                                        \"pull\": 0,\n                                        \"size\": \"md\",\n                                        \"currentWidth\": 6\n                                    },\n                                    {\n                                        \"components\": [\n                                            {\n                                                \"label\": \"Report Name\",\n                                                \"placeholder\": \"Report Name\",\n                                                \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                                                \"applyMaskOn\": \"change\",\n                                                \"tableView\": true,\n                                                \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                                                \"allowCalculateOverride\": true,\n                                                \"validate\": {\n                                                    \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                    \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                },\n                                                \"unique\": true,\n                                                \"key\": \"name\",\n                                                \"logic\": [\n                                                    {\n                                                        \"name\": \"make required\",\n                                                        \"trigger\": {\n                                                            \"type\": \"javascript\",\n                                                            \"javascript\": \"result = data.title;\"\n                                                        },\n                                                        \"actions\": [\n                                                            {\n                                                                \"name\": \"make required\",\n                                                                \"type\": \"property\",\n                                                                \"property\": {\n                                                                    \"label\": \"Required\",\n                                                                    \"value\": \"validate.required\",\n                                                                    \"type\": \"boolean\"\n                                                                },\n                                                                \"state\": true\n                                                            }\n                                                        ]\n                                                    }\n                                                ],\n                                                \"type\": \"textfield\",\n                                                \"input\": true\n                                            }\n                                        ],\n                                        \"width\": 6,\n                                        \"offset\": 0,\n                                        \"push\": 0,\n                                        \"pull\": 0,\n                                        \"size\": \"md\",\n                                        \"currentWidth\": 6\n                                    }\n                                ],\n                                \"key\": \"columns1\",\n                                \"type\": \"columns\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Report Forms\",\n                                \"persistent\": false,\n                                \"trigger\": {\n                                    \"init\": false,\n                                    \"server\": false\n                                },\n                                \"refreshOn\": \"forms\",\n                                \"refreshOnEvent\": \"formsSet\",\n                                \"event\": \"reportingFormsUpdated\",\n                                \"dataSrc\": \"url\",\n                                \"fetch\": {\n                                    \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                                    \"method\": \"get\",\n                                    \"headers\": [\n                                        {\n                                            \"key\": \"\",\n                                            \"value\": \"\"\n                                        }\n                                    ],\n                                    \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                                    \"forwardHeaders\": false,\n                                    \"authenticate\": true\n                                },\n                                \"allowCaching\": true,\n                                \"key\": \"reportingForms\",\n                                \"type\": \"datasource\",\n                                \"indexeddb\": {},\n                                \"input\": true,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Container\",\n                                \"tableView\": false,\n                                \"key\": \"gridSettings\",\n                                \"type\": \"container\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                                        \"label\": \"Reporting Grid Basic Settings\",\n                                        \"refreshOnChange\": false,\n                                        \"key\": \"basicReportingSettings3\",\n                                        \"type\": \"content\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Items per page\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                                        \"tableView\": true,\n                                        \"defaultValue\": 10,\n                                        \"data\": {\n                                            \"values\": [\n                                                {\n                                                    \"label\": \"5\",\n                                                    \"value\": 5\n                                                },\n                                                {\n                                                    \"label\": \"10\",\n                                                    \"value\": 10\n                                                },\n                                                {\n                                                    \"label\": \"25\",\n                                                    \"value\": 25\n                                                },\n                                                {\n                                                    \"label\": \"50\",\n                                                    \"value\": 50\n                                                },\n                                                {\n                                                    \"label\": \"100\",\n                                                    \"value\": 100\n                                                },\n                                                {\n                                                    \"label\": \"All\",\n                                                    \"value\": -1\n                                                }\n                                            ]\n                                        },\n                                        \"key\": \"itemsPerPage\",\n                                        \"type\": \"select\",\n                                        \"input\": true,\n                                        \"weight\": 442\n                                    },\n                                    {\n                                        \"label\": \"Enable to Store Request Result in the Cache\",\n                                        \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                                        \"tableView\": false,\n                                        \"defaultValue\": true,\n                                        \"key\": \"allowCaching\",\n                                        \"type\": \"checkbox\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Cell max width\",\n                                        \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"key\": \"cellMaxWidth\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Source Forms\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"dataSourcePanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 1\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version2\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                                \"label\": \"Basic Report Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"sourceFormsSettings\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Choose from the Forms within this Project:\",\n                                \"widget\": \"choicesjs\",\n                                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                                \"tableView\": false,\n                                \"multiple\": true,\n                                \"dataSrc\": \"url\",\n                                \"data\": {\n                                    \"url\": \"{{Formio.projectUrl}}/form\",\n                                    \"headers\": [\n                                        {\n                                            \"key\": \"\",\n                                            \"value\": \"\"\n                                        }\n                                    ]\n                                },\n                                \"valueProperty\": \"_id\",\n                                \"template\": \"<span>{{ item.title }}</span>\",\n                                \"validate\": {\n                                    \"required\": true,\n                                    \"select\": false\n                                },\n                                \"key\": \"forms\",\n                                \"type\": \"select\",\n                                \"disableLimit\": false,\n                                \"searchField\": \"title__regex\",\n                                \"noRefreshOnScroll\": false,\n                                \"authenticate\": true,\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Forms Connections\",\n                                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                                \"tableView\": false,\n                                \"templates\": {\n                                    \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                    \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                                },\n                                \"addAnother\": \"Add Connection\",\n                                \"redrawOn\": \"reportingForms\",\n                                \"validate\": {\n                                    \"required\": true\n                                },\n                                \"rowDrafts\": false,\n                                \"key\": \"connections\",\n                                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                                \"logic\": [\n                                    {\n                                        \"name\": \"min max validation\",\n                                        \"trigger\": {\n                                            \"type\": \"javascript\",\n                                            \"javascript\": \"result = !!data.reportingForms;\"\n                                        },\n                                        \"actions\": [\n                                            {\n                                                \"name\": \"min max validation\",\n                                                \"type\": \"mergeComponentSchema\",\n                                                \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                                            }\n                                        ]\n                                    }\n                                ],\n                                \"type\": \"editgrid\",\n                                \"displayAsTable\": false,\n                                \"reorder\": false,\n                                \"addAnotherPosition\": \"bottom\",\n                                \"layoutFixed\": false,\n                                \"enableRowGroups\": false,\n                                \"initEmpty\": false,\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Data Source Connections\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Base Form\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"placeholder\": \"Source Form\",\n                                                        \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                                                        \"tableView\": true,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"baseForm\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    },\n                                                    {\n                                                        \"label\": \"Connecting field of base Form\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"placeholder\": \"Connecting Field\",\n                                                        \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                                                        \"disabled\": true,\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"baseFormField\",\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"enable\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.baseForm\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"enable\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Disabled\",\n                                                                            \"value\": \"disabled\",\n                                                                            \"type\": \"boolean\"\n                                                                        },\n                                                                        \"state\": false\n                                                                    }\n                                                                ]\n                                                            },\n                                                            {\n                                                                \"name\": \"clear value\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = !row.baseForm\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"clear value\",\n                                                                        \"type\": \"customAction\",\n                                                                        \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ],\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    },\n                                                    {\n                                                        \"label\": \"Base Form path to connecting value\",\n                                                        \"placeholder\": \"Path\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": false,\n                                                        \"key\": \"baseFormValuePath\",\n                                                        \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Joining Form\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"placeholder\": \"Source Form\",\n                                                        \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                                                        \"tableView\": true,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"refreshOn\": \"connections.baseForm\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"joiningForm\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    },\n                                                    {\n                                                        \"label\": \"Connecting field of joining Form\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"placeholder\": \"Connecting Field\",\n                                                        \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                                                        \"disabled\": true,\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"joiningFormField\",\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"enable\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.joiningForm\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"enable\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Disabled\",\n                                                                            \"value\": \"disabled\",\n                                                                            \"type\": \"boolean\"\n                                                                        },\n                                                                        \"state\": false\n                                                                    }\n                                                                ]\n                                                            },\n                                                            {\n                                                                \"name\": \"clear value\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = !row.joiningForm\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"clear value\",\n                                                                        \"type\": \"customAction\",\n                                                                        \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ],\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    },\n                                                    {\n                                                        \"label\": \"Joining Form path to connecting value\",\n                                                        \"placeholder\": \"Path\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": false,\n                                                        \"key\": \"joiningFormValuePath\",\n                                                        \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"hideLabel\": true,\n                                        \"key\": \"columns\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Calculated Columns\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"extraColumnsPanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 7\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version3\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"calculatedColumnsSettingsDescription\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Calculated Extra Columns\",\n                                \"hideLabel\": true,\n                                \"tableView\": false,\n                                \"templates\": {\n                                    \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                    \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                                },\n                                \"addAnother\": \"Add Column\",\n                                \"redrawOn\": \"reportingForms\",\n                                \"rowDrafts\": false,\n                                \"key\": \"calculatedColumns\",\n                                \"type\": \"editgrid\",\n                                \"displayAsTable\": false,\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Column Title\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": true,\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"name\",\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Column Key\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": false,\n                                                        \"calculateValue\": \"value = _.camelCase(row.name);\",\n                                                        \"allowCalculateOverride\": true,\n                                                        \"validate\": {\n                                                            \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                            \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                                                            \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                        },\n                                                        \"key\": \"key\",\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"make required\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.title;\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"make required\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Required\",\n                                                                            \"value\": \"validate.required\",\n                                                                            \"type\": \"boolean\"\n                                                                        },\n                                                                        \"state\": true\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ],\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"key\": \"columns\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Operator\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tooltip\": \"Select an operator to calculate the column value.\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"operator\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Arguments\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": false,\n                                        \"multiple\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"args\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Argument\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": false,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"arg\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Arguments\",\n                                        \"reorder\": false,\n                                        \"addAnotherPosition\": \"bottom\",\n                                        \"layoutFixed\": false,\n                                        \"enableRowGroups\": false,\n                                        \"initEmpty\": false,\n                                        \"tableView\": false,\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"concatArgs\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"datagrid\",\n                                        \"input\": true,\n                                        \"components\": [\n                                            {\n                                                \"label\": \"Field\",\n                                                \"widget\": \"choicesjs\",\n                                                \"tableView\": false,\n                                                \"dataSrc\": \"custom\",\n                                                \"data\": {\n                                                    \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                                                },\n                                                \"valueProperty\": \"value\",\n                                                \"validate\": {\n                                                    \"required\": true\n                                                },\n                                                \"key\": \"field\",\n                                                \"type\": \"select\",\n                                                \"input\": true\n                                            },\n                                            {\n                                                \"label\": \"Connector\",\n                                                \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                                                \"applyMaskOn\": \"change\",\n                                                \"tableView\": false,\n                                                \"key\": \"connector\",\n                                                \"type\": \"textfield\",\n                                                \"input\": true\n                                            }\n                                        ]\n                                    },\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Dividend\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"dividend\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Divisor\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"divisor\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"key\": \"divideArgs\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Minuend\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"minuend\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Subtrahend\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"subtrahend\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"key\": \"subtractArgs\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Start Date\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"startDate\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 4,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 4\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"End Date\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"endDate\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 4,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 4\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Unit\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                                                        \"tableView\": false,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"data\": {\n                                                            \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                                                        },\n                                                        \"valueProperty\": \"value\",\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"unit\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"size\": \"md\",\n                                                \"width\": 4,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"currentWidth\": 4\n                                            }\n                                        ],\n                                        \"key\": \"dateDiffArgs\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Date\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": false,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"date\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Decimal Places\",\n                                        \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"mask\": false,\n                                        \"tableView\": false,\n                                        \"delimiter\": false,\n                                        \"requireDecimal\": false,\n                                        \"inputFormat\": \"plain\",\n                                        \"truncateMultipleSpaces\": false,\n                                        \"key\": \"decimalLimit\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"number\",\n                                        \"input\": true\n                                    }\n                                ]\n                            },\n                            {\n                                \"label\": \"Container\",\n                                \"tableView\": false,\n                                \"key\": \"calculatedColumnsSettings\",\n                                \"type\": \"container\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                                        \"label\": \"Reporting Grid Basic Settings\",\n                                        \"refreshOnChange\": false,\n                                        \"key\": \"calcSettingsDescription\",\n                                        \"type\": \"content\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Use Thousands Separator\",\n                                        \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                                        \"tableView\": false,\n                                        \"defaultValue\": false,\n                                        \"key\": \"thousandsSeparator\",\n                                        \"type\": \"checkbox\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Aggregation\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"groupingPanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 8\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version4\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                                \"label\": \"Content\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"content\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Fields to group by\",\n                                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                                \"reorder\": false,\n                                \"addAnother\": \"Add Field\",\n                                \"addAnotherPosition\": \"bottom\",\n                                \"layoutFixed\": false,\n                                \"enableRowGroups\": false,\n                                \"initEmpty\": true,\n                                \"tableView\": false,\n                                \"redrawOn\": \"reportingForms\",\n                                \"key\": \"groups.groupingFields\",\n                                \"type\": \"datagrid\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Field\",\n                                        \"widget\": \"choicesjs\",\n                                        \"placeholder\": \"Grouping Field\",\n                                        \"hideLabel\": true,\n                                        \"tableView\": false,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"field\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    }\n                                ]\n                            },\n                            {\n                                \"label\": \"Calculated Aggregation Columns\",\n                                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                                \"tableView\": false,\n                                \"templates\": {\n                                    \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                    \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                                },\n                                \"addAnother\": \"Add Column\",\n                                \"rowDrafts\": false,\n                                \"key\": \"groups.calculatedColumns\",\n                                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                                \"type\": \"editgrid\",\n                                \"displayAsTable\": false,\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Columns\",\n                                        \"columns\": [\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Column Title\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": true,\n                                                        \"validate\": {\n                                                            \"required\": true\n                                                        },\n                                                        \"key\": \"name\",\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            },\n                                            {\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"Column Key\",\n                                                        \"applyMaskOn\": \"change\",\n                                                        \"tableView\": false,\n                                                        \"calculateValue\": \"value = _.camelCase(row.name);\",\n                                                        \"allowCalculateOverride\": true,\n                                                        \"validate\": {\n                                                            \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                                                            \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                                                            \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                                                        },\n                                                        \"key\": \"key\",\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"make required\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.title;\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"make required\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Required\",\n                                                                            \"value\": \"validate.required\",\n                                                                            \"type\": \"boolean\"\n                                                                        },\n                                                                        \"state\": true\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ],\n                                                        \"type\": \"textfield\",\n                                                        \"input\": true\n                                                    }\n                                                ],\n                                                \"width\": 6,\n                                                \"offset\": 0,\n                                                \"push\": 0,\n                                                \"pull\": 0,\n                                                \"size\": \"md\",\n                                                \"currentWidth\": 6\n                                            }\n                                        ],\n                                        \"key\": \"columns\",\n                                        \"type\": \"columns\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Operator\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tooltip\": \"Select operator to calculate column value\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"operator\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Argument\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": false,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"argument\",\n                                        \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Decimal Places\",\n                                        \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"mask\": false,\n                                        \"tableView\": false,\n                                        \"delimiter\": false,\n                                        \"requireDecimal\": false,\n                                        \"inputFormat\": \"plain\",\n                                        \"truncateMultipleSpaces\": false,\n                                        \"key\": \"decimalLimit\",\n                                        \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                                        \"type\": \"number\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Columns\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"columnsPanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 2\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version5\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportingSettings2\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Columns List\",\n                                \"persistent\": false,\n                                \"redrawOn\": \"reportingForms\",\n                                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                                \"key\": \"columnsList\",\n                                \"type\": \"hidden\",\n                                \"input\": true,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Report Type\",\n                                \"persistent\": false,\n                                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                                \"key\": \"reportType\",\n                                \"type\": \"hidden\",\n                                \"input\": true,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Available Columns\",\n                                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                                \"reorder\": true,\n                                \"addAnother\": \"Add Column\",\n                                \"addAnotherPosition\": \"bottom\",\n                                \"layoutFixed\": false,\n                                \"enableRowGroups\": false,\n                                \"initEmpty\": true,\n                                \"tableView\": false,\n                                \"validate\": {\n                                    \"required\": true\n                                },\n                                \"key\": \"availableColumns\",\n                                \"logic\": [\n                                    {\n                                        \"name\": \"clear Columns\",\n                                        \"trigger\": {\n                                            \"type\": \"javascript\",\n                                            \"javascript\": \"result = data.reportType?.typeChanged;\"\n                                        },\n                                        \"actions\": [\n                                            {\n                                                \"name\": \"clear\",\n                                                \"type\": \"customAction\",\n                                                \"customAction\": \"instance.resetValue();\"\n                                            }\n                                        ]\n                                    }\n                                ],\n                                \"type\": \"datagrid\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Column\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"refreshOn\": \"columnsList\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"column\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Display Title\",\n                                        \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"key\": \"displayTitle\",\n                                        \"customConditional\": \"show = row.column && row.column.formId;\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    }\n                                ]\n                            },\n                            {\n                                \"label\": \"Default Columns\",\n                                \"widget\": \"choicesjs\",\n                                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                                \"tableView\": false,\n                                \"multiple\": true,\n                                \"dataSrc\": \"custom\",\n                                \"data\": {\n                                    \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                                },\n                                \"valueProperty\": \"value\",\n                                \"refreshOn\": \"availableColumns\",\n                                \"key\": \"defaultColumns\",\n                                \"logic\": [\n                                    {\n                                        \"name\": \"clear Columns\",\n                                        \"trigger\": {\n                                            \"type\": \"javascript\",\n                                            \"javascript\": \"result = data.reportType?.typeChanged;\"\n                                        },\n                                        \"actions\": [\n                                            {\n                                                \"name\": \"clear\",\n                                                \"type\": \"customAction\",\n                                                \"customAction\": \"instance.resetValue();\"\n                                            }\n                                        ]\n                                    }\n                                ],\n                                \"type\": \"select\",\n                                \"input\": true\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Control Panel\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"collapsible\": false,\n                        \"key\": \"controlsPanel\",\n                        \"type\": \"panel\",\n                        \"label\": \"Page 9\",\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version6\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportingSettings7\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Enable Control Panel\",\n                                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                                \"tableView\": false,\n                                \"defaultValue\": false,\n                                \"key\": \"enableControls\",\n                                \"type\": \"checkbox\",\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Controls Settings\",\n                                \"tableView\": false,\n                                \"key\": \"controlsSettings\",\n                                \"customConditional\": \"show = data.enableControls;\",\n                                \"type\": \"container\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                                        \"label\": \"Reporting Grid Basic Settings\",\n                                        \"refreshOnChange\": false,\n                                        \"key\": \"basicReportingSettings8\",\n                                        \"type\": \"content\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    },\n                                    {\n                                        \"label\": \"Control Panel Title\",\n                                        \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"key\": \"title\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Control Panel Theme\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": true,\n                                        \"defaultValue\": \"default\",\n                                        \"data\": {\n                                            \"values\": [\n                                                {\n                                                    \"label\": \"Default\",\n                                                    \"value\": \"default\"\n                                                },\n                                                {\n                                                    \"label\": \"Primary\",\n                                                    \"value\": \"primary\"\n                                                },\n                                                {\n                                                    \"label\": \"Info\",\n                                                    \"value\": \"info\"\n                                                },\n                                                {\n                                                    \"label\": \"Success\",\n                                                    \"value\": \"success\"\n                                                },\n                                                {\n                                                    \"label\": \"Danger\",\n                                                    \"value\": \"danger\"\n                                                },\n                                                {\n                                                    \"label\": \"Warning\",\n                                                    \"value\": \"warning\"\n                                                }\n                                            ]\n                                        },\n                                        \"key\": \"theme\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Initially Collapsed\",\n                                        \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                                        \"tableView\": false,\n                                        \"defaultValue\": false,\n                                        \"key\": \"collapsePanel\",\n                                        \"type\": \"checkbox\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Filters\",\n                        \"collapsible\": false,\n                        \"key\": \"filtersPanel\",\n                        \"conditional\": {\n                            \"show\": true,\n                            \"conjunction\": \"all\",\n                            \"conditions\": [\n                                {\n                                    \"component\": \"enableControls\",\n                                    \"operator\": \"isEqual\",\n                                    \"value\": true\n                                }\n                            ]\n                        },\n                        \"type\": \"panel\",\n                        \"label\": \"Page 3\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version7\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filtersenable end users of this report to view any subset of data needed at runtime. Customize Filtersfor your Report Below.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportingSettings5\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Number Of FiltersPer Row\",\n                                \"widget\": \"choicesjs\",\n                                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel FiltersSection.\",\n                                \"tableView\": false,\n                                \"defaultValue\": 2,\n                                \"data\": {\n                                    \"values\": [\n                                        {\n                                            \"label\": \"1\",\n                                            \"value\": \"1\"\n                                        },\n                                        {\n                                            \"label\": \"2\",\n                                            \"value\": \"2\"\n                                        },\n                                        {\n                                            \"label\": \"3\",\n                                            \"value\": \"3\"\n                                        },\n                                        {\n                                            \"label\": \"4\",\n                                            \"value\": \"4\"\n                                        }\n                                    ]\n                                },\n                                \"dataType\": \"number\",\n                                \"key\": \"filtersPerRow\",\n                                \"type\": \"select\",\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Filter Label Position\",\n                                \"widget\": \"choicesjs\",\n                                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                                \"tableView\": false,\n                                \"defaultValue\": \"top\",\n                                \"data\": {\n                                    \"values\": [\n                                        {\n                                            \"label\": \"Top\",\n                                            \"value\": \"top\"\n                                        },\n                                        {\n                                            \"label\": \"Left\",\n                                            \"value\": \"left-left\"\n                                        },\n                                        {\n                                            \"label\": \"Right\",\n                                            \"value\": \"right-right\"\n                                        }\n                                    ]\n                                },\n                                \"key\": \"filterLabelPosition\",\n                                \"type\": \"select\",\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Control Panel Filters\",\n                                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                                \"reorder\": true,\n                                \"addAnotherPosition\": \"bottom\",\n                                \"layoutFixed\": false,\n                                \"enableRowGroups\": false,\n                                \"initEmpty\": true,\n                                \"tableView\": false,\n                                \"key\": \"filters\",\n                                \"type\": \"datagrid\",\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Field\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"values = instance.root.data.columnsList;\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"refreshOn\": \"columnsList\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"field\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Filter Type\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                                        \"tableView\": true,\n                                        \"dataSrc\": \"custom\",\n                                        \"data\": {\n                                            \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                                        },\n                                        \"valueProperty\": \"value\",\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"filterType\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Filter Title\",\n                                        \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"key\": \"filterTitle\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    }\n                                ]\n                            }\n                        ]\n                    },\n                    {\n                        \"title\": \"Actions\",\n                        \"collapsible\": false,\n                        \"key\": \"actionsPanel\",\n                        \"conditional\": {\n                            \"show\": true,\n                            \"conjunction\": \"all\",\n                            \"conditions\": [\n                                {\n                                    \"component\": \"enableControls\",\n                                    \"operator\": \"isEqual\",\n                                    \"value\": true\n                                }\n                            ]\n                        },\n                        \"type\": \"panel\",\n                        \"label\": \"Page 4\",\n                        \"breadcrumbClickable\": true,\n                        \"buttonSettings\": {\n                            \"previous\": true,\n                            \"cancel\": true,\n                            \"next\": true\n                        },\n                        \"navigateOnEnter\": false,\n                        \"saveOnEnter\": false,\n                        \"scrollToTop\": false,\n                        \"input\": false,\n                        \"tableView\": false,\n                        \"components\": [\n                            {\n                                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                                \"label\": \"Content\",\n                                \"customClass\": \"text-muted\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"version8\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                                \"label\": \"Basic Reporting Settings\",\n                                \"refreshOnChange\": false,\n                                \"key\": \"basicReportingSettings6\",\n                                \"type\": \"content\",\n                                \"input\": false,\n                                \"tableView\": false\n                            },\n                            {\n                                \"label\": \"Actions\",\n                                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                                \"tableView\": false,\n                                \"templates\": {\n                                    \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                    \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                                },\n                                \"addAnother\": \"Add Action\",\n                                \"rowDrafts\": false,\n                                \"key\": \"actions\",\n                                \"type\": \"editgrid\",\n                                \"displayAsTable\": false,\n                                \"input\": true,\n                                \"components\": [\n                                    {\n                                        \"label\": \"Title\",\n                                        \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"tableView\": true,\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"title\",\n                                        \"type\": \"textfield\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Type\",\n                                        \"widget\": \"choicesjs\",\n                                        \"tableView\": true,\n                                        \"data\": {\n                                            \"values\": [\n                                                {\n                                                    \"label\": \"Export CSV\",\n                                                    \"value\": \"csv\"\n                                                },\n                                                {\n                                                    \"label\": \"Download PDF\",\n                                                    \"value\": \"pdf\"\n                                                },\n                                                {\n                                                    \"label\": \"Custom\",\n                                                    \"value\": \"custom\"\n                                                }\n                                            ]\n                                        },\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"type\",\n                                        \"type\": \"select\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Apply action for:\",\n                                        \"optionsLabelPosition\": \"right\",\n                                        \"inline\": true,\n                                        \"tableView\": false,\n                                        \"defaultValue\": \"availableColumns\",\n                                        \"values\": [\n                                            {\n                                                \"label\": \"All Available Columns\",\n                                                \"value\": \"availableColumns\",\n                                                \"shortcut\": \"\"\n                                            },\n                                            {\n                                                \"label\": \"Visible Columns\",\n                                                \"value\": \"visibleColumns\",\n                                                \"shortcut\": \"\"\n                                            }\n                                        ],\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"applyFor\",\n                                        \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                                        \"type\": \"radio\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Print Limit\",\n                                        \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"mask\": false,\n                                        \"tableView\": false,\n                                        \"delimiter\": false,\n                                        \"requireDecimal\": false,\n                                        \"inputFormat\": \"plain\",\n                                        \"truncateMultipleSpaces\": false,\n                                        \"validateWhenHidden\": false,\n                                        \"key\": \"printLimit\",\n                                        \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                                        \"type\": \"number\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"Custom JS Code\",\n                                        \"placeholder\": \"promise = Promise.resolve(true);\",\n                                        \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                                        \"applyMaskOn\": \"change\",\n                                        \"editor\": \"ace\",\n                                        \"autoExpand\": false,\n                                        \"tableView\": false,\n                                        \"validate\": {\n                                            \"required\": true\n                                        },\n                                        \"key\": \"customCode\",\n                                        \"conditional\": {\n                                            \"conjunction\": \"all\"\n                                        },\n                                        \"customConditional\": \"show = row.type === 'custom';\",\n                                        \"type\": \"textarea\",\n                                        \"input\": true\n                                    },\n                                    {\n                                        \"label\": \"HTML\",\n                                        \"attrs\": [\n                                            {\n                                                \"attr\": \"\",\n                                                \"value\": \"\"\n                                            }\n                                        ],\n                                        \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                                        \"refreshOnChange\": false,\n                                        \"key\": \"html\",\n                                        \"customConditional\": \"show = row.type === 'custom';\",\n                                        \"type\": \"htmlelement\",\n                                        \"input\": false,\n                                        \"tableView\": false\n                                    }\n                                ]\n                            }\n                        ]\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"administrator\",\n                            \"authenticated\",\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"administrator\",\n                            \"authenticated\",\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"properties\": {\n                    \"version\": 9\n                },\n                \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            },\n            \"admin\": {\n                \"title\": \"Admin\",\n                \"type\": \"resource\",\n                \"name\": \"admin\",\n                \"path\": \"admin\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": true,\n                        \"required\": true,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"button\",\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"tableView\": false,\n                        \"label\": \"Submit\",\n                        \"input\": true\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\",\n                            \"authenticated\",\n                            \"administrator\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"update_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"delete_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"read_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"update_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"delete_own\",\n                        \"roles\": []\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            },\n            \"user\": {\n                \"title\": \"User\",\n                \"type\": \"resource\",\n                \"name\": \"user\",\n                \"path\": \"user\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": true,\n                        \"required\": true,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"button\",\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"tableView\": false,\n                        \"label\": \"Submit\",\n                        \"input\": true\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\",\n                            \"authenticated\",\n                            \"administrator\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"update_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"delete_all\",\n                        \"roles\": [\n                            \"administrator\"\n                        ]\n                    },\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"read_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"update_own\",\n                        \"roles\": []\n                    },\n                    {\n                        \"type\": \"delete_own\",\n                        \"roles\": []\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            }\n        },\n        \"actions\": {\n            \"reportingui:save\": {\n                \"title\": \"Save Submission\",\n                \"name\": \"save\",\n                \"form\": \"reportingui\",\n                \"priority\": 10,\n                \"method\": [\n                    \"create\",\n                    \"update\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"admin:role\": {\n                \"title\": \"Role Assignment\",\n                \"name\": \"role\",\n                \"form\": \"admin\",\n                \"settings\": {\n                    \"association\": \"new\",\n                    \"type\": \"add\",\n                    \"role\": \"administrator\"\n                },\n                \"priority\": 1,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"after\"\n                ]\n            },\n            \"admin:save\": {\n                \"title\": \"Save Submission\",\n                \"name\": \"save\",\n                \"form\": \"admin\",\n                \"priority\": 10,\n                \"method\": [\n                    \"create\",\n                    \"update\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"user:role\": {\n                \"title\": \"Role Assignment\",\n                \"name\": \"role\",\n                \"form\": \"user\",\n                \"settings\": {\n                    \"association\": \"new\",\n                    \"type\": \"add\",\n                    \"role\": \"authenticated\"\n                },\n                \"priority\": 1,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"after\"\n                ]\n            },\n            \"user:save\": {\n                \"title\": \"Save Submission\",\n                \"name\": \"save\",\n                \"form\": \"user\",\n                \"priority\": 10,\n                \"method\": [\n                    \"create\",\n                    \"update\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"userLogin:login\": {\n                \"title\": \"Login\",\n                \"name\": \"login\",\n                \"form\": \"userLogin\",\n                \"settings\": {\n                    \"resources\": [\n                        \"user\"\n                    ],\n                    \"username\": \"email\",\n                    \"password\": \"password\",\n                    \"allowedAttempts\": 5,\n                    \"attemptWindow\": 30,\n                    \"lockWait\": 1800\n                },\n                \"priority\": 2,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"userRegister:save\": {\n                \"title\": \"Save Submission\",\n                \"name\": \"save\",\n                \"form\": \"userRegister\",\n                \"settings\": {\n                    \"resource\": \"user\",\n                    \"fields\": {\n                        \"email\": \"email\",\n                        \"password\": \"password\"\n                    }\n                },\n                \"priority\": 11,\n                \"method\": [\n                    \"create\",\n                    \"update\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"userRegister:login\": {\n                \"title\": \"Login\",\n                \"name\": \"login\",\n                \"form\": \"userRegister\",\n                \"settings\": {\n                    \"resources\": [\n                        \"user\"\n                    ],\n                    \"username\": \"email\",\n                    \"password\": \"password\"\n                },\n                \"priority\": 2,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            },\n            \"adminLogin:login\": {\n                \"title\": \"Login\",\n                \"name\": \"login\",\n                \"form\": \"adminLogin\",\n                \"settings\": {\n                    \"resources\": [\n                        \"admin\"\n                    ],\n                    \"username\": \"email\",\n                    \"password\": \"password\",\n                    \"allowedAttempts\": 5,\n                    \"attemptWindow\": 30,\n                    \"lockWait\": 1800\n                },\n                \"priority\": 2,\n                \"method\": [\n                    \"create\"\n                ],\n                \"handler\": [\n                    \"before\"\n                ]\n            }\n        },\n        \"revisions\": {},\n        \"forms\": {\n            \"userLogin\": {\n                \"title\": \"User Login\",\n                \"type\": \"form\",\n                \"name\": \"userLogin\",\n                \"path\": \"user/login\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": false,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"lockKey\": true,\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"lockKey\": true,\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"button\",\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"tableView\": false,\n                        \"label\": \"Submit\",\n                        \"input\": true\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            },\n            \"userRegister\": {\n                \"title\": \"User Register\",\n                \"type\": \"form\",\n                \"name\": \"userRegister\",\n                \"path\": \"user/register\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": false,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"lockKey\": true,\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"lockKey\": true,\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"label\": \"Submit\",\n                        \"input\": true,\n                        \"type\": \"button\"\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            },\n            \"adminLogin\": {\n                \"title\": \"Admin Login\",\n                \"type\": \"form\",\n                \"name\": \"adminLogin\",\n                \"path\": \"admin/login\",\n                \"pdfComponents\": [],\n                \"tags\": [],\n                \"components\": [\n                    {\n                        \"type\": \"email\",\n                        \"persistent\": true,\n                        \"unique\": false,\n                        \"protected\": false,\n                        \"defaultValue\": \"\",\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your email address\",\n                        \"key\": \"email\",\n                        \"lockKey\": true,\n                        \"label\": \"Email\",\n                        \"inputType\": \"email\",\n                        \"tableView\": true,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"password\",\n                        \"persistent\": true,\n                        \"protected\": true,\n                        \"suffix\": \"\",\n                        \"prefix\": \"\",\n                        \"placeholder\": \"Enter your password.\",\n                        \"key\": \"password\",\n                        \"lockKey\": true,\n                        \"label\": \"Password\",\n                        \"inputType\": \"password\",\n                        \"tableView\": false,\n                        \"input\": true\n                    },\n                    {\n                        \"type\": \"button\",\n                        \"theme\": \"primary\",\n                        \"disableOnInvalid\": true,\n                        \"action\": \"submit\",\n                        \"block\": false,\n                        \"rightIcon\": \"\",\n                        \"leftIcon\": \"\",\n                        \"size\": \"md\",\n                        \"key\": \"submit\",\n                        \"tableView\": false,\n                        \"label\": \"Submit\",\n                        \"input\": true\n                    }\n                ],\n                \"access\": [\n                    {\n                        \"type\": \"read_all\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionAccess\": [\n                    {\n                        \"type\": \"create_own\",\n                        \"roles\": [\n                            \"anonymous\"\n                        ]\n                    }\n                ],\n                \"submissionRevisions\": \"\",\n                \"revisions\": \"\",\n                \"esign\": {}\n            }\n        }\n    },\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"created\": \"2026-04-08T13:43:29.701Z\",\n    \"modified\": \"2026-04-08T13:43:29.705Z\"\n}"}],"_postman_id":"c13f6da0-9de5-4324-b98e-b99566c35331"},{"name":"Deploy version to stage","id":"840e3039-e3fa-41bc-bb49-acd6cd00b146","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"type\": \"template\",\n  \"template\": {\n    \"title\": \"Example Project: 642 Updated\",\n    \"version\": \"2.0.0\",\n    \"description\": \"This is an updated project.\",\n    \"name\": \"example-524\",\n    \"roles\": {\n      \"administrator\": {\n        \"title\": \"Administrator\",\n        \"description\": \"A role for Administrative Users.\",\n        \"admin\": true,\n        \"default\": false\n      },\n      \"authenticated\": {\n        \"title\": \"Authenticated\",\n        \"description\": \"A role for Authenticated Users.\",\n        \"admin\": false,\n        \"default\": false\n      },\n      \"anonymous\": {\n        \"title\": \"Anonymous\",\n        \"description\": \"A role for Anonymous Users.\",\n        \"admin\": false,\n        \"default\": true\n      }\n    },\n    \"reports\": {},\n    \"access\": [],\n    \"tag\": \"1.0.0\",\n    \"resources\": {\n      \"reportingui\": {\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"pdfComponents\": [],\n        \"display\": \"wizard\",\n        \"tags\": [\n          \"noBuilderResource\"\n        ],\n        \"settings\": {\n          \"wizardHeaderType\": \"Vertical\"\n        },\n        \"components\": [\n          {\n            \"title\": \"Basic Settings\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"basic\",\n            \"type\": \"panel\",\n            \"label\": \"Page 6\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version1\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                \"label\": \"Report Setup - Basic Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns\",\n                \"columns\": [\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Title\",\n                        \"placeholder\": \"Report Title\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"title\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  },\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Name\",\n                        \"placeholder\": \"Report Name\",\n                        \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                        \"allowCalculateOverride\": true,\n                        \"validate\": {\n                          \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                          \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                        },\n                        \"unique\": true,\n                        \"key\": \"name\",\n                        \"logic\": [\n                          {\n                            \"name\": \"make required\",\n                            \"trigger\": {\n                              \"type\": \"javascript\",\n                              \"javascript\": \"result = data.title;\"\n                            },\n                            \"actions\": [\n                              {\n                                \"name\": \"make required\",\n                                \"type\": \"property\",\n                                \"property\": {\n                                  \"label\": \"Required\",\n                                  \"value\": \"validate.required\",\n                                  \"type\": \"boolean\"\n                                },\n                                \"state\": true\n                              }\n                            ]\n                          }\n                        ],\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  }\n                ],\n                \"key\": \"columns1\",\n                \"type\": \"columns\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Forms\",\n                \"persistent\": false,\n                \"trigger\": {\n                  \"init\": false,\n                  \"server\": false\n                },\n                \"refreshOn\": \"forms\",\n                \"refreshOnEvent\": \"formsSet\",\n                \"event\": \"reportingFormsUpdated\",\n                \"dataSrc\": \"url\",\n                \"fetch\": {\n                  \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                  \"method\": \"get\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ],\n                  \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                  \"forwardHeaders\": false,\n                  \"authenticate\": true\n                },\n                \"allowCaching\": true,\n                \"key\": \"reportingForms\",\n                \"type\": \"datasource\",\n                \"indexeddb\": {},\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"gridSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings3\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Items per page\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                    \"tableView\": true,\n                    \"defaultValue\": 10,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"5\",\n                          \"value\": 5\n                        },\n                        {\n                          \"label\": \"10\",\n                          \"value\": 10\n                        },\n                        {\n                          \"label\": \"25\",\n                          \"value\": 25\n                        },\n                        {\n                          \"label\": \"50\",\n                          \"value\": 50\n                        },\n                        {\n                          \"label\": \"100\",\n                          \"value\": 100\n                        },\n                        {\n                          \"label\": \"All\",\n                          \"value\": -1\n                        }\n                      ]\n                    },\n                    \"key\": \"itemsPerPage\",\n                    \"type\": \"select\",\n                    \"input\": true,\n                    \"weight\": 442\n                  },\n                  {\n                    \"label\": \"Enable to Store Request Result in the Cache\",\n                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                    \"tableView\": false,\n                    \"defaultValue\": true,\n                    \"key\": \"allowCaching\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Cell max width\",\n                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"cellMaxWidth\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Source Forms\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"dataSourcePanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 1\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                \"label\": \"Basic Report Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"sourceFormsSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Choose from the Forms within this Project:\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"url\",\n                \"data\": {\n                  \"url\": \"{{Formio.projectUrl}}/form\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ]\n                },\n                \"valueProperty\": \"_id\",\n                \"template\": \"<span>{{ item.title }}</span>\",\n                \"validate\": {\n                  \"required\": true,\n                  \"select\": false\n                },\n                \"key\": \"forms\",\n                \"type\": \"select\",\n                \"disableLimit\": false,\n                \"searchField\": \"title__regex\",\n                \"noRefreshOnScroll\": false,\n                \"authenticate\": true,\n                \"input\": true\n              },\n              {\n                \"label\": \"Forms Connections\",\n                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Connection\",\n                \"redrawOn\": \"reportingForms\",\n                \"validate\": {\n                  \"required\": true\n                },\n                \"rowDrafts\": false,\n                \"key\": \"connections\",\n                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                \"logic\": [\n                  {\n                    \"name\": \"min max validation\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = !!data.reportingForms;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"min max validation\",\n                        \"type\": \"mergeComponentSchema\",\n                        \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"reorder\": false,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Data Source Connections\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Base Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"baseFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"connections.baseForm\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Joining Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"joiningFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"hideLabel\": true,\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Calculated Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"extraColumnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 7\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version3\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"calculatedColumnsSettingsDescription\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Calculated Extra Columns\",\n                \"hideLabel\": true,\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"redrawOn\": \"reportingForms\",\n                \"rowDrafts\": false,\n                \"key\": \"calculatedColumns\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"multiple\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"args\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"arg\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"reorder\": false,\n                    \"addAnotherPosition\": \"bottom\",\n                    \"layoutFixed\": false,\n                    \"enableRowGroups\": false,\n                    \"initEmpty\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"concatArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"datagrid\",\n                    \"input\": true,\n                    \"components\": [\n                      {\n                        \"label\": \"Field\",\n                        \"widget\": \"choicesjs\",\n                        \"tableView\": false,\n                        \"dataSrc\": \"custom\",\n                        \"data\": {\n                          \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                        },\n                        \"valueProperty\": \"value\",\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"field\",\n                        \"type\": \"select\",\n                        \"input\": true\n                      },\n                      {\n                        \"label\": \"Connector\",\n                        \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": false,\n                        \"key\": \"connector\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ]\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Dividend\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"dividend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Divisor\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"divisor\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"divideArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Minuend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"minuend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Subtrahend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"subtrahend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"subtractArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Start Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"startDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"End Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"endDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Unit\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"unit\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"size\": \"md\",\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"currentWidth\": 4\n                      }\n                    ],\n                    \"key\": \"dateDiffArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Date\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"date\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"calculatedColumnsSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"calcSettingsDescription\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Use Thousands Separator\",\n                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"thousandsSeparator\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Aggregation\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"groupingPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 8\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version4\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                \"label\": \"Content\",\n                \"refreshOnChange\": false,\n                \"key\": \"content\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Fields to group by\",\n                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                \"reorder\": false,\n                \"addAnother\": \"Add Field\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"key\": \"groups.groupingFields\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"placeholder\": \"Grouping Field\",\n                    \"hideLabel\": true,\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Calculated Aggregation Columns\",\n                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"rowDrafts\": false,\n                \"key\": \"groups.calculatedColumns\",\n                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select operator to calculate column value\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"argument\",\n                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"columnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 2\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns List\",\n                \"persistent\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                \"key\": \"columnsList\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Type\",\n                \"persistent\": false,\n                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                \"key\": \"reportType\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Available Columns\",\n                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                \"reorder\": true,\n                \"addAnother\": \"Add Column\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"validate\": {\n                  \"required\": true\n                },\n                \"key\": \"availableColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Column\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"column\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Display Title\",\n                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"displayTitle\",\n                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Default Columns\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"custom\",\n                \"data\": {\n                  \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                },\n                \"valueProperty\": \"value\",\n                \"refreshOn\": \"availableColumns\",\n                \"key\": \"defaultColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"select\",\n                \"input\": true\n              }\n            ]\n          },\n          {\n            \"title\": \"Control Panel\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"controlsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 9\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Enable Control Panel\",\n                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                \"tableView\": false,\n                \"defaultValue\": false,\n                \"key\": \"enableControls\",\n                \"type\": \"checkbox\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Controls Settings\",\n                \"tableView\": false,\n                \"key\": \"controlsSettings\",\n                \"customConditional\": \"show = data.enableControls;\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings8\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Control Panel Title\",\n                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Control Panel Theme\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"defaultValue\": \"default\",\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Default\",\n                          \"value\": \"default\"\n                        },\n                        {\n                          \"label\": \"Primary\",\n                          \"value\": \"primary\"\n                        },\n                        {\n                          \"label\": \"Info\",\n                          \"value\": \"info\"\n                        },\n                        {\n                          \"label\": \"Success\",\n                          \"value\": \"success\"\n                        },\n                        {\n                          \"label\": \"Danger\",\n                          \"value\": \"danger\"\n                        },\n                        {\n                          \"label\": \"Warning\",\n                          \"value\": \"warning\"\n                        }\n                      ]\n                    },\n                    \"key\": \"theme\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Initially Collapsed\",\n                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"collapsePanel\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Filters \",\n            \"collapsible\": false,\n            \"key\": \"filtersPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 3\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filters enable end users of this report to view any subset of data needed at runtime. Customize Filters for your Report Below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Number Of Filters Per Row\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel Filters Section.\",\n                \"tableView\": false,\n                \"defaultValue\": 2,\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"1\",\n                      \"value\": \"1\"\n                    },\n                    {\n                      \"label\": \"2\",\n                      \"value\": \"2\"\n                    },\n                    {\n                      \"label\": \"3\",\n                      \"value\": \"3\"\n                    },\n                    {\n                      \"label\": \"4\",\n                      \"value\": \"4\"\n                    }\n                  ]\n                },\n                \"dataType\": \"number\",\n                \"key\": \"filtersPerRow\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Filter Label Position\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                \"tableView\": false,\n                \"defaultValue\": \"top\",\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"Top\",\n                      \"value\": \"top\"\n                    },\n                    {\n                      \"label\": \"Left\",\n                      \"value\": \"left-left\"\n                    },\n                    {\n                      \"label\": \"Right\",\n                      \"value\": \"right-right\"\n                    }\n                  ]\n                },\n                \"key\": \"filterLabelPosition\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Control Panel Filters\",\n                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                \"reorder\": true,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"key\": \"filters\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = instance.root.data.columnsList;\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"filterType\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Title\",\n                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"filterTitle\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Actions\",\n            \"collapsible\": false,\n            \"key\": \"actionsPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 4\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version8\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Actions\",\n                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Action\",\n                \"rowDrafts\": false,\n                \"key\": \"actions\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Title\",\n                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Export CSV\",\n                          \"value\": \"csv\"\n                        },\n                        {\n                          \"label\": \"Download PDF\",\n                          \"value\": \"pdf\"\n                        },\n                        {\n                          \"label\": \"Custom\",\n                          \"value\": \"custom\"\n                        }\n                      ]\n                    },\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"type\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Apply action for:\",\n                    \"optionsLabelPosition\": \"right\",\n                    \"inline\": true,\n                    \"tableView\": false,\n                    \"defaultValue\": \"availableColumns\",\n                    \"values\": [\n                      {\n                        \"label\": \"All Available Columns\",\n                        \"value\": \"availableColumns\",\n                        \"shortcut\": \"\"\n                      },\n                      {\n                        \"label\": \"Visible Columns\",\n                        \"value\": \"visibleColumns\",\n                        \"shortcut\": \"\"\n                      }\n                    ],\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"applyFor\",\n                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                    \"type\": \"radio\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Print Limit\",\n                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"printLimit\",\n                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Custom JS Code\",\n                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                    \"applyMaskOn\": \"change\",\n                    \"editor\": \"ace\",\n                    \"autoExpand\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"customCode\",\n                    \"conditional\": {\n                      \"conjunction\": \"all\"\n                    },\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"textarea\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"HTML\",\n                    \"attrs\": [\n                      {\n                        \"attr\": \"\",\n                        \"value\": \"\"\n                      }\n                    ],\n                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"html\",\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"htmlelement\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"properties\": {\n          \"version\": 9\n        },\n        \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"admin\": {\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"user\": {\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"actions\": {\n      \"reportingui:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"reportingui\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"admin:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"admin\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"administrator\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"admin:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"admin\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"user:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"user\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"authenticated\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"user:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"user\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resource\": \"user\",\n          \"fields\": {\n            \"email\": \"email\",\n            \"password\": \"password\"\n          }\n        },\n        \"priority\": 11,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\"\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"adminLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"adminLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"admin\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      }\n    },\n    \"revisions\": {},\n    \"forms\": {\n      \"userLogin\": {\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userRegister\": {\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"label\": \"Submit\",\n            \"input\": true,\n            \"type\": \"button\"\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"adminLogin\": {\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/project/{{ projectId }}/deploy","description":"<p>In order to deploy a version to a stage, simply take the <code>template</code> property of a specific version, and then POST that to the destination project's <code>/deploy</code> endpoint. In this example, the <code>projectId</code> is the ID of the destination stage.</p>\n","urlObject":{"path":["project","{{ projectId }}","deploy"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"78a259c3-7501-4beb-aa5c-668d4d816dbe","name":"Deploy version to stage","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"type\": \"template\",\n  \"template\": {\n    \"title\": \"Example Project Updated\",\n    \"version\": \"2.0.0\",\n    \"description\": \"This is an updated project.\",\n    \"name\": \"example\",\n    \"roles\": {\n      \"administrator\": {\n        \"title\": \"Administrator\",\n        \"description\": \"A role for Administrative Users.\",\n        \"admin\": true,\n        \"default\": false\n      },\n      \"authenticated\": {\n        \"title\": \"Authenticated\",\n        \"description\": \"A role for Authenticated Users.\",\n        \"admin\": false,\n        \"default\": false\n      },\n      \"anonymous\": {\n        \"title\": \"Anonymous\",\n        \"description\": \"A role for Anonymous Users.\",\n        \"admin\": false,\n        \"default\": true\n      }\n    },\n    \"reports\": {},\n    \"access\": [],\n    \"tag\": \"1.0.0\",\n    \"resources\": {\n      \"reportingui\": {\n        \"title\": \"Reporting UI\",\n        \"type\": \"resource\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"pdfComponents\": [],\n        \"display\": \"wizard\",\n        \"tags\": [\n          \"noBuilderResource\"\n        ],\n        \"settings\": {\n          \"wizardHeaderType\": \"Vertical\"\n        },\n        \"components\": [\n          {\n            \"title\": \"Basic Settings\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"basic\",\n            \"type\": \"panel\",\n            \"label\": \"Page 6\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version1\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Basic Settings</strong></span></p>\",\n                \"label\": \"Report Setup - Basic Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns\",\n                \"columns\": [\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Title\",\n                        \"placeholder\": \"Report Title\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"title\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  },\n                  {\n                    \"components\": [\n                      {\n                        \"label\": \"Report Name\",\n                        \"placeholder\": \"Report Name\",\n                        \"tooltip\": \"This is autogenerated by default to be a camel case version of the Report Title.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": true,\n                        \"calculateValue\": \"value = _.camelCase(data.title);\\n\\n\",\n                        \"allowCalculateOverride\": true,\n                        \"validate\": {\n                          \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                          \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                        },\n                        \"unique\": true,\n                        \"key\": \"name\",\n                        \"logic\": [\n                          {\n                            \"name\": \"make required\",\n                            \"trigger\": {\n                              \"type\": \"javascript\",\n                              \"javascript\": \"result = data.title;\"\n                            },\n                            \"actions\": [\n                              {\n                                \"name\": \"make required\",\n                                \"type\": \"property\",\n                                \"property\": {\n                                  \"label\": \"Required\",\n                                  \"value\": \"validate.required\",\n                                  \"type\": \"boolean\"\n                                },\n                                \"state\": true\n                              }\n                            ]\n                          }\n                        ],\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ],\n                    \"width\": 6,\n                    \"offset\": 0,\n                    \"push\": 0,\n                    \"pull\": 0,\n                    \"size\": \"md\",\n                    \"currentWidth\": 6\n                  }\n                ],\n                \"key\": \"columns1\",\n                \"type\": \"columns\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Forms\",\n                \"persistent\": false,\n                \"trigger\": {\n                  \"init\": false,\n                  \"server\": false\n                },\n                \"refreshOn\": \"forms\",\n                \"refreshOnEvent\": \"formsSet\",\n                \"event\": \"reportingFormsUpdated\",\n                \"dataSrc\": \"url\",\n                \"fetch\": {\n                  \"url\": \"{{Formio.projectUrl}}/form?_id__in={{data.forms.join(\\\",\\\")}}&full=true\",\n                  \"method\": \"get\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ],\n                  \"mapFunction\": \"value = _.isArray(responseData) ? responseData : [];\",\n                  \"forwardHeaders\": false,\n                  \"authenticate\": true\n                },\n                \"allowCaching\": true,\n                \"key\": \"reportingForms\",\n                \"type\": \"datasource\",\n                \"indexeddb\": {},\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"gridSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Grid - Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings3\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Items per page\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select how many records (Rows) to display on each page of the Report Grid by default.\",\n                    \"tableView\": true,\n                    \"defaultValue\": 10,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"5\",\n                          \"value\": 5\n                        },\n                        {\n                          \"label\": \"10\",\n                          \"value\": 10\n                        },\n                        {\n                          \"label\": \"25\",\n                          \"value\": 25\n                        },\n                        {\n                          \"label\": \"50\",\n                          \"value\": 50\n                        },\n                        {\n                          \"label\": \"100\",\n                          \"value\": 100\n                        },\n                        {\n                          \"label\": \"All\",\n                          \"value\": -1\n                        }\n                      ]\n                    },\n                    \"key\": \"itemsPerPage\",\n                    \"type\": \"select\",\n                    \"input\": true,\n                    \"weight\": 442\n                  },\n                  {\n                    \"label\": \"Enable to Store Request Result in the Cache\",\n                    \"tooltip\": \"When checked, the requests and their results will be stored in the cache. If the Report tries to make a request to the same URL with the same parameters, the cached data will be returned. This increases performance. PLEASE NOTE: if the remote source's data changes frequently and requires frequent updates, uncheck this option as caching is not ideal in all scenarios.\",\n                    \"tableView\": false,\n                    \"defaultValue\": true,\n                    \"key\": \"allowCaching\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Cell max width\",\n                    \"tooltip\": \"It sets the maximum size of the Report Grid cells.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"cellMaxWidth\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Source Forms\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"dataSourcePanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 1\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Source Forms&nbsp;</strong></span></p><p>A report can aggregate Submission Data submitted against one or more Forms. Many times, Reports aggregate data from multiple Forms which allow a singular Report UI to visualize connected data stemming from multiple Form Sources.&nbsp;</p>\",\n                \"label\": \"Basic Report Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"sourceFormsSettings\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Choose from the Forms within this Project:\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Select one or more related forms that will be the source of data for the Report Grid.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"url\",\n                \"data\": {\n                  \"url\": \"{{Formio.projectUrl}}/form\",\n                  \"headers\": [\n                    {\n                      \"key\": \"\",\n                      \"value\": \"\"\n                    }\n                  ]\n                },\n                \"valueProperty\": \"_id\",\n                \"template\": \"<span>{{ item.title }}</span>\",\n                \"validate\": {\n                  \"required\": true,\n                  \"select\": false\n                },\n                \"key\": \"forms\",\n                \"type\": \"select\",\n                \"disableLimit\": false,\n                \"searchField\": \"title__regex\",\n                \"noRefreshOnScroll\": false,\n                \"authenticate\": true,\n                \"input\": true\n              },\n              {\n                \"label\": \"Forms Connections\",\n                \"tooltip\": \"Define the fields that are common for the pairs of forms. The fields will be used as connectors to join the submissions of source forms in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-6 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n        {% if (component.key === 'baseForm') { %}\\n          <div class=\\\"col-sm-6\\\">\\n            {% } else { %}\\n              <div class=\\\"col-sm-4\\\">\\n                  {% } %}\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Connection\",\n                \"redrawOn\": \"reportingForms\",\n                \"validate\": {\n                  \"required\": true\n                },\n                \"rowDrafts\": false,\n                \"key\": \"connections\",\n                \"customConditional\": \"show = data.forms && data.forms.length > 1;\",\n                \"logic\": [\n                  {\n                    \"name\": \"min max validation\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = !!data.reportingForms;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"min max validation\",\n                        \"type\": \"mergeComponentSchema\",\n                        \"schemaDefinition\": \"schema = {validate: {\\n  maxLength: data.reportingForms.length - 1,\\n  minLength: data.reportingForms.length - 1,\\n}}\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"reorder\": false,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Data Source Connections\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Joining Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionBaseFormOptions(data.reportingForms, connections, rowIndex)\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of base Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the base Form field that has a corresponding field in the row joining Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.baseForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"baseFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.baseForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Base Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"baseFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.baseFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Source Form\",\n                            \"tooltip\": \"Select the form that has a common field with the row Base Form.\",\n                            \"tableView\": true,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var rowIndex = instance.rowIndex;\\nvar connections = instance.root.data.connections;\\n\\nvalues = utils.reporting.getConnectionJoiningFormOptions(data.reportingForms, connections, rowIndex);\\n\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"refreshOn\": \"connections.baseForm\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningForm\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Connecting field of joining Form\",\n                            \"widget\": \"choicesjs\",\n                            \"placeholder\": \"Connecting Field\",\n                            \"tooltip\": \"Select the Joining Form field that corresponds to the Connecting Field of the Base Form.\",\n                            \"disabled\": true,\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getConnectionFormComponentsAsOptions(row.joiningForm, data.reportingForms);\\n\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"joiningFormField\",\n                            \"logic\": [\n                              {\n                                \"name\": \"enable\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"enable\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Disabled\",\n                                      \"value\": \"disabled\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": false\n                                  }\n                                ]\n                              },\n                              {\n                                \"name\": \"clear value\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = !row.joiningForm\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"clear value\",\n                                    \"type\": \"customAction\",\n                                    \"customAction\": \"instance.dataValue = instance.emptyValue\"\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"select\",\n                            \"input\": true\n                          },\n                          {\n                            \"label\": \"Joining Form path to connecting value\",\n                            \"placeholder\": \"Path\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"key\": \"joiningFormValuePath\",\n                            \"customConditional\": \"show = !_.includes([utils.reporting.connectionByFullSubmissionObjectOptionValue], row.joiningFormField);\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"hideLabel\": true,\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Calculated Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"extraColumnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 7\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version3\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Calculated Columns</strong></span></p><p>Here you can add additional columns to the Report Grid that do not exist in the the Data Source Forms. These columns` value(s) will be calculated based on the fields of the Data Source Forms.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"calculatedColumnsSettingsDescription\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Calculated Extra Columns\",\n                \"hideLabel\": true,\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"redrawOn\": \"reportingForms\",\n                \"rowDrafts\": false,\n                \"key\": \"calculatedColumns\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select an operator to calculate the column value.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(false);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"multiple\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"args\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"arg\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Arguments\",\n                    \"reorder\": false,\n                    \"addAnotherPosition\": \"bottom\",\n                    \"layoutFixed\": false,\n                    \"enableRowGroups\": false,\n                    \"initEmpty\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"concatArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"datagrid\",\n                    \"input\": true,\n                    \"components\": [\n                      {\n                        \"label\": \"Field\",\n                        \"widget\": \"choicesjs\",\n                        \"tableView\": false,\n                        \"dataSrc\": \"custom\",\n                        \"data\": {\n                          \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), 'concat', instance.parent.rowIndex);\"\n                        },\n                        \"valueProperty\": \"value\",\n                        \"validate\": {\n                          \"required\": true\n                        },\n                        \"key\": \"field\",\n                        \"type\": \"select\",\n                        \"input\": true\n                      },\n                      {\n                        \"label\": \"Connector\",\n                        \"tooltip\": \"Enter the connector that will be added between this row field value and next row filed value. Whitespace is used by default.\",\n                        \"applyMaskOn\": \"change\",\n                        \"tableView\": false,\n                        \"key\": \"connector\",\n                        \"type\": \"textfield\",\n                        \"input\": true\n                      }\n                    ]\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Dividend\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"dividend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Divisor\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"divisor\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"divideArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Minuend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value from which another value is to be subtracted\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"minuend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Subtrahend\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the value that is to be subtracted from the minuend\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"subtrahend\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"subtractArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Start Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"startDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"End Date\",\n                            \"widget\": \"choicesjs\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"endDate\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 4\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Unit\",\n                            \"widget\": \"choicesjs\",\n                            \"tooltip\": \"Select the time measurement unit between the Start Date and End Date.\",\n                            \"tableView\": false,\n                            \"dataSrc\": \"custom\",\n                            \"data\": {\n                              \"custom\": \"values = utils.reporting.getDateDiffUnitOptions(row.operator);\"\n                            },\n                            \"valueProperty\": \"value\",\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"unit\",\n                            \"type\": \"select\",\n                            \"input\": true\n                          }\n                        ],\n                        \"size\": \"md\",\n                        \"width\": 4,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"currentWidth\": 4\n                      }\n                    ],\n                    \"key\": \"dateDiffArgs\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Date\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getCalculationArgsOptions(reportingForms, _.get(instance, 'root.data.calculatedColumns', []), row.operator, instance.rowIndex);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"date\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Container\",\n                \"tableView\": false,\n                \"key\": \"calculatedColumnsSettings\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Calculated Columns - Global Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"calcSettingsDescription\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Use Thousands Separator\",\n                    \"tooltip\": \"Separate thousands by local delimiter in calculated columns with number value\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"thousandsSeparator\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Aggregation\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"groupingPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 8\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version4\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Aggregated Columns</strong></span></p><p>You can create an <strong>aggregated report</strong> that groups the selected Forms' submissions by one or several fields (e.g. department ID or employee ID). Using the UI below, select the fields that will be used as criteria for the grouping. Then, add columns to your Reporting Grid that will be calculated per group based on the existing selected Forms fields or the Grid Calculated Extra Fields.&nbsp;</p><p><strong>Please note that only Aggregated Columns will be available to display in the Reporting Grid for Aggregated Reports.</strong></p>\",\n                \"label\": \"Content\",\n                \"refreshOnChange\": false,\n                \"key\": \"content\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Fields to group by\",\n                \"tooltip\": \"Select the fields that will be used as criteria for grouping the Data Source Forms` data.\",\n                \"reorder\": false,\n                \"addAnother\": \"Add Field\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"key\": \"groups.groupingFields\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"placeholder\": \"Grouping Field\",\n                    \"hideLabel\": true,\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvar calculatedColumns = instance.root.data.calculatedColumns;\\nvar selectedItems = _.chain(instance.root.data.groups.groupingFields || [])\\n .map(col => col.field)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({ reportingForms, calculatedColumns, selectedItems});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Calculated Aggregation Columns\",\n                \"tooltip\": \"Here you can add additional calculated columns to the Report Grid based on other aggregated columns.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Column\",\n                \"rowDrafts\": false,\n                \"key\": \"groups.calculatedColumns\",\n                \"customConditional\": \"var groupingFields = _.get(data, 'groups.groupingFields', []);\\nshow = _.some(groupingFields, field => !!field.field);\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Columns\",\n                    \"columns\": [\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Title\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": true,\n                            \"validate\": {\n                              \"required\": true\n                            },\n                            \"key\": \"name\",\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      },\n                      {\n                        \"components\": [\n                          {\n                            \"label\": \"Column Key\",\n                            \"applyMaskOn\": \"change\",\n                            \"tableView\": false,\n                            \"calculateValue\": \"value = _.camelCase(row.name);\",\n                            \"allowCalculateOverride\": true,\n                            \"validate\": {\n                              \"pattern\": \"(\\\\w|\\\\w[\\\\w-.]*\\\\w)\",\n                              \"custom\": \"valid = utils.reporting.validateUniqueColumnKey(input, instance.rowIndex, submission.data.groups?.calculatedColumns, options.server);\",\n                              \"patternMessage\": \"The key must only contain alphanumeric characters, underscores, dots and dashes and should not be ended by dash or dot.\"\n                            },\n                            \"key\": \"key\",\n                            \"logic\": [\n                              {\n                                \"name\": \"make required\",\n                                \"trigger\": {\n                                  \"type\": \"javascript\",\n                                  \"javascript\": \"result = row.title;\"\n                                },\n                                \"actions\": [\n                                  {\n                                    \"name\": \"make required\",\n                                    \"type\": \"property\",\n                                    \"property\": {\n                                      \"label\": \"Required\",\n                                      \"value\": \"validate.required\",\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"state\": true\n                                  }\n                                ]\n                              }\n                            ],\n                            \"type\": \"textfield\",\n                            \"input\": true\n                          }\n                        ],\n                        \"width\": 6,\n                        \"offset\": 0,\n                        \"push\": 0,\n                        \"pull\": 0,\n                        \"size\": \"md\",\n                        \"currentWidth\": 6\n                      }\n                    ],\n                    \"key\": \"columns\",\n                    \"type\": \"columns\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Operator\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select operator to calculate column value\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = utils.reporting.getAggregationOperatorsOptions(true);\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"operator\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Argument\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": false,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var reportingForms = instance.root.data.reportingForms;\\nvalues = utils.reporting.getReportingFormsComponentsAndExtraComponentsAsOptions({reportingForms, calculatedColumns: instance.root.data.calculatedColumns, operator: row.operator});\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"argument\",\n                    \"customConditional\": \"show = utils.reporting.showGroupOperatorArg(row.operator);\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Decimal Places\",\n                    \"tooltip\": \"Enter the number of decimal places for the calculated value. If the original calculated value has more decimal places, the value will be rounded.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"key\": \"decimalLimit\",\n                    \"customConditional\": \"show = utils.reporting.showAggregationOperatorArg(instance.component.key, row.operator);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Columns\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"columnsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 2\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Report Setup - Columns&nbsp;</strong></span></p><p>Use the UI below to choose which columns are available to the end user of the Report. Then, select which columns the end user has available by default. The end user will start out with the default columns shown visually, with an option to choose which of the available columns they wish to see based on their requirements at runtime.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings2\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Columns List\",\n                \"persistent\": false,\n                \"redrawOn\": \"reportingForms\",\n                \"calculateValue\": \"value = utils.reporting.getColumnsListOptions(data.reportingForms, data.groups, data.calculatedColumns);\",\n                \"key\": \"columnsList\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Report Type\",\n                \"persistent\": false,\n                \"calculateValue\": \"value = utils.reporting.getReportTypeInfo(data, instance);\",\n                \"key\": \"reportType\",\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Available Columns\",\n                \"tooltip\": \"Available Columns that will be available for possible display in the Report Grid. The columns will display in the Report Grid in the order chosen here.\",\n                \"reorder\": true,\n                \"addAnother\": \"Add Column\",\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"validate\": {\n                  \"required\": true\n                },\n                \"key\": \"availableColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Column\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var selectedItems = _.chain(instance.root.data.availableColumns || [])\\n .map(col => col.column)\\n .filter(col => col && !_.isEqual(instance.dataValue, col))\\n .value();\\n\\nvalues = utils.reporting.getUnselectedColumnsOptions(instance.root.data.columnsList, selectedItems);\\n\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"column\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Display Title\",\n                    \"tooltip\": \"This title will be shown in the Report. If not set, original component title will be used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"displayTitle\",\n                    \"customConditional\": \"show = row.column && row.column.formId;\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              },\n              {\n                \"label\": \"Default Columns\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Default columns will be displayed in the Report Grid on initial load of the UI. If not set, all available columns will be displayed.\",\n                \"tableView\": false,\n                \"multiple\": true,\n                \"dataSrc\": \"custom\",\n                \"data\": {\n                  \"custom\": \"values = utils.reporting.getAvailableColumnsAsOptions(data.availableColumns, data.columnsList);\"\n                },\n                \"valueProperty\": \"value\",\n                \"refreshOn\": \"availableColumns\",\n                \"key\": \"defaultColumns\",\n                \"logic\": [\n                  {\n                    \"name\": \"clear Columns\",\n                    \"trigger\": {\n                      \"type\": \"javascript\",\n                      \"javascript\": \"result = data.reportType?.typeChanged;\"\n                    },\n                    \"actions\": [\n                      {\n                        \"name\": \"clear\",\n                        \"type\": \"customAction\",\n                        \"customAction\": \"instance.resetValue();\"\n                      }\n                    ]\n                  }\n                ],\n                \"type\": \"select\",\n                \"input\": true\n              }\n            ]\n          },\n          {\n            \"title\": \"Control Panel\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"collapsible\": false,\n            \"key\": \"controlsPanel\",\n            \"type\": \"panel\",\n            \"label\": \"Page 9\",\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Basic Settings</strong></span></p><p>In addition to the Report Grid, a Control Panel can be enabled and customized here. This includes a Columns Selection UI, customized Filters, and Actions that can be performed on rows which are selected in the grid.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Enable Control Panel\",\n                \"tooltip\": \"When checked, a special Control Panel UI will display above the Report Grid. The Control Panel additional settings can be configured in the Filtering and Actions sections.\",\n                \"tableView\": false,\n                \"defaultValue\": false,\n                \"key\": \"enableControls\",\n                \"type\": \"checkbox\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Controls Settings\",\n                \"tableView\": false,\n                \"key\": \"controlsSettings\",\n                \"customConditional\": \"show = data.enableControls;\",\n                \"type\": \"container\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"html\": \"<p><span class=\\\"text-big\\\">Report Controls - &nbsp;Basic Settings</span></p>\",\n                    \"label\": \"Reporting Grid Basic Settings\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"basicReportingSettings8\",\n                    \"type\": \"content\",\n                    \"input\": false,\n                    \"tableView\": false\n                  },\n                  {\n                    \"label\": \"Control Panel Title\",\n                    \"tooltip\": \"This title will be displayed for the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Control Panel Theme\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"defaultValue\": \"default\",\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Default\",\n                          \"value\": \"default\"\n                        },\n                        {\n                          \"label\": \"Primary\",\n                          \"value\": \"primary\"\n                        },\n                        {\n                          \"label\": \"Info\",\n                          \"value\": \"info\"\n                        },\n                        {\n                          \"label\": \"Success\",\n                          \"value\": \"success\"\n                        },\n                        {\n                          \"label\": \"Danger\",\n                          \"value\": \"danger\"\n                        },\n                        {\n                          \"label\": \"Warning\",\n                          \"value\": \"warning\"\n                        }\n                      ]\n                    },\n                    \"key\": \"theme\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Initially Collapsed\",\n                    \"tooltip\": \"If checked, the Control Panel will initially be collapsed.\",\n                    \"tableView\": false,\n                    \"defaultValue\": false,\n                    \"key\": \"collapsePanel\",\n                    \"type\": \"checkbox\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Filters\",\n            \"collapsible\": false,\n            \"key\": \"filtersPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 3\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version7\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Filters</strong></span></p><p>Filters enable end users of this report to view any subset of data needed at runtime. Customize Filters for your Report Below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings5\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Number Of Filters Per Row\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"How many filters display horizontally in each row of the Control Panel Filters Section.\",\n                \"tableView\": false,\n                \"defaultValue\": 2,\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"1\",\n                      \"value\": \"1\"\n                    },\n                    {\n                      \"label\": \"2\",\n                      \"value\": \"2\"\n                    },\n                    {\n                      \"label\": \"3\",\n                      \"value\": \"3\"\n                    },\n                    {\n                      \"label\": \"4\",\n                      \"value\": \"4\"\n                    }\n                  ]\n                },\n                \"dataType\": \"number\",\n                \"key\": \"filtersPerRow\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Filter Label Position\",\n                \"widget\": \"choicesjs\",\n                \"tooltip\": \"Position for the labels of the Controls Filter Fields.\",\n                \"tableView\": false,\n                \"defaultValue\": \"top\",\n                \"data\": {\n                  \"values\": [\n                    {\n                      \"label\": \"Top\",\n                      \"value\": \"top\"\n                    },\n                    {\n                      \"label\": \"Left\",\n                      \"value\": \"left-left\"\n                    },\n                    {\n                      \"label\": \"Right\",\n                      \"value\": \"right-right\"\n                    }\n                  ]\n                },\n                \"key\": \"filterLabelPosition\",\n                \"type\": \"select\",\n                \"input\": true\n              },\n              {\n                \"label\": \"Control Panel Filters\",\n                \"tooltip\": \"Add the fields by which you want to filter the data within the Report. These filters will display in the Report Control Panel UI.\",\n                \"reorder\": true,\n                \"addAnotherPosition\": \"bottom\",\n                \"layoutFixed\": false,\n                \"enableRowGroups\": false,\n                \"initEmpty\": true,\n                \"tableView\": false,\n                \"key\": \"filters\",\n                \"type\": \"datagrid\",\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Field\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"values = instance.root.data.columnsList;\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"refreshOn\": \"columnsList\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"field\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tooltip\": \"Select filter operator you want to apply for filtering the field.\",\n                    \"tableView\": true,\n                    \"dataSrc\": \"custom\",\n                    \"data\": {\n                      \"custom\": \"var calculatedExtraColumns = instance.root.data.calculatedColumns || [];\\nvar calculatedGroupingColumns = _.get(instance, 'root.data.groups.calculatedColumns', []);\\n\\nvalues = utils.reporting.getControlsFilterOperators(row.field, instance.root.data.reportingForms, [...calculatedExtraColumns, ...calculatedGroupingColumns])\"\n                    },\n                    \"valueProperty\": \"value\",\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"filterType\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Filter Title\",\n                    \"tooltip\": \"This title will be displayed next to the filter. If not set, the label of the filter field is used.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"key\": \"filterTitle\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  }\n                ]\n              }\n            ]\n          },\n          {\n            \"title\": \"Actions\",\n            \"collapsible\": false,\n            \"key\": \"actionsPanel\",\n            \"conditional\": {\n              \"show\": true,\n              \"conjunction\": \"all\",\n              \"conditions\": [\n                {\n                  \"component\": \"enableControls\",\n                  \"operator\": \"isEqual\",\n                  \"value\": true\n                }\n              ]\n            },\n            \"type\": \"panel\",\n            \"label\": \"Page 4\",\n            \"breadcrumbClickable\": true,\n            \"buttonSettings\": {\n              \"previous\": true,\n              \"cancel\": true,\n              \"next\": true\n            },\n            \"navigateOnEnter\": false,\n            \"saveOnEnter\": false,\n            \"scrollToTop\": false,\n            \"input\": false,\n            \"tableView\": false,\n            \"components\": [\n              {\n                \"html\": \"<p style=\\\"text-align:right;\\\"><span class=\\\"text-small\\\"><i>v{{form.properties.version}}</i></span></p>\",\n                \"label\": \"Content\",\n                \"customClass\": \"text-muted\",\n                \"refreshOnChange\": false,\n                \"key\": \"version8\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"html\": \"<p><span class=\\\"text-big\\\"><strong>Control Panel - Actions</strong></span></p><p>Enable end users of the Report to execute actions on rows which are selected within the Report Grid. Select a default Action, or create any customized Action to meet bespoke requirements by entering custom Javascript below.&nbsp;</p>\",\n                \"label\": \"Basic Reporting Settings\",\n                \"refreshOnChange\": false,\n                \"key\": \"basicReportingSettings6\",\n                \"type\": \"content\",\n                \"input\": false,\n                \"tableView\": false\n              },\n              {\n                \"label\": \"Actions\",\n                \"tooltip\": \"Actions will be displayed in Actions of the Control Panel and will be applied for selected rows in the Report Grid.\",\n                \"tableView\": false,\n                \"templates\": {\n                  \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4 font-weight-bold\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                  \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-4\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-4\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                },\n                \"addAnother\": \"Add Action\",\n                \"rowDrafts\": false,\n                \"key\": \"actions\",\n                \"type\": \"editgrid\",\n                \"displayAsTable\": false,\n                \"input\": true,\n                \"components\": [\n                  {\n                    \"label\": \"Title\",\n                    \"tooltip\": \"Action title that will be shown in the Control Panel.\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"title\",\n                    \"type\": \"textfield\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Type\",\n                    \"widget\": \"choicesjs\",\n                    \"tableView\": true,\n                    \"data\": {\n                      \"values\": [\n                        {\n                          \"label\": \"Export CSV\",\n                          \"value\": \"csv\"\n                        },\n                        {\n                          \"label\": \"Download PDF\",\n                          \"value\": \"pdf\"\n                        },\n                        {\n                          \"label\": \"Custom\",\n                          \"value\": \"custom\"\n                        }\n                      ]\n                    },\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"type\",\n                    \"type\": \"select\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Apply action for:\",\n                    \"optionsLabelPosition\": \"right\",\n                    \"inline\": true,\n                    \"tableView\": false,\n                    \"defaultValue\": \"availableColumns\",\n                    \"values\": [\n                      {\n                        \"label\": \"All Available Columns\",\n                        \"value\": \"availableColumns\",\n                        \"shortcut\": \"\"\n                      },\n                      {\n                        \"label\": \"Visible Columns\",\n                        \"value\": \"visibleColumns\",\n                        \"shortcut\": \"\"\n                      }\n                    ],\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"applyFor\",\n                    \"customConditional\": \"show = _.includes(['csv', 'pdf'], row.type);\",\n                    \"type\": \"radio\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Print Limit\",\n                    \"tooltip\": \"The maximum number of rows allowed for PDF printing at once. The default value is 25.\",\n                    \"applyMaskOn\": \"change\",\n                    \"mask\": false,\n                    \"tableView\": false,\n                    \"delimiter\": false,\n                    \"requireDecimal\": false,\n                    \"inputFormat\": \"plain\",\n                    \"truncateMultipleSpaces\": false,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"printLimit\",\n                    \"customConditional\": \"show = _.includes(['pdf'], row.type);\",\n                    \"type\": \"number\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"Custom JS Code\",\n                    \"placeholder\": \"promise = Promise.resolve(true);\",\n                    \"tooltip\": \"Enter custom JavaScript code that will be executed for selected rows. If you want the Report Grid to redraw and reload the page data after the custom action is performed, the promise should return true.\",\n                    \"applyMaskOn\": \"change\",\n                    \"editor\": \"ace\",\n                    \"autoExpand\": false,\n                    \"tableView\": false,\n                    \"validate\": {\n                      \"required\": true\n                    },\n                    \"key\": \"customCode\",\n                    \"conditional\": {\n                      \"conjunction\": \"all\"\n                    },\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"textarea\",\n                    \"input\": true\n                  },\n                  {\n                    \"label\": \"HTML\",\n                    \"attrs\": [\n                      {\n                        \"attr\": \"\",\n                        \"value\": \"\"\n                      }\n                    ],\n                    \"content\": \"{{utils.reporting.getCustomScriptAvailableVarialbles()}}\\n\",\n                    \"refreshOnChange\": false,\n                    \"key\": \"html\",\n                    \"customConditional\": \"show = row.type === 'custom';\",\n                    \"type\": \"htmlelement\",\n                    \"input\": false,\n                    \"tableView\": false\n                  }\n                ]\n              }\n            ]\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\",\n              \"authenticated\",\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"properties\": {\n          \"version\": 9\n        },\n        \"controller\": \"instance.submissionReady.then((subm) => {\\n  instance.emit('formsSet');\\n});\\n\",\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"admin\": {\n        \"title\": \"Admin\",\n        \"type\": \"resource\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"user\": {\n        \"title\": \"User\",\n        \"type\": \"resource\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": true,\n            \"required\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\",\n              \"authenticated\",\n              \"administrator\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"update_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"delete_all\",\n            \"roles\": [\n              \"administrator\"\n            ]\n          },\n          {\n            \"type\": \"create_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"read_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"update_own\",\n            \"roles\": []\n          },\n          {\n            \"type\": \"delete_own\",\n            \"roles\": []\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    },\n    \"actions\": {\n      \"reportingui:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"reportingui\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"admin:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"admin\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"administrator\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"admin:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"admin\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"user:role\": {\n        \"title\": \"Role Assignment\",\n        \"name\": \"role\",\n        \"form\": \"user\",\n        \"settings\": {\n          \"association\": \"new\",\n          \"type\": \"add\",\n          \"role\": \"authenticated\"\n        },\n        \"priority\": 1,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"after\"\n        ]\n      },\n      \"user:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"user\",\n        \"priority\": 10,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:save\": {\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resource\": \"user\",\n          \"fields\": {\n            \"email\": \"email\",\n            \"password\": \"password\"\n          }\n        },\n        \"priority\": 11,\n        \"method\": [\n          \"create\",\n          \"update\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"userRegister:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"userRegister\",\n        \"settings\": {\n          \"resources\": [\n            \"user\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\"\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      },\n      \"adminLogin:login\": {\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"form\": \"adminLogin\",\n        \"settings\": {\n          \"resources\": [\n            \"admin\"\n          ],\n          \"username\": \"email\",\n          \"password\": \"password\",\n          \"allowedAttempts\": 5,\n          \"attemptWindow\": 30,\n          \"lockWait\": 1800\n        },\n        \"priority\": 2,\n        \"method\": [\n          \"create\"\n        ],\n        \"handler\": [\n          \"before\"\n        ]\n      }\n    },\n    \"revisions\": {},\n    \"forms\": {\n      \"userLogin\": {\n        \"title\": \"User Login\",\n        \"type\": \"form\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"userRegister\": {\n        \"title\": \"User Register\",\n        \"type\": \"form\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"label\": \"Submit\",\n            \"input\": true,\n            \"type\": \"button\"\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      },\n      \"adminLogin\": {\n        \"title\": \"Admin Login\",\n        \"type\": \"form\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"pdfComponents\": [],\n        \"tags\": [],\n        \"components\": [\n          {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n          },\n          {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n          },\n          {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n          }\n        ],\n        \"access\": [\n          {\n            \"type\": \"read_all\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionAccess\": [\n          {\n            \"type\": \"create_own\",\n            \"roles\": [\n              \"anonymous\"\n            ]\n          }\n        ],\n        \"submissionRevisions\": \"\",\n        \"revisions\": \"\",\n        \"esign\": {}\n      }\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/project/69dfb6dcbb04c38a91029771/deploy"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:46:10 GMT"},{"key":"Content-Type","value":"text/html; charset=utf-8"},{"key":"Content-Length","value":"12"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"c-5nDqJ+j3DzeBYXbawKWXn7UbSHc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"Tag Deployed"}],"_postman_id":"840e3039-e3fa-41bc-bb49-acd6cd00b146"},{"name":"Delete a version","id":"b5189c4f-09f3-4c8e-9ff5-fbf01b04b762","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"{{ baseUrl }}/project/{{ projectId }}/tag/{{ tagId }}","description":"<p>This API is an <strong>Index API</strong> that returns all of the versions available for project. The projectId should be the project that contains all of the versions (which is typically the authoring project).</p>\n","urlObject":{"path":["project","{{ projectId }}","tag","{{ tagId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"d66f92bb-3b0d-45d8-8600-b2bc10afc4fe","name":"Delete a version","originalRequest":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"https://forms.example.com/project/69dfb6dcbb04c38a91029771/tag/69d65b8142ae1f2fed8c5f97"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:44:41 GMT"},{"key":"Content-Type","value":"text/plain; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"OK"}],"_postman_id":"b5189c4f-09f3-4c8e-9ff5-fbf01b04b762"},{"name":"Delete a stage","id":"86bd4953-4bfe-4664-85d1-3a97f4217450","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/project/{{ stageId }}","description":"<p>To delete a stage, simply send a DELETE API call to the project endpoint for the stage.</p>\n","urlObject":{"path":["project","{{ stageId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"9dd51f8d-8805-49a0-876c-81ff8c8f18bd","name":"Delete a stage","originalRequest":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"https://forms.example.com/project/69d6575f42ae1f2fed8c5980"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 13:41:28 GMT"},{"key":"Content-Type","value":"text/plain; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"OK"}],"_postman_id":"86bd4953-4bfe-4664-85d1-3a97f4217450"}],"id":"75368c5e-66c6-4c01-a04f-ef71ecea70f8","description":"<p>Stages provide a way to isolate your Project forms and resources to enable Form Management between different environments. Technically a stage is the same thing as a project, but what distinguishes it from a normal project is that it implements certain CORS restrictions that ensure they are only utilized for Form Management workflows and not for live applications.</p>\n<p>Here is a simple diagram that visually shows how stages can be used to connect to remotely deployed Form.io Enterprise servers to achieve form building workflows between disparate environments from within a single portal interface.</p>\n<img src=\"https://content.pstmn.io/6b6e9bd1-76a5-4783-81b7-2ede679b0a57/U2NyZWVuc2hvdCAyMDI2LTA0LTAyIGF0IDIuNTYuMjnigK9QTS5wbmc=\" alt />\n\n<p>For more information about staging, see the <a href=\"https://help.form.io/userguide/projects/stages#stage-configuration\">Stage Configuration Documentation</a> in <a href=\"https://help.form.io\">https://help.form.io</a></p>\n","_postman_id":"75368c5e-66c6-4c01-a04f-ef71ecea70f8"},{"name":"Multi-Tenant API","item":[{"name":"Create Tenant A","event":[{"listen":"test","script":{"id":"7fc0e92a-c7cc-4270-becc-10ab17c6f6af","exec":["pm.environment.set(\" tenantAId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"a6a34889-a84a-4dbf-9377-5e41f495667b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Tenant A\",\n  \"name\": \"tenanta\",\n  \"type\": \"tenant\",\n  \"project\": \"{{ projectId }}\",\n  \"settings\": {\n    \"cors\": \"*\"\n  }\n}"},"url":"{{ baseUrl }}/project","description":"<p>This request demonstrates how to create a new Tenant. The API for creating a tenant and a project are the same. The only difference is that you provide a \"project\" parameter within the stage to indicate that it is a tenant project, and the \"project\" value is the ID of the primary project. It is also important to provide a <code>type=tenant</code>.</p>\n<p>When creating a Tenant, there is also no need to provide a \"template\" when creating the tenant. The project provided is used as the template for the new tenant.</p>\n","urlObject":{"path":["project"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"59dc764f-f9a4-4b10-ace6-dcb4b3183279","name":"Create Tenant A","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Tenant A\",\n  \"name\": \"tenanta\",\n  \"type\": \"tenant\",\n  \"project\": \"69dfb6dcbb04c38a91029771\",\n  \"settings\": {\n    \"cors\": \"*\"\n  }\n}"},"url":"https://forms.example.com/project"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 14:15:56 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"859"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"35b-4roJqv5pnKQ5I602MYO0dfu3cSE\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d6631c040fa2cea25724d6\",\n    \"title\": \"Tenant A\",\n    \"name\": \"tenanta\",\n    \"type\": \"tenant\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"angular\",\n    \"protect\": false,\n    \"access\": [\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        }\n    ],\n    \"formDefaults\": null,\n    \"trial\": \"2026-04-08T14:15:56.508Z\",\n    \"created\": \"2026-04-08T14:15:56.508Z\",\n    \"modified\": \"2026-04-08T14:15:56.511Z\",\n    \"settings\": {\n        \"cors\": \"*\"\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {},\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"a6a34889-a84a-4dbf-9377-5e41f495667b"},{"name":"Create Tenant  B","event":[{"listen":"test","script":{"id":"7fc0e92a-c7cc-4270-becc-10ab17c6f6af","exec":["pm.environment.set(\" tenantAId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"5640e7ba-aa50-48b6-8681-6bb1d670b113","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Tenant B\",\n  \"name\": \"tenantb\",\n  \"type\": \"tenant\",\n  \"project\": \"{{ projectId }}\",\n  \"settings\": {\n    \"cors\": \"*\"\n  }\n}"},"url":"{{ baseUrl }}/project","description":"<p>This request demonstrates how to create a new Tenant. The API for creating a tenant and a project are the same. The only difference is that you provide a \"project\" parameter within the stage to indicate that it is a tenant project, and the \"project\" value is the ID of the primary project..</p>\n<p>When creating a Tenant, there is also no need to provide a \"template\" when creating the tenant. The project provided is used as the template for the new tenant.</p>\n","urlObject":{"path":["project"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"a42c2c74-33dd-440f-be9c-18e6afa850e6","name":"Create Tenant  B","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Tenant B\",\n  \"name\": \"tenantb\",\n  \"type\": \"tenant\",\n  \"project\": \"69dfb6dcbb04c38a91029771\",\n  \"settings\": {\n    \"cors\": \"*\"\n  }\n}"},"url":"https://forms.example.com/project"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 14:19:12 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"859"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"35b-jEehjuJUzdwzq9UbxS/g/5Qerc4\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d663df040fa2cea2572580\",\n    \"title\": \"Tenant B\",\n    \"name\": \"tenantb\",\n    \"type\": \"tenant\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"angular\",\n    \"protect\": false,\n    \"access\": [\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        }\n    ],\n    \"formDefaults\": null,\n    \"trial\": \"2026-04-08T14:19:11.917Z\",\n    \"created\": \"2026-04-08T14:19:11.917Z\",\n    \"modified\": \"2026-04-08T14:19:11.922Z\",\n    \"settings\": {\n        \"cors\": \"*\"\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {},\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"5640e7ba-aa50-48b6-8681-6bb1d670b113"},{"name":"Get tenants within a project","id":"063d395e-637d-4dc0-822a-6bb6d04d621e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/project?project={{ projectId }}&type=tenant&select=title,name","description":"<p>To retrieve a list of tenants within a project, use the Project API with the following query parameters set.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Query Parameter</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>project</td>\n<td>The project <code>_id</code> of the 'parent' project of the tenants.</td>\n</tr>\n<tr>\n<td>type</td>\n<td>The type of project under the parent to look for. Since we are looking for 'tenant's within a project, then this should be set to \"tenant\".</td>\n</tr>\n<tr>\n<td>select</td>\n<td>Only return the fields provided. This enables a more simplistic result returned from the API for efficiency purposes.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["project"],"host":["{{ baseUrl }}"],"query":[{"key":"project","value":"{{ projectId }}"},{"key":"type","value":"tenant"},{"key":"select","value":"title,name"}],"variable":[]}},"response":[{"id":"25d074d6-c95c-4b5c-a85f-95cb38212383","name":"Get tenants within a Project","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/project?project=69dfb6dcbb04c38a91029771&type=tenant&select=title,name","protocol":"https","host":["forms","example","com"],"path":["project"],"query":[{"key":"project","value":"69dfb6dcbb04c38a91029771"},{"key":"type","value":"tenant"},{"key":"select","value":"title,name"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 14:20:30 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"293"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-1/2"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"125-heq/Judw95UBvtaWmrR/t+aznR0\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d6631c040fa2cea25724d6\",\n        \"title\": \"Tenant A\",\n        \"name\": \"tenanta\"\n    },\n    {\n        \"_id\": \"69d663df040fa2cea2572580\",\n        \"title\": \"Tenant B\",\n        \"name\": \"tenantb\"\n    }\n]"}],"_postman_id":"063d395e-637d-4dc0-822a-6bb6d04d621e"},{"name":"Get Tenant Information","id":"b8bb6888-362a-47e6-a038-00e5c428f618","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/project/{{ tenantAId }}","description":"<p>To fetch tenant information, simply use the Project API (GET project) using the Tenant ID within the URL.</p>\n","urlObject":{"path":["project","{{ tenantAId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"52d734b0-191c-4a0d-b2ca-1acde9b52aa3","name":"Get Tenant Information","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"https://forms.example.com/project/69d663df040fa2cea2572580"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 14:28:39 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1258"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"4ea-yVTATVU3YZu5bRpsKR5h+USXaf4\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d663df040fa2cea2572580\",\n    \"title\": \"Tenant B\",\n    \"name\": \"tenantb\",\n    \"type\": \"tenant\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"angular\",\n    \"protect\": false,\n    \"access\": [\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        }\n    ],\n    \"formDefaults\": null,\n    \"trial\": \"2026-04-08T14:19:11.917Z\",\n    \"created\": \"2026-04-08T14:19:11.917Z\",\n    \"modified\": \"2026-04-08T14:19:11.922Z\",\n    \"apiCalls\": {\n        \"limit\": {\n            \"options\": {\n                \"server\": true,\n                \"pdf\": true,\n                \"premium\": true,\n                \"offline\": true,\n                \"reporting\": true,\n                \"appserver\": true,\n                \"sac\": true\n            },\n            \"endpoints\": [\n                \".*\"\n            ],\n            \"hostnames\": [\n                \".*\"\n            ],\n            \"stages\": 7,\n            \"tenants\": 0,\n            \"projectsNumberLimit\": 10,\n            \"formManagers\": 1,\n            \"scopes\": [\n                \"apiServer\",\n                \"pdfServer\",\n                \"project\",\n                \"formManager\",\n                \"tenant\",\n                \"stage\"\n            ]\n        },\n        \"used\": {},\n        \"licenseId\": \"remote\",\n        \"formManager\": true,\n        \"accessibility\": true,\n        \"tenant\": true\n    },\n    \"settings\": {\n        \"cors\": \"*\"\n    },\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {},\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"b8bb6888-362a-47e6-a038-00e5c428f618"},{"name":"Update Tenant","id":"ae878ebf-1202-4a94-af7b-4b115a515384","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69d663df040fa2cea2572580\",\n  \"title\": \"Tenant B\",\n  \"name\": \"tenantb-246\",\n  \"type\": \"tenant\",\n  \"tag\": \"0.0.0\",\n  \"owner\": \"650a5bfdb9ac8160c0968e59\",\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"plan\": \"commercial\",\n  \"steps\": [],\n  \"framework\": \"angular\",\n  \"protect\": false,\n  \"access\": [\n    {\n      \"type\": \"team_read\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_write\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_admin\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_access\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_all\",\n      \"roles\": []\n    }\n  ],\n  \"formDefaults\": null,\n  \"trial\": \"2026-04-08T14:19:11.917Z\",\n  \"created\": \"2026-04-08T14:19:11.917Z\",\n  \"modified\": \"2026-04-08T14:19:11.922Z\",\n  \"apiCalls\": {\n    \"limit\": {\n      \"options\": {\n        \"server\": true,\n        \"pdf\": true,\n        \"premium\": true,\n        \"offline\": true,\n        \"reporting\": true,\n        \"appserver\": true,\n        \"sac\": true\n      },\n      \"endpoints\": [\n        \".*\"\n      ],\n      \"hostnames\": [\n        \".*\"\n      ],\n      \"stages\": 7,\n      \"tenants\": 0,\n      \"projectsNumberLimit\": 10,\n      \"formManagers\": 1,\n      \"scopes\": [\n        \"apiServer\",\n        \"pdfServer\",\n        \"project\",\n        \"formManager\",\n        \"tenant\",\n        \"stage\"\n      ]\n    },\n    \"used\": {},\n    \"licenseId\": \"remote\",\n    \"formManager\": true,\n    \"accessibility\": true,\n    \"tenant\": true\n  },\n  \"settings\": {\n    \"cors\": \"*\"\n  },\n  \"public\": {\n    \"formModule\": \"\",\n    \"custom\": {},\n    \"defaultStage\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/project/{{ tenantAId }}","description":"<p>To update a tenant, simply use the Project API (Update Project) endpoint against the Tenant ID within the URL.</p>\n","urlObject":{"path":["project","{{ tenantAId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"c8d75557-1a83-4700-a6ed-781a19701b9c","name":"Update Tenant","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69d663df040fa2cea2572580\",\n  \"title\": \"Tenant B\",\n  \"name\": \"tenantb\",\n  \"type\": \"tenant\",\n  \"tag\": \"0.0.0\",\n  \"owner\": \"650a5bfdb9ac8160c0968e59\",\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"plan\": \"commercial\",\n  \"steps\": [],\n  \"framework\": \"angular\",\n  \"protect\": false,\n  \"access\": [\n    {\n      \"type\": \"team_read\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_write\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_admin\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"team_access\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"create_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"read_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"update_all\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": []\n    },\n    {\n      \"type\": \"delete_all\",\n      \"roles\": []\n    }\n  ],\n  \"formDefaults\": null,\n  \"trial\": \"2026-04-08T14:19:11.917Z\",\n  \"created\": \"2026-04-08T14:19:11.917Z\",\n  \"modified\": \"2026-04-08T14:19:11.922Z\",\n  \"apiCalls\": {\n    \"limit\": {\n      \"options\": {\n        \"server\": true,\n        \"pdf\": true,\n        \"premium\": true,\n        \"offline\": true,\n        \"reporting\": true,\n        \"appserver\": true,\n        \"sac\": true\n      },\n      \"endpoints\": [\n        \".*\"\n      ],\n      \"hostnames\": [\n        \".*\"\n      ],\n      \"stages\": 7,\n      \"tenants\": 0,\n      \"projectsNumberLimit\": 10,\n      \"formManagers\": 1,\n      \"scopes\": [\n        \"apiServer\",\n        \"pdfServer\",\n        \"project\",\n        \"formManager\",\n        \"tenant\",\n        \"stage\"\n      ]\n    },\n    \"used\": {},\n    \"licenseId\": \"remote\",\n    \"formManager\": true,\n    \"accessibility\": true,\n    \"tenant\": true\n  },\n  \"settings\": {\n    \"cors\": \"*\"\n  },\n  \"public\": {\n    \"formModule\": \"\",\n    \"custom\": {},\n    \"defaultStage\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/project/69d663df040fa2cea2572580"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 14:30:03 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"849"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"351-eprHo9ojUwndUfYjCj17XfEMXy8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Tenant B\",\n    \"name\": \"tenantb\",\n    \"type\": \"tenant\",\n    \"tag\": \"0.0.0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"plan\": \"commercial\",\n    \"steps\": [],\n    \"framework\": \"angular\",\n    \"protect\": false,\n    \"access\": [\n        {\n            \"type\": \"team_read\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_write\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_admin\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"team_access\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"create_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"read_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"update_all\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": []\n        },\n        {\n            \"type\": \"delete_all\",\n            \"roles\": []\n        }\n    ],\n    \"trial\": \"2026-04-08T14:19:11.917Z\",\n    \"formDefaults\": null,\n    \"_id\": \"69d663df040fa2cea2572580\",\n    \"created\": \"2026-04-08T14:19:11.917Z\",\n    \"modified\": \"2026-04-08T14:30:03.759Z\",\n    \"settings\": {},\n    \"public\": {\n        \"formModule\": \"\",\n        \"custom\": {},\n        \"defaultStage\": \"\"\n    }\n}"}],"_postman_id":"ae878ebf-1202-4a94-af7b-4b115a515384"},{"name":"Create a Tenant Administrator","event":[{"listen":"test","script":{"id":"70967b63-102d-4443-bc16-385c135fe886","exec":["pm.environment.set(\" tenantAdminEmail \", pm.response.json().data.email);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"bf12ddaf-fd08-402a-8d77-8165532ffe12","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"Sean.Schmitt75@yahoo.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/project/{{ tenantAId }}/admin/submission","urlObject":{"path":["project","{{ tenantAId }}","admin","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"f42194ed-389c-49b4-b45a-9b87c0de2187","name":"Create a Tenant Administrator","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"derick.mosciski@hotmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/project/69d663df040fa2cea2572580/admin/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 14:38:38 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"699"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2bb-QOrAH7mN5eBJYN4ALt7oWp2VIec\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69d663df040fa2cea25725a0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"69d663df040fa2cea257258d\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"102\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"email\": \"derick.mosciski@hotmail.com\"\n    },\n    \"_id\": \"69d6686e040fa2cea2572754\",\n    \"_fvid\": 0,\n    \"project\": \"69d663df040fa2cea2572580\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-08T14:38:38.188Z\",\n    \"modified\": \"2026-04-08T14:38:38.188Z\"\n}"}],"_postman_id":"bf12ddaf-fd08-402a-8d77-8165532ffe12"},{"name":"Login as a Tenant Administrator","event":[{"listen":"test","script":{"id":"d6c0ce61-4b1a-4f7a-9aa0-a02d4831b73c","exec":["pm.environment.set(\" tenantAdminJWT \", pm.response.headers.get('x-jwt-token'));"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"fda04c55-ddef-48f6-8360-ac8b331efbb4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"{{ tenantAdminEmail }}\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/project/{{ tenantAId }}/admin/login","urlObject":{"path":["project","{{ tenantAId }}","admin","login"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"07feb943-4d57-459a-ab8a-bb80f85d20ba","name":"Login as a Tenant Administrator","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"derick.mosciski@hotmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/project/69d663df040fa2cea2572580/admin/login"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 14:40:19 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"743"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2e7-hh5qULftZXsdkS/787cPeK50ORU\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d6686e040fa2cea2572754\",\n    \"form\": \"69d663df040fa2cea25725a0\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"69d663df040fa2cea257258d\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"102\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"login\": {\n            \"attempts\": 0,\n            \"last\": 1775659219488\n        }\n    },\n    \"data\": {\n        \"email\": \"derick.mosciski@hotmail.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d663df040fa2cea2572580\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-08T14:38:38.188Z\",\n    \"modified\": \"2026-04-08T14:38:38.188Z\"\n}"}],"_postman_id":"fda04c55-ddef-48f6-8360-ac8b331efbb4"},{"name":"Create a new form as a Tenant Admin","id":"ec0cc8e2-cf6f-420c-87c2-31ccafbdfb0b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ tenantAdminJWT }}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"New Form\",\n  \"path\": \"newform\",\n  \"name\": \"newform\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\"\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\"\n    }\n  ]\n}"},"url":"{{ baseUrl }}/project/{{ tenantAId }}/form","description":"<p>Now that the tenant is authenticated, they can have full admin privilages over their project, without any permissions into other tenants.</p>\n","urlObject":{"path":["project","{{ tenantAId }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"eb82c398-76e8-4fd7-8277-e0210a2597fd","name":"Create a new form as a Tenant Admin","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ tenantAdminJWT }}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"New Form\",\n  \"path\": \"newform\",\n  \"name\": \"newform\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\"\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\"\n    }\n  ]\n}"},"url":"https://forms.example.com/project/69d663df040fa2cea2572580/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 14:41:53 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"648"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"288-OOHzTuDMMdgTpJ/2WqMgT/x6Wtw\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d66931040fa2cea2572792\",\n    \"title\": \"New Form\",\n    \"name\": \"newform\",\n    \"path\": \"newform\",\n    \"type\": \"form\",\n    \"tags\": [],\n    \"owner\": \"69d6686e040fa2cea2572754\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\"\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"project\": \"69d663df040fa2cea2572580\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d663df040fa2cea257258d\",\n                \"69d663df040fa2cea2572591\",\n                \"69d663df040fa2cea2572595\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"created\": \"2026-04-08T14:41:53.814Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-08T14:41:53.818Z\",\n    \"machineName\": \"undefined:newform\"\n}"}],"_postman_id":"ec0cc8e2-cf6f-420c-87c2-31ccafbdfb0b"},{"name":"Delete a Tenant","id":"eb553683-0f62-4ebc-b8ae-1c1b88225efd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/project/{{ tenantAId }}","description":"<p>To delete a tenant, simply send the Project API (Delete Project) to the tenant endpoint with the <code>_id</code> of the tenant as the Project ID.</p>\n","urlObject":{"path":["project","{{ tenantAId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"eb553683-0f62-4ebc-b8ae-1c1b88225efd"}],"id":"cc2133dd-265a-4ac9-a1ff-fb5a1e06e4b0","description":"<p>The Form.io platform seamlessly supports advanced multi-tenant configurations for SaaS, cloud-based, or On-Premise applications. With Form.io Multi-Tenancy, each tenant functions as a self-contained entity within a single <strong>Parent</strong> <strong>Project</strong>. This Parent Project serves as the central hub for managing all Tenants within the Project.</p>\n","_postman_id":"cc2133dd-265a-4ac9-a1ff-fb5a1e06e4b0"}],"id":"37c9051b-96c7-44b1-9596-76805a6ae71d","description":"<p>The Platform APIs consist of APIs that are used to manage a Form.io deployment. You would use these APIs if you wish to automate Project creation, team collaboration, as well as staging and deployments. These APIs are typically utilized within a deployment with an environment variable <code>PORTAL_ENABLED=true</code>. Enabling this environment variable will then create a special project called the <strong>Portal Base</strong> project.</p>\n","_postman_id":"37c9051b-96c7-44b1-9596-76805a6ae71d"},{"name":"Project Scope","item":[{"name":"Authentication","item":[{"name":"Admin Resource","id":"6b7330f3-e10c-49ab-b022-0359a6b75ef0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/admin","description":"<p>To determine if a project has the ability to authenticate as a project administrator within the project scope, a separate resource called the Admin resource is used to contain all of the accounts with project admin access.</p>\n<p>If the response to this API is 404, then this simply means that this project does have this authentication mechanism enabled.</p>\n","urlObject":{"path":["{{ projectName }}","admin"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"6b7330f3-e10c-49ab-b022-0359a6b75ef0"},{"name":"Create Project Admin","event":[{"listen":"test","script":{"id":"442d9f51-f9f1-4aa1-9ac5-412481712bd0","exec":["pm.environment.set(\" projectAdminEmail \", pm.response.json().data.email);","pm.environment.set(\" projectAdminId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"95d323c4-5e08-4f33-85cb-5f46fa4bc9af","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"Cleta7@gmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/admin/submission","description":"<p>If the project has the Admin resource, then it is possible to add a new project administrator by simply submitting the Admin resource form with the admin information.</p>\n","urlObject":{"path":["{{ projectName }}","admin","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"bb856734-411f-441b-86f3-fc319d151fab","name":"Create Project Admin","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"jacynthe_johns@yahoo.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/admin/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:24:27 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"695"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2b7-EMEXnSj0l19zctBLLF9FzG+Ybds\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69d65f4e040fa2cea2572267\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"69d65f4e040fa2cea2572254\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"99\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"email\": \"jacynthe_johns@yahoo.com\"\n    },\n    \"_id\": \"69d6813b040fa2cea257285a\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-08T16:24:27.923Z\",\n    \"modified\": \"2026-04-08T16:24:27.923Z\"\n}"}],"_postman_id":"95d323c4-5e08-4f33-85cb-5f46fa4bc9af"},{"name":"List project admins","id":"6c7b67e2-0a5d-4267-aae0-1ac35f27c53d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/admin/submission","description":"<p>You can use the submission Index API to fetch all of the administrators for a project using the Submission API.</p>\n","urlObject":{"path":["{{ projectName }}","admin","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"b130011a-69ae-4350-8e16-176609905d47","name":"List project admins","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}"}],"url":"https://forms.example.com/example/admin/submission"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:25:24 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"697"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"2b9-ExTG/nEA4Fr7s+joPQDLCwV1aCU\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d6813b040fa2cea257285a\",\n        \"form\": \"69d65f4e040fa2cea2572267\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"roles\": [\n            \"69d65f4e040fa2cea2572254\"\n        ],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"99\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            }\n        },\n        \"data\": {\n            \"email\": \"jacynthe_johns@yahoo.com\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-08T16:24:27.923Z\",\n        \"modified\": \"2026-04-08T16:24:27.923Z\"\n    }\n]"}],"_postman_id":"6c7b67e2-0a5d-4267-aae0-1ac35f27c53d"},{"name":"Get project admin","id":"ea26a192-42d5-4f73-9f8e-023beda265bb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/admin/submission/{{ projectAdminId }}","urlObject":{"path":["{{ projectName }}","admin","submission","{{ projectAdminId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"9fccfc0b-7c6f-41d7-b56a-48b8537c2355","name":"Get project admin","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/admin/submission/69d6813b040fa2cea257285a"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:26:34 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"695"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2b7-7GgXrNXaR9qtTiEx4y0irwAfAys\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d6813b040fa2cea257285a\",\n    \"form\": \"69d65f4e040fa2cea2572267\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"69d65f4e040fa2cea2572254\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"99\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"email\": \"jacynthe_johns@yahoo.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-08T16:24:27.923Z\",\n    \"modified\": \"2026-04-08T16:24:27.923Z\"\n}"}],"_postman_id":"ea26a192-42d5-4f73-9f8e-023beda265bb"},{"name":"Admin Login Form","id":"5ddf1b46-c2ba-42ab-9c1c-603f5195793f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{ baseUrl }}/{{ projectName }}/admin/login","description":"<p>The Admin Login form provides the fields that are required in order to 'login' as the administrator for a project.</p>\n","urlObject":{"path":["{{ projectName }}","admin","login"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"93e6b272-4f9f-4c34-b2bf-ec3da9f4c5b1","name":"Admin Login Form","originalRequest":{"method":"GET","header":[],"url":"https://forms.example.com/example/admin/login"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:27:04 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1190"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"4a6-RzNRp54Qj7lB2lJFixwC3k20P3U\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d65f4e040fa2cea2572281\",\n    \"title\": \"Admin Login\",\n    \"name\": \"adminLogin\",\n    \"path\": \"admin/login\",\n    \"type\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea257225c\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [\n        {\n            \"type\": \"create_own\",\n            \"roles\": [\n                \"69d65f4e040fa2cea257225c\"\n            ]\n        }\n    ],\n    \"owner\": null,\n    \"components\": [\n        {\n            \"type\": \"email\",\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your email address\",\n            \"key\": \"email\",\n            \"lockKey\": true,\n            \"label\": \"Email\",\n            \"inputType\": \"email\",\n            \"tableView\": true,\n            \"input\": true\n        },\n        {\n            \"type\": \"password\",\n            \"persistent\": true,\n            \"protected\": true,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"Enter your password.\",\n            \"key\": \"password\",\n            \"lockKey\": true,\n            \"label\": \"Password\",\n            \"inputType\": \"password\",\n            \"tableView\": false,\n            \"input\": true\n        },\n        {\n            \"type\": \"button\",\n            \"theme\": \"primary\",\n            \"disableOnInvalid\": true,\n            \"action\": \"submit\",\n            \"block\": false,\n            \"rightIcon\": \"\",\n            \"leftIcon\": \"\",\n            \"size\": \"md\",\n            \"key\": \"submit\",\n            \"tableView\": false,\n            \"label\": \"Submit\",\n            \"input\": true\n        }\n    ],\n    \"pdfComponents\": [],\n    \"machineName\": \"example:adminLogin\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"created\": \"2026-04-08T13:59:42.737Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-08T13:59:42.741Z\"\n}"}],"_postman_id":"5ddf1b46-c2ba-42ab-9c1c-603f5195793f"},{"name":"Admin Login Actions","id":"eb6fd8aa-c5cc-4ec5-abb6-9b0e56251ac7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/admin/login/action","description":"<p>It is possible to see the actions that are going to be executed during a login event. In this case, we can see that the Login action is added to this form. Within the configuration of the action, it states that the Admin resource is used as the 'user' table for the login methods.</p>\n","urlObject":{"path":["{{ projectName }}","admin","login","action"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"bb0e5f38-e1ef-4c95-9265-caaf1bcdf17a","name":"Admin Login Actions","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/admin/login/action"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 06 Apr 2026 18:41:25 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"346"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"15a-eqSaT1bpVsO6GgRfHJgvFA7RD28\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"651185882e5eae71be60b365\",\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"handler\": [\n            \"before\"\n        ],\n        \"method\": [\n            \"create\"\n        ],\n        \"priority\": 2,\n        \"settings\": {\n            \"resources\": [\n                \"651185882e5eae71be60b32e\"\n            ],\n            \"username\": \"email\",\n            \"password\": \"password\",\n            \"allowedAttempts\": 5,\n            \"attemptWindow\": 30,\n            \"lockWait\": 1800\n        },\n        \"form\": \"651185882e5eae71be60b342\",\n        \"machineName\": \"sandbox:adminLogin:login\"\n    }\n]"},{"id":"0d43c30a-a379-49b2-bc30-13a43046a870","name":"Admin Login Actions","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/admin/login/action"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:27:16 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"350"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"15e-z1Ij/fIrAI3eZUd4fvjjq8VQILY\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65f4e040fa2cea25722a5\",\n        \"title\": \"Login\",\n        \"name\": \"login\",\n        \"handler\": [\n            \"before\"\n        ],\n        \"method\": [\n            \"create\"\n        ],\n        \"priority\": 2,\n        \"settings\": {\n            \"resources\": [\n                \"69d65f4e040fa2cea2572267\"\n            ],\n            \"username\": \"email\",\n            \"password\": \"password\",\n            \"allowedAttempts\": 5,\n            \"attemptWindow\": 30,\n            \"lockWait\": 1800\n        },\n        \"form\": \"69d65f4e040fa2cea2572281\",\n        \"machineName\": \"example:adminLogin:login\"\n    }\n]"}],"_postman_id":"eb6fd8aa-c5cc-4ec5-abb6-9b0e56251ac7"},{"name":"Project Admin Login","event":[{"listen":"test","script":{"id":"1f841f97-f5e2-4a24-8953-c48de46572c3","exec":["pm.environment.set(\" projectAdminJWT \", pm.response.headers.get('x-jwt-token'));"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"7a3e9886-d024-4414-9858-8df2a27fbf83","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"{{ projectAdminEmail }}\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/admin/login/submission","description":"<p>To login as the project admin, you simply need to submit the admin login form shown above. The response headers will contain the project administrator token within the <code>x-jwt-token</code> response header. This token will be used in other requests within this documentation as the <code>projectAdminJWT</code> variable.</p>\n","urlObject":{"path":["{{ projectName }}","admin","login","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"9c3aeb17-62fd-43bb-9ee9-4344f70fc484","name":"Project Admin Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"jacynthe_johns@yahoo.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/admin/login/submission"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:28:51 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"739"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2e3-pKvtbHArfs2TXhFidkDPw4bGGaA\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d6813b040fa2cea257285a\",\n    \"form\": \"69d65f4e040fa2cea2572267\",\n    \"owner\": \"650a5bfdb9ac8160c0968e59\",\n    \"roles\": [\n        \"69d65f4e040fa2cea2572254\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"99\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"login\": {\n            \"attempts\": 0,\n            \"last\": 1775665731804\n        }\n    },\n    \"data\": {\n        \"email\": \"jacynthe_johns@yahoo.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-08T16:24:27.923Z\",\n    \"modified\": \"2026-04-08T16:24:27.923Z\"\n}"}],"_postman_id":"7a3e9886-d024-4414-9858-8df2a27fbf83"},{"name":"Delete project admin","id":"b3fa07f1-c15c-4234-8940-313454038912","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ platformAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/admin/submission/{{ projectAdminToDeleteId }}","description":"<p>To delete an administrator simply provide the _id of the administrator user object within the URL and send an API DELETE command.</p>\n","urlObject":{"path":["{{ projectName }}","admin","submission","{{ projectAdminToDeleteId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b3fa07f1-c15c-4234-8940-313454038912"}],"id":"5b15f957-96ad-4d4d-982c-c0234fdb0d46","description":"<p>Authentication within the project scope provides scoped access for a single project. Because of this, it is not possible to use a token created within the project scope to use APIs for a separate project or at the Platform Scope. There are a number of ways to perform Authentication at this scope and they are described as follows:</p>\n<ul>\n<li><p><strong>Login Action</strong> - The login action provides a JWT token within the response headers of the request that submitted the form that contains the Login Action. This JWT token is then used to provide an <code>x-jwt-token</code> header for each API request made within the project endpoint scope. The Login Action uses fields within a Form to be desingated as the 'username' and 'password'. The username field is used as a 'lookup' for the record that is being authenticated, and the password is used to prove that the person submitting the request is able to 'claim' that record as their authentication.</p>\n</li>\n<li><p><strong>API Key</strong>s - API Keys are saved within the project settings <code>keys</code> property. These keys provide full read/write/admin access to all APIs within a project scope. They are provided using the <code>x-token</code> header.</p>\n</li>\n<li><p><strong>OIDC</strong> - As documented above</p>\n</li>\n<li><p><strong>SAML</strong> - As documented above</p>\n</li>\n<li><p><strong>LDAP</strong> - As documented above</p>\n</li>\n<li><p><strong>Token Swap</strong> - The token swap process allowed for a configured project to 'swap' an Authorization bearer token with a valid Form.io JWT token. See documentation above for more information.</p>\n</li>\n</ul>\n<p>For this documentation, and for the sake of simplicity of documentation, we will use the Form.io authentication as the method described within this documentation.</p>\n","_postman_id":"5b15f957-96ad-4d4d-982c-c0234fdb0d46"},{"name":"Project Roles","item":[{"name":"List Roles within Project","event":[{"listen":"test","script":{"id":"53579ecb-aad1-4d03-8d7b-718cbde11767","exec":["(pm.response.json() || []).forEach(function (role) {","    if (role.title === 'Administrator') {","        pm.environment.set(\" projectAdminRoleId \", role._id);","    }","    else if (role.title === 'Anonymous') {","        pm.environment.set(\" projectAnonymousRoleId \", role._id);","    }","    else if (role.title === 'Authenticated') {","        pm.environment.set(\" projectAuthenticatedRoleId \", role._id);","    }","});"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"9227f510-592e-44bf-b755-aa68591ce615","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/role","description":"<p>This API call will list all roles available within a project.</p>\n","urlObject":{"path":["{{ projectName }}","role"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"87808c5f-ef44-4d68-80bc-db0e7e4804e4","name":"List Roles within Project","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/role"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:31:58 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"861"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-2/3"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"35d-ez12MLlPJ8VBXYFelO5UGzdvZoU\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65f4e040fa2cea2572254\",\n        \"title\": \"Administrator\",\n        \"description\": \"A role for Administrative Users.\",\n        \"default\": false,\n        \"admin\": true,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"machineName\": \"example:administrator\",\n        \"created\": \"2026-04-08T13:59:42.647Z\",\n        \"modified\": \"2026-04-08T13:59:42.650Z\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea257225c\",\n        \"title\": \"Anonymous\",\n        \"description\": \"A role for Anonymous Users.\",\n        \"default\": true,\n        \"admin\": false,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"machineName\": \"example:anonymous\",\n        \"created\": \"2026-04-08T13:59:42.658Z\",\n        \"modified\": \"2026-04-08T13:59:42.660Z\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea2572258\",\n        \"title\": \"Authenticated\",\n        \"description\": \"A role for Authenticated Users.\",\n        \"default\": false,\n        \"admin\": false,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"machineName\": \"example:authenticated\",\n        \"created\": \"2026-04-08T13:59:42.653Z\",\n        \"modified\": \"2026-04-08T13:59:42.655Z\"\n    }\n]"}],"_postman_id":"9227f510-592e-44bf-b755-aa68591ce615"},{"name":"Create a new Role","event":[{"listen":"test","script":{"id":"52bd1e13-3684-464b-8b55-da0e11683775","exec":["pm.environment.set(\" employeeRoleId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"796cadde-e86f-4b6e-9ab1-0b037111bc85","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee\",\n  \"description\": \"A person who belongs to a company.\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/role","urlObject":{"path":["{{ projectName }}","role"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"59f7886a-5969-47d6-9217-813f613fafcb","name":"Create a new Role","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee\",\n  \"description\": \"A person who belongs to a company.\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/role"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:32:16 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"283"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"11b-IPkQSHWacXi6p2KLYtH9j5Me9+s\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Employee\",\n    \"description\": \"A person who belongs to a company.\",\n    \"default\": false,\n    \"admin\": false,\n    \"_id\": \"69d68310040fa2cea2572945\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"created\": \"2026-04-08T16:32:16.889Z\",\n    \"modified\": \"2026-04-08T16:32:16.892Z\",\n    \"machineName\": \"example:employee\"\n}"}],"_postman_id":"796cadde-e86f-4b6e-9ab1-0b037111bc85"},{"name":"Update a Role","event":[{"listen":"test","script":{"id":"cab49550-1543-4ede-8822-c02efa2a90b9","exec":["pm.test(\"Ensure the role was updated\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.description).to.eql(\"A person who belongs to a company.\");","});"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"10584d49-3d35-40ee-bcd4-df8bb2af4ede","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee\",\n  \"description\": \"A person who belongs to a company.\"\n}"},"url":"{{ baseUrl }}/{{ projectName }}/role/{{ employeeRoleId }}","description":"<p>A role can be updated by using the _id of the role and sending a PUT request with the complete update payload.</p>\n","urlObject":{"path":["{{ projectName }}","role","{{ employeeRoleId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"12924278-c504-490c-a61d-fd8f1270f95f","name":"Update a Role","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee\",\n  \"description\": \"A person who belongs to a company.\"\n}"},"url":"https://forms.example.com/example/role/69d68310040fa2cea2572945"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:33:14 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"283"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"11b-cU2/k4RcKthTK+/f5hJ2Yrb+h3s\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Employee\",\n    \"description\": \"A person who belongs to a company.\",\n    \"default\": false,\n    \"admin\": false,\n    \"_id\": \"69d68310040fa2cea2572945\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"created\": \"2026-04-08T16:32:16.889Z\",\n    \"modified\": \"2026-04-08T16:33:14.007Z\",\n    \"machineName\": \"example:employee\"\n}"}],"_postman_id":"10584d49-3d35-40ee-bcd4-df8bb2af4ede"}],"id":"bc76a332-99e9-4345-9d69-0d13c4b8b3a9","description":"<p>Here are some requests for listing, creating, and editing roles within a project.</p>\n","_postman_id":"bc76a332-99e9-4345-9d69-0d13c4b8b3a9"},{"name":"Forms API","item":[{"name":"Get forms and resources","id":"d9d367ef-2a1c-4de6-88f8-0a950a460361","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?select=title,name,type,path","description":"<p>This endpoint lists all forms and resources within the project. It follows the <strong>IndexAPI</strong> to search and paginate the list of forms within a project.</p>\n<p><strong>To query for specific forms</strong></p>\n<p>In order to find specific forms within the project, you can also perform queries for any poperty within the form. A typical form object is as follows.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"_id\": \"57cf908e6605476b00fab81f\",\n    \"title\": \"User Registration\",\n    \"name\": \"userRegistration\",\n    \"path\": \"register\",\n    \"type\": \"form\",\n    \"display\": \"wizard\",\n    \"tags\": [\"user\", \"register\"],\n    \"components\": [],\n    \"settings\": {},\n    \"properties\": {},\n    \"modified\": \"2016-09-07T03:59:10.836Z\",\n    \"project\": \"57c6d2a1783e146f00bc65c4\",\n    \"created\": \"2016-09-07T03:59:10.818Z\",\n    \"access\": [],\n    \"submissionAccess\": [],\n    \"owner\": \"553dbfc08d22d5cb1a7024f2\"\n}\n\n</code></pre><p>Where the form components can be found within the <code>components</code> array. So, lets say you wish to find all forms that are categorized with the tag of \"register\". You could use the following API.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{{baseUrl}}/{{projectName}}/form?type=form&amp;tags=register\n\n</code></pre><p>In addition to using <code>=</code> you can use a number of other parameters and search criteria to fully refine your search. These parameters are as follows.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Filter</th>\n<th>Query</th>\n<th>Example</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>equal</strong></td>\n<td><code>equals</code></td>\n<td><code>/form?type=form</code></td>\n<td>All forms that are of type \"form\"</td>\n</tr>\n<tr>\n<td><strong>not equal</strong></td>\n<td><code>ne</code></td>\n<td><code>/form?type=form&amp;display__ne=wizard</code></td>\n<td>returns all forms that are of type \"form\" that are NOT wizards</td>\n</tr>\n<tr>\n<td><strong>greater than</strong></td>\n<td><code>gt</code></td>\n<td><code>/form?created__gt=2016-09-07T03:59:10.818Z</code></td>\n<td>returns all forms and resources that were created after a certain date</td>\n</tr>\n<tr>\n<td><strong>greater than or equal to</strong></td>\n<td><code>gte</code></td>\n<td><code>/form?created__gte=2016-09-07T03:59:10.818Z</code></td>\n<td>returns all forms and resources that were created after or on a certain date</td>\n</tr>\n<tr>\n<td><strong>less than</strong></td>\n<td><code>lt</code></td>\n<td><code>/form?created__lt=2016-09-07T03:59:10.818Z</code></td>\n<td>returns all forms that were created before a certain date</td>\n</tr>\n<tr>\n<td><strong>less than or equal to</strong></td>\n<td><code>lte</code></td>\n<td><code>/form?created__lte=2016-09-07T03:59:10.818Z</code></td>\n<td>returns all forms that were created before or on a certain date</td>\n</tr>\n<tr>\n<td><strong>in</strong></td>\n<td><code>in</code></td>\n<td><code>/form?display__in=form,wizard</code></td>\n<td>returns all forms that are either a form or a wizard</td>\n</tr>\n<tr>\n<td><strong>nin</strong></td>\n<td><code>nin</code></td>\n<td><code>/form?display__nin=form,wizard</code></td>\n<td>returns all forms that are neither a form nor a wizard</td>\n</tr>\n<tr>\n<td><strong>exists=true</strong></td>\n<td><code>exists</code></td>\n<td><code>/form?settings.theme__exists=true</code></td>\n<td>returns forms that have a configuration for the theme set.</td>\n</tr>\n<tr>\n<td><strong>exists=false</strong></td>\n<td><code>exists</code></td>\n<td><code>/form?settings.theme__exists=false</code></td>\n<td>returns forms that do not have a configuration for the theme set.</td>\n</tr>\n<tr>\n<td><strong>Regex</strong></td>\n<td><code>regex</code></td>\n<td><code>/form?path__regex=/^register/i</code></td>\n<td>returns all forms that have an endpoint path that starts with register.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Pagination Queries</strong></p>\n<p>In addition to searching for records within the endpoint based on the data, you can also provide the following parameters to perform Pagination queries.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Query Parameter</th>\n<th>Example</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>limit</strong></td>\n<td><code>/form?limit=20</code></td>\n<td>Returns at most 20 forms</td>\n</tr>\n<tr>\n<td><strong>skip</strong></td>\n<td><code>/form?limit=20&amp;skip=40</code></td>\n<td>Returns 20 forms skiping the first 40 (i.e. 2nd page)</td>\n</tr>\n<tr>\n<td><strong>sort</strong></td>\n<td><code>/form?limit=10&amp;skip=30&amp;sort=created</code></td>\n<td>Returns 10 forms, skiping 30 (i.e. 3rd page), sorted by \"created\" in ascending order</td>\n</tr>\n<tr>\n<td><strong>-sort</strong></td>\n<td><code>/form?limit=10&amp;skip=30&amp;sort=-created</code></td>\n<td>Returns 10 forms, skiping 30 (i.e. 3rd page), sorted by \"created\" in descending order</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Field Selection</strong></p>\n<p>When performing index queries, it is always good practice to ask the endpoint to ONLY return the fields that you need within your application. This keeps the queries performant and also cuts down significantly on network traffic used when performing these queries. This is done using the <strong>select</strong> query parameter. For example, if you wish to return a list of forms, but only include the <strong>Title</strong>, <strong>Name</strong>, and <strong>Path</strong>, you could do the following.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{{baseUrl}}/{{projectName}}/form?select=title,name,path\n\n</code></pre><p>This will return records that look like the following.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>[\n    {\n        \"_id\": \"5bab7f38f7e0d198a9965888\",\n        \"title\": \"User\",\n        \"name\": \"user\",\n        \"path\": \"user\"\n    },\n    {\n        \"_id\": \"5bab7f38f7e0d1969296588a\",\n        \"title\": \"User Login\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\"\n    },\n    {\n        \"_id\": \"5bab7f38f7e0d1ed1f96588b\",\n        \"title\": \"User Register\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\"\n    }\n]\n\n</code></pre>","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"select","value":"title,name,type,path"}],"variable":[]}},"response":[{"id":"cd28a45f-68fe-4681-8113-fbf8d30b231c","name":"Get forms and resources","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/form?select=title,name,type,path","protocol":"https","host":["forms","example","com"],"path":["example","form"],"query":[{"key":"select","value":"title,name,type,path"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:33:52 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"653"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-5/6"},{"key":"Link","value":""},{"key":"Last-Modified","value":"Wed, 08 Apr 2026 13:59:42 GMT"},{"key":"ETag","value":"W/\"28d-ITUnqAQLwaqBzXR7AEO/sqIqhW8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65f4e040fa2cea2572261\",\n        \"title\": \"User\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"type\": \"resource\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea2572267\",\n        \"title\": \"Admin\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"type\": \"resource\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea257226d\",\n        \"title\": \"Reporting UI\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"type\": \"resource\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea2572273\",\n        \"title\": \"User Login\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"type\": \"form\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea257227a\",\n        \"title\": \"User Register\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"type\": \"form\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea2572281\",\n        \"title\": \"Admin Login\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"type\": \"form\"\n    }\n]"}],"_postman_id":"d9d367ef-2a1c-4de6-88f8-0a950a460361"},{"name":"Get forms","id":"390408d9-10d3-43f7-afdc-9d0ae7b6b87a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?type=form&select=title,name,path,type","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"type","value":"form"},{"key":"select","value":"title,name,path,type"}],"variable":[]}},"response":[{"id":"14fb9744-ee4a-4cb1-a601-459d67d1a230","name":"Get forms","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/form?type=form&select=title,name,path,type","protocol":"https","host":["forms","example","com"],"path":["example","form"],"query":[{"key":"type","value":"form"},{"key":"select","value":"title,name,path,type"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:34:03 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"340"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-2/3"},{"key":"Link","value":""},{"key":"Last-Modified","value":"Wed, 08 Apr 2026 13:59:42 GMT"},{"key":"ETag","value":"W/\"154-012R2YJH9C6nZV0SKcwn9RVlMFQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65f4e040fa2cea2572281\",\n        \"title\": \"Admin Login\",\n        \"name\": \"adminLogin\",\n        \"path\": \"admin/login\",\n        \"type\": \"form\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea257227a\",\n        \"title\": \"User Register\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"type\": \"form\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea2572273\",\n        \"title\": \"User Login\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"type\": \"form\"\n    }\n]"}],"_postman_id":"390408d9-10d3-43f7-afdc-9d0ae7b6b87a"},{"name":"Get resources","id":"3d81a0a3-8350-4fa9-96b1-d8ac1e8ef57f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?type=resource&select=title,type,name,path","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"type","value":"resource"},{"key":"select","value":"title,type,name,path"}],"variable":[]}},"response":[{"id":"9657dea4-da3f-4f68-8983-5ed259834b46","name":"Get resources","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/form?type=resource&select=title,type,name,path","protocol":"https","host":["forms","example","com"],"path":["example","form"],"query":[{"key":"type","value":"resource"},{"key":"select","value":"title,type,name,path"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:34:11 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"314"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-2/3"},{"key":"Link","value":""},{"key":"Last-Modified","value":"Wed, 08 Apr 2026 13:59:42 GMT"},{"key":"ETag","value":"W/\"13a-6L+oduQyPJelSGqXqphucfP5aRA\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65f4e040fa2cea257226d\",\n        \"title\": \"Reporting UI\",\n        \"name\": \"reportingui\",\n        \"path\": \"reportingui\",\n        \"type\": \"resource\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea2572267\",\n        \"title\": \"Admin\",\n        \"name\": \"admin\",\n        \"path\": \"admin\",\n        \"type\": \"resource\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea2572261\",\n        \"title\": \"User\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"type\": \"resource\"\n    }\n]"}],"_postman_id":"3d81a0a3-8350-4fa9-96b1-d8ac1e8ef57f"},{"name":"Get form by name","id":"f9468ec9-d0cb-469e-9ecd-45d58e322665","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?name__regex=/^user/i&select=title,type,name,path","description":"<p>This will search for a form using a query parameter to find ones that begin with \"user\".</p>\n","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"name__regex","value":"/^user/i"},{"key":"select","value":"title,type,name,path"}],"variable":[]}},"response":[{"id":"865b4c19-4851-47dd-b0e7-12db910132e9","name":"Get form by name","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/form?name__regex=/^user/i&select=title,type,name,path","protocol":"https","host":["forms","example","com"],"path":["example","form"],"query":[{"key":"name__regex","value":"/^user/i"},{"key":"select","value":"title,type,name,path"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:34:19 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"324"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-2/3"},{"key":"Link","value":""},{"key":"Last-Modified","value":"Wed, 08 Apr 2026 13:59:42 GMT"},{"key":"ETag","value":"W/\"144-CQQ0gpeyuwtkTAPWPkqXe2upqK8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d65f4e040fa2cea257227a\",\n        \"title\": \"User Register\",\n        \"name\": \"userRegister\",\n        \"path\": \"user/register\",\n        \"type\": \"form\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea2572273\",\n        \"title\": \"User Login\",\n        \"name\": \"userLogin\",\n        \"path\": \"user/login\",\n        \"type\": \"form\"\n    },\n    {\n        \"_id\": \"69d65f4e040fa2cea2572261\",\n        \"title\": \"User\",\n        \"name\": \"user\",\n        \"path\": \"user\",\n        \"type\": \"resource\"\n    }\n]"}],"_postman_id":"f9468ec9-d0cb-469e-9ecd-45d58e322665"},{"name":"Get form by tag","id":"b04417a3-3754-47f7-8cd0-60af38712f14","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/form?tag=tag1,tag2","description":"<p>Forms can also be found by searching for the 'tag' of the form. Multiple tags can be provided using a comma-separated value list of tags to search. It will return the forms that contain ALL of the provided tags.</p>\n","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[{"key":"tag","value":"tag1,tag2"}],"variable":[]}},"response":[],"_postman_id":"b04417a3-3754-47f7-8cd0-60af38712f14"},{"name":"Create Form","event":[{"listen":"test","script":{"id":"4a02b4a4-65ec-44b8-83c7-7d6efe7d3eae","exec":["pm.environment.set(\" exampleFormId \", pm.response.json()._id);","pm.environment.set(\" exampleFormPath \", pm.response.json().path);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"0bbe3470-eff0-464b-910b-3172eae431a3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Example Form\",\n  \"display\": \"form\",\n  \"type\": \"form\",\n  \"name\": \"example\",\n  \"path\": \"example\",\n  \"tags\": [\n    \"example\"\n  ],\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form","description":"<p>To create a form, you simply send a POST request to the <code>/form</code> endpoint within the project endpoint where the POST body is the JSON form of a Form.io form. For this request, the following parameters must be provided:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>POST body parameters</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>title</code></td>\n<td>Yes</td>\n<td>The title of the form or resource that is being created.</td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td>Yes</td>\n<td>The type of the form. It can be either <code>form</code> or <code>resource</code></td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>Yes</td>\n<td>The name of the form or resource. This should not contain any spaces or special characters.</td>\n</tr>\n<tr>\n<td><code>path</code></td>\n<td>Yes</td>\n<td>The endpoint path for this form JSON. The path should be a URL safe string that provides the endpoint for the form or resource. It is possible to use '<code>/</code>' within this variable name, such as <code>user/login</code>.</td>\n</tr>\n<tr>\n<td><code>components</code></td>\n<td>Yes</td>\n<td>An array of JSON component definitions that describe the structure of the form.</td>\n</tr>\n<tr>\n<td><code>display</code></td>\n<td>No</td>\n<td>The display format for this form. Can be either <code>form</code>, <code>wizard</code>, or <code>pdf</code>. It defaults to 'form' if it is not provided.</td>\n</tr>\n<tr>\n<td><code>tags</code></td>\n<td>No</td>\n<td>An array of tags, provided as strings, that help categorize this form or resource.</td>\n</tr>\n<tr>\n<td><code>access</code></td>\n<td>No</td>\n<td>Provides the form level access control for the form.</td>\n</tr>\n<tr>\n<td><code>submissionAccess</code></td>\n<td>No</td>\n<td>Provides the submission level access control for the form.</td>\n</tr>\n<tr>\n<td><code>owner</code></td>\n<td>No</td>\n<td>The owner ID of the user who created this form.</td>\n</tr>\n<tr>\n<td><code>settings</code></td>\n<td>No</td>\n<td>The form based settings for the form that is being created.</td>\n</tr>\n<tr>\n<td><code>properties</code></td>\n<td>No</td>\n<td>Dynamic key-value properties that can be added to a form to help with any bespoke integration requirements.</td>\n</tr>\n<tr>\n<td><code>project</code></td>\n<td>No</td>\n<td>The 'parent' project of this project. This is only relevant if you are creating a Tenant or a Stage. In this case, the parent project _id would be provided.</td>\n</tr>\n<tr>\n<td><code>controller</code></td>\n<td>No</td>\n<td>The form controller. This is a script that is used by the renderer to perform custom operations after the form has rendered within the application.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"633d89ea-62cb-4ede-9d9a-a056f67570d3","name":"Create Form","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Example Form\",\n  \"display\": \"form\",\n  \"type\": \"form\",\n  \"name\": \"example\",\n  \"path\": \"example\",\n  \"tags\": [\n    \"example\"\n  ],\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 21:09:07 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1072"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"430-luUoKAk7wjZQa7azmraayAQg/WI\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd5b72bb04c38a910291fc\",\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [\n        \"example\"\n    ],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\",\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"created\": \"2026-04-13T21:09:06.992Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-13T21:09:07.002Z\",\n    \"machineName\": \"example:example\"\n}"}],"_postman_id":"0bbe3470-eff0-464b-910b-3172eae431a3"},{"name":"Get form with ID","id":"c086ed99-8ee9-45d7-b3be-2f9c1e322016","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"0105c32e-bb7c-45a3-a67e-436b87700487","name":"Get form with ID","originalRequest":{"method":"GET","header":[],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:54:20 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1011"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"3f3-N9FhDfp/1N17e9olZfdql31DSPs\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d68821040fa2cea2572ad2\",\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"created\": \"2026-04-08T16:53:53.185Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-08T16:53:53.189Z\",\n    \"machineName\": \"example:example\"\n}"}],"_postman_id":"c086ed99-8ee9-45d7-b3be-2f9c1e322016"},{"name":"Get form with alias","id":"28f8ea5a-4282-4187-8b15-56b22b0ee311","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{ baseUrl }}/{{ projectName }}/{{ exampleFormPath }}","urlObject":{"path":["{{ projectName }}","{{ exampleFormPath }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"be5dbe77-2de0-4bcd-996e-3ddf44ace549","name":"Get form with alias","originalRequest":{"method":"GET","header":[],"url":"https://forms.example.com/example/example"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 16:54:45 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1011"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"3f3-N9FhDfp/1N17e9olZfdql31DSPs\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d68821040fa2cea2572ad2\",\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"created\": \"2026-04-08T16:53:53.185Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-08T16:53:53.189Z\",\n    \"machineName\": \"example:example\"\n}"}],"_postman_id":"28f8ea5a-4282-4187-8b15-56b22b0ee311"},{"name":"Update Form","id":"20caede5-e63a-4992-b135-cb0a1f77cc7c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ exampleFormId }}\",\n  \"title\": \"Example Form\",\n  \"name\": \"{{ exampleFormPath }}\",\n  \"path\": \"{{ exampleFormPath }}\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\",\n      \"tableView\": true\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 0,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-09T14:25:11.440Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-09T14:25:11.443Z\",\n  \"machineName\": \"example-906:example-517\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"35d70f9d-d923-41d3-b9e2-dfc61652fdfa","name":"Update Form","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69d7b6c7040fa2cea2573b39\",\n  \"title\": \"Example Form\",\n  \"name\": \"example\",\n  \"path\": \"example\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\",\n      \"tableView\": true\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 0,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-09T14:25:11.440Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-09T14:25:11.443Z\",\n  \"machineName\": \"example-906:example-517\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 14:29:49 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1079"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"437-MPXnYQJdPVzq2GfA0e+f5XcmyOI\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"tableView\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"tableView\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"tableView\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\",\n            \"tableView\": true\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"_id\": \"69d7b6c7040fa2cea2573b39\",\n    \"created\": \"2026-04-09T14:25:11.440Z\",\n    \"modified\": \"2026-04-09T14:29:49.131Z\",\n    \"machineName\": \"example:example\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"esign\": {}\n}"}],"_postman_id":"20caede5-e63a-4992-b135-cb0a1f77cc7c"},{"name":"Update form with alias","id":"4ad880fe-03ca-45dd-80f4-f26e2626f777","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69d7b6c7040fa2cea2573b39\",\n  \"title\": \"Example Form 519\",\n  \"name\": \"example-517\",\n  \"path\": \"example-686\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"tableView\": true,\n      \"input\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"tableView\": true,\n      \"input\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"tableView\": true,\n      \"input\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\",\n      \"tableView\": true,\n      \"input\": true\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 0,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-09T14:25:11.440Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-09T14:29:49.131Z\",\n  \"machineName\": \"example-906:example-517\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ exampleFormPath }}","urlObject":{"path":["{{ projectName }}","{{ exampleFormPath }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"2102c66d-cf70-4008-af37-f4b1c78a2914","name":"Update form with alias","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69d7b6c7040fa2cea2573b39\",\n  \"title\": \"Example Form\",\n  \"name\": \"example\",\n  \"path\": \"example\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"tableView\": true,\n      \"input\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"tableView\": true,\n      \"input\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"tableView\": true,\n      \"input\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\",\n      \"tableView\": true,\n      \"input\": true\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 0,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-09T14:25:11.440Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-09T14:29:49.131Z\",\n  \"machineName\": \"example-906:example-517\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/example"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 15:16:56 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1131"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"46b-n5C0jxC+hvIK7XBrrc9FxabocYE\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"tableView\": true,\n            \"input\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"tableView\": true,\n            \"input\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"tableView\": true,\n            \"input\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\",\n            \"tableView\": true,\n            \"input\": true\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"_id\": \"69d7b6c7040fa2cea2573b39\",\n    \"created\": \"2026-04-09T14:25:11.440Z\",\n    \"modified\": \"2026-04-09T15:16:56.133Z\",\n    \"machineName\": \"example:example\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"esign\": {}\n}"}],"_postman_id":"4ad880fe-03ca-45dd-80f4-f26e2626f777"},{"name":"Export Form Data as JSON","id":"7a007fef-e372-4285-9ac1-dbd7097d4861","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/export","description":"<p>This request will export all submissions in JSON format. This serves as a good way to export all submissions into a single export JSON file. This includes all metadata, as well as all properties within each submission object.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","export"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"afd2090d-0d24-4248-a8e3-1bbad94b0451","name":"Export Form Data as JSON","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/export"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 14:26:45 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Disposition","value":"attachment; filename=export.json"},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d7b70f040fa2cea25740a3\",\n        \"form\": \"69d7b6c7040fa2cea2573b39\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"timezone\": \"America/Chicago\",\n            \"offset\": -300,\n            \"origin\": \"https://forms.example.com\",\n            \"referrer\": \"\",\n            \"browserName\": \"Netscape\",\n            \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\",\n            \"pathName\": \"/\",\n            \"onLine\": true,\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"441\",\n                \"sec-ch-ua-platform\": \"\\\"macOS\\\"\",\n                \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\",\n                \"accept\": \"application/json\",\n                \"sec-ch-ua\": \"\\\"Chromium\\\";v=\\\"146\\\", \\\"Not-A.Brand\\\";v=\\\"24\\\", \\\"Brave\\\";v=\\\"146\\\"\",\n                \"content-type\": \"application/json\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"sec-gpc\": \"1\",\n                \"accept-language\": \"en-US,en;q=0.5\",\n                \"origin\": \"https://forms.example.com\",\n                \"sec-fetch-site\": \"same-origin\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-dest\": \"empty\",\n                \"referer\": \"https://forms.example.com/\",\n                \"accept-encoding\": \"gzip, deflate, br, zstd\"\n            }\n        },\n        \"data\": {\n            \"firstName\": \"Drew\",\n            \"lastName\": \"Stephens\",\n            \"email\": \"drew@example.com\",\n            \"phoneNumber\": \"(987) 392-8742\",\n            \"submit\": true\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2026-04-09T14:26:23.694Z\",\n        \"modified\": \"2026-04-09T14:26:23.695Z\",\n        \"__v\": 0\n    },\n    {\n        \"_id\": \"69d7b6f1040fa2cea2573f61\",\n        \"form\": \"69d7b6c7040fa2cea2573b39\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"timezone\": \"America/Chicago\",\n            \"offset\": -300,\n            \"origin\": \"https://forms.example.com\",\n            \"referrer\": \"\",\n            \"browserName\": \"Netscape\",\n            \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\",\n            \"pathName\": \"/\",\n            \"onLine\": true,\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"443\",\n                \"sec-ch-ua-platform\": \"\\\"macOS\\\"\",\n                \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\",\n                \"accept\": \"application/json\",\n                \"sec-ch-ua\": \"\\\"Chromium\\\";v=\\\"146\\\", \\\"Not-A.Brand\\\";v=\\\"24\\\", \\\"Brave\\\";v=\\\"146\\\"\",\n                \"content-type\": \"application/json\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"sec-gpc\": \"1\",\n                \"accept-language\": \"en-US,en;q=0.5\",\n                \"origin\": \"https://forms.example.com\",\n                \"sec-fetch-site\": \"same-origin\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-dest\": \"empty\",\n                \"referer\": \"https://forms.example.com/\",\n                \"accept-encoding\": \"gzip, deflate, br, zstd\"\n            }\n        },\n        \"data\": {\n            \"firstName\": \"Sally\",\n            \"lastName\": \"Thompson\",\n            \"email\": \"sally@example.com\",\n            \"phoneNumber\": \"(983) 495-8345\",\n            \"submit\": true\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2026-04-09T14:25:53.360Z\",\n        \"modified\": \"2026-04-09T14:25:53.361Z\",\n        \"__v\": 0\n    },\n    {\n        \"_id\": \"69d7b6e3040fa2cea2573e22\",\n        \"form\": \"69d7b6c7040fa2cea2573b39\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"deleted\": null,\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"timezone\": \"America/Chicago\",\n            \"offset\": -300,\n            \"origin\": \"https://forms.example.com\",\n            \"referrer\": \"\",\n            \"browserName\": \"Netscape\",\n            \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\",\n            \"pathName\": \"/\",\n            \"onLine\": true,\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"436\",\n                \"sec-ch-ua-platform\": \"\\\"macOS\\\"\",\n                \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36\",\n                \"accept\": \"application/json\",\n                \"sec-ch-ua\": \"\\\"Chromium\\\";v=\\\"146\\\", \\\"Not-A.Brand\\\";v=\\\"24\\\", \\\"Brave\\\";v=\\\"146\\\"\",\n                \"content-type\": \"application/json\",\n                \"sec-ch-ua-mobile\": \"?0\",\n                \"sec-gpc\": \"1\",\n                \"accept-language\": \"en-US,en;q=0.5\",\n                \"origin\": \"https://forms.example.com\",\n                \"sec-fetch-site\": \"same-origin\",\n                \"sec-fetch-mode\": \"cors\",\n                \"sec-fetch-dest\": \"empty\",\n                \"referer\": \"https://forms.example.com/\",\n                \"accept-encoding\": \"gzip, deflate, br, zstd\"\n            }\n        },\n        \"data\": {\n            \"firstName\": \"Joe\",\n            \"lastName\": \"Smith\",\n            \"email\": \"joe@example.com\",\n            \"phoneNumber\": \"(234) 234-2212\",\n            \"submit\": true\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"externalTokens\": [],\n        \"created\": \"2026-04-09T14:25:39.985Z\",\n        \"modified\": \"2026-04-09T14:25:39.986Z\",\n        \"__v\": 0\n    }\n]"}],"_postman_id":"7a007fef-e372-4285-9ac1-dbd7097d4861"},{"name":"Export Form Data as CSV","id":"5e4b84c4-99b5-415d-8226-ca395dae3127","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/export?format=csv","description":"<p>In addition to exporting as JSON, it is also possible to export in the CSV format. To export form submissions in CSV format, you simply need to add a query parameter <code>?format=csv</code> to the end of the URL.</p>\n<p>By default, not all the fields within your form will be included within the CSV export. In order to include a component within the CSV export, the components that need to be included as a column must have the following two properties defined.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Required Component Property</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tableView=true</code></td>\n<td>This property tells the CSV exporter that you wish to include this component as part of the CSV export.</td>\n</tr>\n<tr>\n<td><code>input=true</code></td>\n<td>This property tells the CSV exporter that this is an input field that contains input from the user. Typically, this parameter would not be required for a form to work, but it is required to include the data within the CSV export.</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","export"],"host":["{{ baseUrl }}"],"query":[{"key":"format","value":"csv"}],"variable":[]}},"response":[{"id":"b34f4174-2a63-45ab-8f0e-5392ee24f326","name":"Export Form Data as CSV","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":{"raw":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/export?format=csv","protocol":"https","host":["forms","example","com"],"path":["example","form","69dd5b72bb04c38a910291fc","export"],"query":[{"key":"format","value":"csv"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Thu, 09 Apr 2026 15:17:20 GMT"},{"key":"Content-Type","value":"text/csv"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Content-Disposition","value":"attachment; filename=export.csv"},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"\"_id\",\"created\",\"modified\",\"firstName\",\"lastName\",\"email\",\"phoneNumber\"\n\"69d7b70f040fa2cea25740a3\",\"2026-04-09 02:26 PM UTC\",\"2026-04-09 02:26 PM UTC\",\"Drew\",\"Stephens\",\"drew@example.com\",\"(987) 392-8742\"\n\"69d7b6f1040fa2cea2573f61\",\"2026-04-09 02:25 PM UTC\",\"2026-04-09 02:25 PM UTC\",\"Sally\",\"Thompson\",\"sally@example.com\",\"(983) 495-8345\"\n\"69d7b6e3040fa2cea2573e22\",\"2026-04-09 02:25 PM UTC\",\"2026-04-09 02:25 PM UTC\",\"Joe\",\"Smith\",\"joe@example.com\",\"(234) 234-2212\"\n"}],"_postman_id":"5e4b84c4-99b5-415d-8226-ca395dae3127"}],"id":"b23b0cfc-ce1d-441b-b290-6987b3e38186","description":"<p>The form API allows you to create both <em><strong>Resources</strong></em> and <em><strong>Forms</strong></em> using the Form.io API</p>\n","_postman_id":"b23b0cfc-ce1d-441b-b290-6987b3e38186"},{"name":"Form Revisions","item":[{"name":"Enable Form Revisions","id":"e240b829-f0e1-41a7-82be-b0fa91199e2c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ exampleFormId }}\",\n  \"title\": \"Example Form 8\",\n  \"name\": \"example-771\",\n  \"path\": \"{{ exampleFormPath }}\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"current\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 0,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-08T16:57:43.049Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-08T16:57:43.053Z\",\n  \"machineName\": \"example-906:example-771\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}","description":"<p>To enable form revisions, you simply need to add a property to the form object called <code>revisions</code> and it can be set to one of two different values.</p>\n<ul>\n<li><p><code>current -</code> Use current form version when viewing submissions. With this setting enabled, the form renderer will chose to load the most recent (current) form revision when viewing a submission even if the submission was submitted against a different form revision.</p>\n</li>\n<li><p><code>original</code> - Use original form version when viewing submissions. This setting will ensure that a submission that was submitted with a specific form revision will be viewed against a specific form revision. This setting is useful if you are making large changes to a form and wish to load legacy submissions and view them within the form exactly as it looked when the submission was created.</p>\n</li>\n</ul>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"095daa70-9582-4bda-a650-c715f41a6cd5","name":"Enable Form Revisions","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69dd5b72bb04c38a910291fc\",\n  \"title\": \"Example Form\",\n  \"name\": \"example\",\n  \"path\": \"example\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"current\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 0,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-08T16:57:43.049Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-08T16:57:43.053Z\",\n  \"machineName\": \"example-906:example-771\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 18:22:25 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1016"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"3f8-l4FM3/FlMLcmXygITgzZ2+X0BFk\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"_id\": \"69d68907040fa2cea2572b71\",\n    \"created\": \"2026-04-08T16:57:43.049Z\",\n    \"modified\": \"2026-04-08T18:22:25.418Z\",\n    \"machineName\": \"example:example\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"current\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 1,\n    \"esign\": {}\n}"}],"_postman_id":"e240b829-f0e1-41a7-82be-b0fa91199e2c"},{"name":"Create a form 'draft'","id":"f95c2875-7f10-41d8-8cbf-6fd639250dc3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ exampleFormId }}\",\n  \"title\": \"Example Form 8\",\n  \"name\": \"{{ exampleFormPath }}\",\n  \"path\": \"{{ exampleFormPath }}\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"current\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 1,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-08T16:57:43.049Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-08T18:22:25.418Z\",\n  \"machineName\": \"example-906:example-771\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/draft","description":"<p>A draft version is a 'work in progress' version of the form and is not considered Published. This allows a form builder to save their progress without making the form updates the 'latest' version. A note can be added to a 'draft' using the <code>_vnote</code> property within the PUT request.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","draft"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"19f4a2bc-4636-41ab-aec7-9ac09c53d450","name":"Create a form 'draft'","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69dd5b72bb04c38a910291fc\",\n  \"title\": \"Example Form\",\n  \"name\": \"example\",\n  \"path\": \"example\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"current\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 1,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-08T16:57:43.049Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-08T18:22:25.418Z\",\n  \"machineName\": \"example-906:example-771\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/draft"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 18:27:01 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1064"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"428-sj6p4jd5g+4ZGCHU1T3jEznczeQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"_id\": \"69d69df5040fa2cea2572ce4\",\n    \"created\": \"2026-04-08T16:57:43.049Z\",\n    \"modified\": \"2026-04-08T18:27:01.051Z\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"current\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": \"draft\",\n    \"esign\": {},\n    \"_rid\": \"69d68907040fa2cea2572b71\",\n    \"_vnote\": \"\",\n    \"_vuser\": \"jacynthe_johns@yahoo.com\"\n}"}],"_postman_id":"f95c2875-7f10-41d8-8cbf-6fd639250dc3"},{"name":"Get a form 'draft'","id":"758b602c-336d-45f7-bc59-61554377ec6a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/draft","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","draft"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"bbab75cb-1eaf-45b7-9e7e-2254967e6cca","name":"Get a form 'draft'","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/draft"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 18:27:22 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1064"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"428-ktri1ZE3pgR+xCwBslu4Ovyy0Vg\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d69df5040fa2cea2572ce4\",\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"created\": \"2026-04-08T16:57:43.049Z\",\n    \"modified\": \"2026-04-08T18:27:01.051Z\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"current\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": \"draft\",\n    \"esign\": {},\n    \"_rid\": \"69d68907040fa2cea2572b71\",\n    \"_vnote\": \"\",\n    \"_vuser\": \"jacynthe_johns@yahoo.com\"\n}"}],"_postman_id":"758b602c-336d-45f7-bc59-61554377ec6a"},{"name":"Publish form","id":"197a3c84-3295-4f78-a056-fbeedad10b26","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ exampleFormId }}\",\n  \"title\": \"Example Form 8\",\n  \"name\": \"{{ exampleFormPath }}\",\n  \"path\": \"{{ exampleFormPath }}\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Middle Name\",\n      \"key\": \"middleName\"\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"current\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 1,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-08T16:57:43.049Z\",\n  \"esign\": {},\n  \"_vnote\": \"Adding the middle name field\",\n  \"modified\": \"2026-04-08T18:22:25.418Z\",\n  \"machineName\": \"example-906:example-771\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}","description":"<p>To publish a form as the 'latest' version, a PUT request is made to the form endpoint. This effectively makes the form body as the 'latest' version. A note of the change can be included along with the PUT body by adding a <code>_vnote</code> property to the body. The response body then includes the _vid of the form revision that was created.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"60600023-4d8c-426c-90d3-883d331106f5","name":"Publish form","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69dd5b72bb04c38a910291fc\",\n  \"title\": \"Example Form\",\n  \"name\": \"example\",\n  \"path\": \"example\",\n  \"type\": \"form\",\n  \"display\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Middle Name\",\n      \"key\": \"middleName\"\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"current\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 1,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [],\n  \"created\": \"2026-04-08T16:57:43.049Z\",\n  \"esign\": {},\n  \"_vnote\": \"Adding the middle name field\",\n  \"modified\": \"2026-04-08T18:22:25.418Z\",\n  \"machineName\": \"example-906:example-771\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 18:36:09 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1078"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"436-eLibOIieg8UwaNA1qqY5Xlm8Z54\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Middle Name\",\n            \"key\": \"middleName\"\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"_id\": \"69d68907040fa2cea2572b71\",\n    \"created\": \"2026-04-08T16:57:43.049Z\",\n    \"modified\": \"2026-04-08T18:36:09.241Z\",\n    \"machineName\": \"example:example\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"current\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 2,\n    \"esign\": {}\n}"}],"_postman_id":"197a3c84-3295-4f78-a056-fbeedad10b26"},{"name":"Get Form Revisions","event":[{"listen":"test","script":{"id":"d2985186-e228-4450-8226-ce8d5ed134ed","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"570b3f81-cc3c-43be-9a2c-866caf5a2f5b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/v","description":"<p>This API will fetch all revisions for a specific form.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","v"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"12a6d834-0ff1-42cb-ac94-c1c47ed91f4e","name":"Get Form Revisions","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/v"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 18:36:48 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"2289"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-1/2"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"8f1-tVL2r+fPgHCUvrJFjc0PYreTHgU\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d69ce1040fa2cea2572c71\",\n        \"title\": \"Example Form\",\n        \"name\": \"example\",\n        \"path\": \"example\",\n        \"type\": \"form\",\n        \"display\": \"form\",\n        \"tags\": [],\n        \"access\": [\n            {\n                \"type\": \"read_all\",\n                \"roles\": [\n                    \"69d65f4e040fa2cea2572254\",\n                    \"69d65f4e040fa2cea2572258\",\n                    \"69d65f4e040fa2cea257225c\",\n                    \"69d68310040fa2cea2572945\"\n                ]\n            }\n        ],\n        \"submissionAccess\": [],\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"components\": [\n            {\n                \"type\": \"textfield\",\n                \"label\": \"First Name\",\n                \"key\": \"firstName\",\n                \"validate\": {\n                    \"required\": true\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"label\": \"Last Name\",\n                \"key\": \"lastName\",\n                \"validate\": {\n                    \"required\": true\n                }\n            },\n            {\n                \"type\": \"email\",\n                \"label\": \"Email\",\n                \"key\": \"email\",\n                \"validate\": {\n                    \"required\": true\n                }\n            },\n            {\n                \"inputMask\": \"(999) 999-9999\",\n                \"label\": \"Phone Number\",\n                \"key\": \"phoneNumber\",\n                \"type\": \"phoneNumber\"\n            },\n            {\n                \"label\": \"Submit\",\n                \"key\": \"submit\",\n                \"action\": \"submit\",\n                \"type\": \"button\"\n            }\n        ],\n        \"pdfComponents\": [],\n        \"created\": \"2026-04-08T16:57:43.049Z\",\n        \"modified\": \"2026-04-08T18:22:25.432Z\",\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"revisions\": \"current\",\n        \"submissionRevisions\": \"\",\n        \"_vid\": 1,\n        \"esign\": {},\n        \"_rid\": \"69d68907040fa2cea2572b71\",\n        \"_vnote\": \"\",\n        \"_vuser\": \"jacynthe_johns@yahoo.com\",\n        \"revisionId\": \"69d69ce1040fa2cea2572c71\"\n    },\n    {\n        \"_id\": \"69d69df5040fa2cea2572ce4\",\n        \"title\": \"Example Form\",\n        \"name\": \"example\",\n        \"path\": \"example\",\n        \"type\": \"form\",\n        \"display\": \"form\",\n        \"tags\": [],\n        \"access\": [\n            {\n                \"type\": \"read_all\",\n                \"roles\": [\n                    \"69d65f4e040fa2cea2572254\",\n                    \"69d65f4e040fa2cea2572258\",\n                    \"69d65f4e040fa2cea257225c\",\n                    \"69d68310040fa2cea2572945\"\n                ]\n            }\n        ],\n        \"submissionAccess\": [],\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"components\": [\n            {\n                \"type\": \"textfield\",\n                \"label\": \"First Name\",\n                \"key\": \"firstName\",\n                \"validate\": {\n                    \"required\": true\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"label\": \"Middle Name\",\n                \"key\": \"middleName\"\n            },\n            {\n                \"type\": \"textfield\",\n                \"label\": \"Last Name\",\n                \"key\": \"lastName\",\n                \"validate\": {\n                    \"required\": true\n                }\n            },\n            {\n                \"type\": \"email\",\n                \"label\": \"Email\",\n                \"key\": \"email\",\n                \"validate\": {\n                    \"required\": true\n                }\n            },\n            {\n                \"inputMask\": \"(999) 999-9999\",\n                \"label\": \"Phone Number\",\n                \"key\": \"phoneNumber\",\n                \"type\": \"phoneNumber\"\n            },\n            {\n                \"label\": \"Submit\",\n                \"key\": \"submit\",\n                \"action\": \"submit\",\n                \"type\": \"button\"\n            }\n        ],\n        \"pdfComponents\": [],\n        \"created\": \"2026-04-08T16:57:43.049Z\",\n        \"modified\": \"2026-04-08T18:36:09.241Z\",\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"revisions\": \"current\",\n        \"submissionRevisions\": \"\",\n        \"_vid\": 2,\n        \"esign\": {},\n        \"_rid\": \"69d68907040fa2cea2572b71\",\n        \"_vnote\": \"Adding the middle name field\",\n        \"_vuser\": \"jacynthe_johns@yahoo.com\",\n        \"revisionId\": \"69d69df5040fa2cea2572ce4\"\n    }\n]"}],"_postman_id":"570b3f81-cc3c-43be-9a2c-866caf5a2f5b"},{"name":"Get specific form revision","event":[{"listen":"test","script":{"id":"d2985186-e228-4450-8226-ce8d5ed134ed","exec":["pm.environment.set(\" exampleFormRevisionId \", pm.response.json().revisionId );"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"5f81ed04-4e37-49ac-9145-e2e596d88689","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/v/2","description":"<p>To retrieve a specific form version, you simply add the <code>_vid</code> parameter to the URL to fetch that version.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","v","2"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"5aff93aa-8f8a-4f6e-89a3-7f3a11b56562","name":"Get specific form revision","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/v/2"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 18:38:05 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1188"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"4a4-75p/U+d9+jHV3hwj3v5lH5tkLCU\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d69df5040fa2cea2572ce4\",\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Middle Name\",\n            \"key\": \"middleName\"\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"created\": \"2026-04-08T16:57:43.049Z\",\n    \"modified\": \"2026-04-08T18:36:09.241Z\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"current\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 2,\n    \"esign\": {},\n    \"_rid\": \"69d68907040fa2cea2572b71\",\n    \"_vnote\": \"Adding the middle name field\",\n    \"_vuser\": \"jacynthe_johns@yahoo.com\",\n    \"revisionId\": \"69d69df5040fa2cea2572ce4\"\n}"}],"_postman_id":"5f81ed04-4e37-49ac-9145-e2e596d88689"},{"name":"Get specific form revision with revision ID","event":[{"listen":"test","script":{"id":"d2985186-e228-4450-8226-ce8d5ed134ed","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"608580de-bf3f-4f0b-b70d-b5490fb67752","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/v/{{ exampleFormRevisionId }}","description":"<p>It is also possible to get a form revision using the UUID <code>revisionId.</code> This ensures that a revision is immutable between different stages and allows a URL to specifically pin to a globally unique revision ID.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","v","{{ exampleFormRevisionId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"4cc80eaf-53a9-4b3a-ad24-cbea975475f1","name":"Get specific form revision with revision ID","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/v/69d69df5040fa2cea2572ce4"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 19:02:00 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1188"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"4a4-75p/U+d9+jHV3hwj3v5lH5tkLCU\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d69df5040fa2cea2572ce4\",\n    \"title\": \"Example Form\",\n    \"name\": \"example\",\n    \"path\": \"example\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Middle Name\",\n            \"key\": \"middleName\"\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"created\": \"2026-04-08T16:57:43.049Z\",\n    \"modified\": \"2026-04-08T18:36:09.241Z\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"current\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 2,\n    \"esign\": {},\n    \"_rid\": \"69d68907040fa2cea2572b71\",\n    \"_vnote\": \"Adding the middle name field\",\n    \"_vuser\": \"jacynthe_johns@yahoo.com\",\n    \"revisionId\": \"69d69df5040fa2cea2572ce4\"\n}"}],"_postman_id":"608580de-bf3f-4f0b-b70d-b5490fb67752"}],"id":"5c2d0930-f52b-4c3c-8bd7-f95f304c5691","description":"<p>Form Versioning can extend the capabilities of any project cycle by giving users the ability to evolve current forms while preserving the integrity of previous iterations. Form Versioning allows for detailed deployment tracking, allowing teams to see who has updated a form, when a change was made, and any notes associated with the update. Additionally, Form Versioning can be used to revert to previous incarnations while safeguarding all submission data.</p>\n","_postman_id":"5c2d0930-f52b-4c3c-8bd7-f95f304c5691"},{"name":"Action API","item":[{"name":"Get a list of all available Actions","id":"2eb5f089-6e3c-40ed-a408-a80da73bec51","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/actions","description":"<p>This request will return all actions available to be added to a form.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","actions"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"ff737a78-8310-4acf-9dc6-1efed64a6d4e","name":"Get a list of all available Actions","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/actions"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 19:03:48 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"3496"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"da8-+SpbQVLQinTGDNAR7xlztRcOyfI\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"name\": \"email\",\n        \"title\": \"Email\",\n        \"description\": \"Allows you to email people on submission.\",\n        \"priority\": 0,\n        \"defaults\": {\n            \"handler\": [\n                \"after\"\n            ],\n            \"method\": [\n                \"create\"\n            ],\n            \"priority\": 0,\n            \"name\": \"email\",\n            \"title\": \"Email\"\n        }\n    },\n    {\n        \"name\": \"login\",\n        \"title\": \"Login\",\n        \"description\": \"Provides a way to login to the application.\",\n        \"priority\": 2,\n        \"defaults\": {\n            \"handler\": [\n                \"before\"\n            ],\n            \"method\": [\n                \"create\"\n            ],\n            \"priority\": 2,\n            \"name\": \"login\",\n            \"title\": \"Login\"\n        },\n        \"access\": {\n            \"handler\": false,\n            \"method\": false\n        }\n    },\n    {\n        \"name\": \"resetpass\",\n        \"title\": \"Reset Password\",\n        \"description\": \"Provides a way to reset a password field.\",\n        \"defaults\": {\n            \"handler\": [\n                \"after\",\n                \"before\"\n            ],\n            \"method\": [\n                \"form\",\n                \"create\"\n            ],\n            \"priority\": 0,\n            \"name\": \"resetpass\",\n            \"title\": \"Reset Password\"\n        },\n        \"access\": {\n            \"handler\": false,\n            \"method\": false\n        }\n    },\n    {\n        \"name\": \"role\",\n        \"title\": \"Role Assignment\",\n        \"description\": \"Provides the Role Assignment capabilities.\",\n        \"priority\": 1,\n        \"defaults\": {\n            \"handler\": [\n                \"after\"\n            ],\n            \"method\": [\n                \"create\"\n            ],\n            \"priority\": 1,\n            \"name\": \"role\",\n            \"title\": \"Role Assignment\"\n        },\n        \"access\": {\n            \"handler\": false,\n            \"method\": false\n        }\n    },\n    {\n        \"name\": \"save\",\n        \"title\": \"Save Submission\",\n        \"description\": \"Saves the submission into the database.\",\n        \"priority\": 10,\n        \"defaults\": {\n            \"handler\": [\n                \"before\"\n            ],\n            \"method\": [\n                \"create\",\n                \"update\"\n            ],\n            \"priority\": 10,\n            \"name\": \"save\",\n            \"title\": \"Save Submission\"\n        },\n        \"access\": {\n            \"handler\": false,\n            \"method\": false\n        }\n    },\n    {\n        \"name\": \"webhook\",\n        \"title\": \"Webhook (Premium)\",\n        \"description\": \"Allows you to trigger an external interface.\",\n        \"priority\": 0,\n        \"defaults\": {\n            \"handler\": [\n                \"after\"\n            ],\n            \"method\": [\n                \"create\",\n                \"update\",\n                \"delete\"\n            ],\n            \"priority\": 0,\n            \"name\": \"webhook\",\n            \"title\": \"Webhook (Premium)\"\n        },\n        \"premium\": true\n    },\n    {\n        \"name\": \"oauth\",\n        \"title\": \"OAuth (Premium)\",\n        \"description\": \"Provides OAuth authentication behavior to this form.\",\n        \"priority\": 20,\n        \"defaults\": {\n            \"handler\": [\n                \"after\"\n            ],\n            \"method\": [\n                \"form\",\n                \"create\"\n            ],\n            \"priority\": 20,\n            \"name\": \"oauth\",\n            \"title\": \"OAuth (Premium)\"\n        },\n        \"premium\": true\n    },\n    {\n        \"name\": \"ldap\",\n        \"title\": \"LDAP Login (Premium)\",\n        \"description\": \"Provides ldap login.\",\n        \"priority\": 3,\n        \"defaults\": {\n            \"handler\": [\n                \"before\"\n            ],\n            \"method\": [\n                \"create\"\n            ],\n            \"priority\": 3,\n            \"name\": \"ldap\",\n            \"title\": \"LDAP Login (Premium)\"\n        },\n        \"premium\": true\n    },\n    {\n        \"name\": \"googlesheet\",\n        \"title\": \"Google Sheets (Premium)\",\n        \"description\": \"Allows you to integrate data into Google sheets.\",\n        \"priority\": 0,\n        \"defaults\": {\n            \"handler\": [\n                \"after\"\n            ],\n            \"method\": [\n                \"create\",\n                \"update\",\n                \"delete\"\n            ],\n            \"priority\": 0,\n            \"name\": \"googlesheet\",\n            \"title\": \"Google Sheets (Premium)\"\n        },\n        \"premium\": true\n    },\n    {\n        \"name\": \"sqlconnector\",\n        \"title\": \"SQL Connector (Premium)\",\n        \"description\": \"Allows you to execute a remote SQL Query via Resquel.\",\n        \"priority\": 0,\n        \"defaults\": {\n            \"handler\": [\n                \"after\"\n            ],\n            \"method\": [\n                \"create\",\n                \"update\",\n                \"delete\"\n            ],\n            \"priority\": 0,\n            \"name\": \"sqlconnector\",\n            \"title\": \"SQL Connector (Premium)\"\n        },\n        \"premium\": true\n    },\n    {\n        \"name\": \"group\",\n        \"title\": \"Group Assignment (Premium)\",\n        \"premium\": true,\n        \"description\": \"Provides the Group Assignment capabilities.\",\n        \"priority\": 5,\n        \"defaults\": {\n            \"handler\": [\n                \"after\"\n            ],\n            \"method\": [\n                \"create\",\n                \"update\",\n                \"delete\"\n            ],\n            \"priority\": 5,\n            \"name\": \"group\",\n            \"title\": \"Group Assignment (Premium)\"\n        },\n        \"access\": {\n            \"handler\": false,\n            \"method\": false\n        }\n    },\n    {\n        \"name\": \"twofalogin\",\n        \"title\": \"2FA Login (Premium)\",\n        \"description\": \"Provides 2FA login.\",\n        \"priority\": 2,\n        \"defaults\": {\n            \"handler\": [\n                \"before\"\n            ],\n            \"method\": [\n                \"create\"\n            ],\n            \"priority\": 2,\n            \"name\": \"twofalogin\",\n            \"title\": \"2FA Login (Premium)\"\n        },\n        \"access\": {\n            \"handler\": false,\n            \"method\": false\n        },\n        \"premium\": true\n    },\n    {\n        \"name\": \"twofarecoverylogin\",\n        \"title\": \"2FA Recovery Login (Premium)\",\n        \"description\": \"Provides 2FA Recovery Login.\",\n        \"priority\": 2,\n        \"defaults\": {\n            \"handler\": [\n                \"before\"\n            ],\n            \"method\": [\n                \"create\"\n            ],\n            \"priority\": 2,\n            \"name\": \"twofarecoverylogin\",\n            \"title\": \"2FA Recovery Login (Premium)\"\n        },\n        \"access\": {\n            \"handler\": false,\n            \"method\": false\n        },\n        \"premium\": true\n    }\n]"}],"_postman_id":"2eb5f089-6e3c-40ed-a408-a80da73bec51"},{"name":"Get specific action Information","id":"f28fb43b-bc55-4f2f-954c-839dd62a8add","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/actions/email","description":"<p>This API will retrieve the Action information for a specific action type.</p>\n<p>The \"settingsForm\" is used to render the settings form for configuring the specific settings for this form.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","actions","email"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"20515929-1e03-499f-a03f-da49660aef11","name":"Get specific action Information","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/actions/email"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 19:06:34 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"19047"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"4a67-llpUWzk3BCoAVX4HG/bF0leC+kQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"name\": \"email\",\n    \"title\": \"Email\",\n    \"description\": \"Allows you to email people on submission.\",\n    \"priority\": 0,\n    \"defaults\": {\n        \"handler\": [\n            \"after\"\n        ],\n        \"method\": [\n            \"create\"\n        ],\n        \"priority\": 0,\n        \"name\": \"email\",\n        \"title\": \"Email\"\n    },\n    \"settingsForm\": {\n        \"components\": [\n            {\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"key\": \"priority\"\n            },\n            {\n                \"type\": \"hidden\",\n                \"input\": true,\n                \"key\": \"name\"\n            },\n            {\n                \"type\": \"textfield\",\n                \"input\": true,\n                \"label\": \"Title\",\n                \"key\": \"title\"\n            },\n            {\n                \"type\": \"fieldset\",\n                \"input\": false,\n                \"legend\": \"Action Settings\",\n                \"components\": [\n                    {\n                        \"input\": false,\n                        \"type\": \"container\",\n                        \"key\": \"settings\",\n                        \"components\": [\n                            {\n                                \"type\": \"select\",\n                                \"input\": true,\n                                \"label\": \"Transport\",\n                                \"key\": \"transport\",\n                                \"placeholder\": \"Select the email transport.\",\n                                \"template\": \"<span>{{ item.title }}</span>\",\n                                \"dataSrc\": \"json\",\n                                \"data\": {\n                                    \"json\": \"[]\"\n                                },\n                                \"valueProperty\": \"transport\",\n                                \"multiple\": false,\n                                \"validate\": {\n                                    \"required\": true\n                                }\n                            },\n                            {\n                                \"label\": \"From:\",\n                                \"key\": \"from\",\n                                \"inputType\": \"text\",\n                                \"defaultValue\": \"no-reply@example.com\",\n                                \"input\": true,\n                                \"placeholder\": \"Send the email from the following address\",\n                                \"type\": \"textfield\",\n                                \"multiple\": false\n                            },\n                            {\n                                \"label\": \"Reply-To: Email Address\",\n                                \"key\": \"replyTo\",\n                                \"inputType\": \"text\",\n                                \"input\": true,\n                                \"placeholder\": \"Reply to an alternative email address\",\n                                \"type\": \"textfield\",\n                                \"multiple\": false\n                            },\n                            {\n                                \"label\": \"To: Email Address\",\n                                \"key\": \"emails\",\n                                \"inputType\": \"text\",\n                                \"defaultValue\": \"\",\n                                \"input\": true,\n                                \"placeholder\": \"Send to the following email\",\n                                \"type\": \"textfield\",\n                                \"multiple\": true,\n                                \"validate\": {\n                                    \"required\": true\n                                }\n                            },\n                            {\n                                \"label\": \"Send a separate email to each recipient\",\n                                \"key\": \"sendEach\",\n                                \"type\": \"checkbox\",\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Cc: Email Address\",\n                                \"key\": \"cc\",\n                                \"inputType\": \"text\",\n                                \"defaultValue\": \"\",\n                                \"input\": true,\n                                \"placeholder\": \"Send copy of the email to the following email\",\n                                \"type\": \"textfield\",\n                                \"multiple\": true\n                            },\n                            {\n                                \"label\": \"Bcc: Email Address\",\n                                \"key\": \"bcc\",\n                                \"inputType\": \"text\",\n                                \"defaultValue\": \"\",\n                                \"input\": true,\n                                \"placeholder\": \"Send blind copy of the email to the following email (other recipients will not see this)\",\n                                \"type\": \"textfield\",\n                                \"multiple\": true\n                            },\n                            {\n                                \"label\": \"Subject\",\n                                \"key\": \"subject\",\n                                \"inputType\": \"text\",\n                                \"defaultValue\": \"New submission for {{ form.title }}.\",\n                                \"input\": true,\n                                \"placeholder\": \"Email subject\",\n                                \"type\": \"textfield\",\n                                \"multiple\": false\n                            },\n                            {\n                                \"label\": \"Email Template URL\",\n                                \"key\": \"template\",\n                                \"inputType\": \"text\",\n                                \"defaultValue\": \"https://pro.formview.io/assets/email.html\",\n                                \"placeholder\": \"Enter a URL for your external email template.\",\n                                \"type\": \"textfield\",\n                                \"multiple\": false\n                            },\n                            {\n                                \"label\": \"Message\",\n                                \"key\": \"message\",\n                                \"type\": \"textarea\",\n                                \"defaultValue\": \"{{ submission(data, form.components) }}\",\n                                \"multiple\": false,\n                                \"rows\": 3,\n                                \"placeholder\": \"Enter the message you would like to send.\",\n                                \"input\": true\n                            },\n                            {\n                                \"label\": \"Rendering Method\",\n                                \"key\": \"renderingMethod\",\n                                \"type\": \"radio\",\n                                \"defaultValue\": \"dynamic\",\n                                \"values\": [\n                                    {\n                                        \"label\": \"Dynamic\",\n                                        \"value\": \"dynamic\"\n                                    },\n                                    {\n                                        \"label\": \"Static\",\n                                        \"value\": \"static\"\n                                    }\n                                ],\n                                \"inline\": true,\n                                \"optionsLabelPosition\": \"right\",\n                                \"tooltip\": \"Dynamic rendering uses formio.js to render email. While static relies on outdated set of mappers.\",\n                                \"input\": true\n                            },\n                            {\n                                \"type\": \"checkbox\",\n                                \"input\": true,\n                                \"key\": \"attachFiles\",\n                                \"label\": \"Attach Submission Files\",\n                                \"tooltip\": \"Check this if you would like to attach submission files to the email.\"\n                            },\n                            {\n                                \"type\": \"checkbox\",\n                                \"input\": true,\n                                \"key\": \"attachPDF\",\n                                \"label\": \"Attach Submission PDF\",\n                                \"tooltip\": \"Check this if you would like to attach a PDF of the submission to the email. This will count toward your PDF Submission count for every email sent.\"\n                            },\n                            {\n                                \"type\": \"textfield\",\n                                \"input\": true,\n                                \"key\": \"pdfName\",\n                                \"label\": \"PDF File Name\",\n                                \"defaultValue\": \"{{ form.name }}-{{ submission._id }}\",\n                                \"tooltip\": \"Determines how the submission PDF is named when it is attached.\",\n                                \"customConditional\": \"show = !!data.settings.attachPDF;\"\n                            }\n                        ]\n                    }\n                ]\n            },\n            {\n                \"type\": \"fieldset\",\n                \"input\": false,\n                \"tree\": false,\n                \"key\": \"conditions\",\n                \"legend\": \"Action Execution\",\n                \"hidden\": false,\n                \"components\": [\n                    {\n                        \"type\": \"select\",\n                        \"input\": true,\n                        \"key\": \"handler\",\n                        \"label\": \"Handler\",\n                        \"placeholder\": \"Select which handler(s) you would like to trigger\",\n                        \"dataSrc\": \"json\",\n                        \"data\": {\n                            \"json\": \"[{\\\"name\\\":\\\"before\\\",\\\"title\\\":\\\"Before\\\"},{\\\"name\\\":\\\"after\\\",\\\"title\\\":\\\"After\\\"}]\"\n                        },\n                        \"template\": \"<span>{{ item.title }}</span>\",\n                        \"valueProperty\": \"name\",\n                        \"multiple\": true\n                    },\n                    {\n                        \"type\": \"select\",\n                        \"input\": true,\n                        \"label\": \"Methods\",\n                        \"key\": \"method\",\n                        \"placeholder\": \"Trigger action on method(s)\",\n                        \"dataSrc\": \"json\",\n                        \"data\": {\n                            \"json\": \"[{\\\"name\\\":\\\"create\\\",\\\"title\\\":\\\"Create\\\"},{\\\"name\\\":\\\"update\\\",\\\"title\\\":\\\"Update\\\"},{\\\"name\\\":\\\"read\\\",\\\"title\\\":\\\"Read\\\"},{\\\"name\\\":\\\"delete\\\",\\\"title\\\":\\\"Delete\\\"},{\\\"name\\\":\\\"index\\\",\\\"title\\\":\\\"Index\\\"}]\"\n                        },\n                        \"template\": \"<span>{{ item.title }}</span>\",\n                        \"valueProperty\": \"name\",\n                        \"multiple\": true\n                    }\n                ]\n            },\n            {\n                \"key\": \"fieldset\",\n                \"type\": \"fieldset\",\n                \"input\": false,\n                \"tree\": false,\n                \"legend\": \"Action Conditions (optional)\",\n                \"components\": [\n                    {\n                        \"type\": \"container\",\n                        \"key\": \"condition\",\n                        \"input\": false,\n                        \"tree\": true,\n                        \"components\": [\n                            {\n                                \"key\": \"columns\",\n                                \"type\": \"columns\",\n                                \"input\": false,\n                                \"columns\": [\n                                    {\n                                        \"components\": [\n                                            {\n                                                \"label\": \"When\",\n                                                \"widget\": \"choicesjs\",\n                                                \"tableView\": true,\n                                                \"data\": {\n                                                    \"values\": [\n                                                        {\n                                                            \"label\": \"When all conditions are met\",\n                                                            \"value\": \"all\"\n                                                        },\n                                                        {\n                                                            \"label\": \"When any condition is met\",\n                                                            \"value\": \"any\"\n                                                        }\n                                                    ]\n                                                },\n                                                \"key\": \"conjunction\",\n                                                \"type\": \"select\",\n                                                \"input\": true\n                                            },\n                                            {\n                                                \"label\": \"Conditions\",\n                                                \"addAnotherPosition\": \"bottom\",\n                                                \"key\": \"conditions\",\n                                                \"type\": \"editgrid\",\n                                                \"initEmpty\": true,\n                                                \"addAnother\": \"Add Condition\",\n                                                \"templates\": {\n                                                    \"header\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"col-sm-{{_.includes(['component'], component.key) ? '4' : '3'}}\\\">{{ t(component.label) }}</div>\\n        {% } %}\\n      {% }) %}\\n    </div>\",\n                                                    \"row\": \"<div class=\\\"row\\\">\\n      {% util.eachComponent(components, function(component) { %}\\n        {% if (displayValue(component)) { %}\\n          <div class=\\\"formio-builder-condition-text col-sm-{{_.includes(['component'], component.key) ? '4' : '3'}}\\\">\\n            {{ isVisibleInRow(component) ? getView(component, row[component.key]) : ''}}\\n          </div>\\n        {% } %}\\n      {% }) %}\\n      {% if (!instance.options.readOnly && !instance.disabled) { %}\\n        <div class=\\\"col-sm-2\\\">\\n          <div class=\\\"btn-group pull-right\\\">\\n            <button class=\\\"btn btn-default btn-light btn-sm editRow\\\"><i class=\\\"{{ iconClass('edit') }}\\\"></i></button>\\n            {% if (!instance.hasRemoveButtons || instance.hasRemoveButtons()) { %}\\n              <button class=\\\"btn btn-danger btn-sm removeRow\\\"><i class=\\\"{{ iconClass('trash') }}\\\"></i></button>\\n            {% } %}\\n          </div>\\n        </div>\\n      {% } %}\\n    </div>\"\n                                                },\n                                                \"input\": true,\n                                                \"components\": [\n                                                    {\n                                                        \"label\": \"When:\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": true,\n                                                        \"dataSrc\": \"json\",\n                                                        \"valueProperty\": \"value\",\n                                                        \"placeholder\": \"Select Form Component\",\n                                                        \"lazyLoad\": false,\n                                                        \"data\": {\n                                                            \"json\": \"[{\\\"value\\\":\\\"(submission).created\\\",\\\"label\\\":\\\"Created\\\"},{\\\"value\\\":\\\"(submission).modified\\\",\\\"label\\\":\\\"Modified\\\"},{\\\"value\\\":\\\"(submission).state\\\",\\\"label\\\":\\\"State\\\"}]\"\n                                                        },\n                                                        \"key\": \"component\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true,\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"Show a tip when submission.created property is selected\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.component === '(submission).created';\\n\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"Show a tip\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Description\",\n                                                                            \"value\": \"description\",\n                                                                            \"type\": \"string\"\n                                                                        },\n                                                                        \"text\": \"Notice that 'created' property is not available when action is triggered Before Create, so it won't be executed\"\n                                                                    }\n                                                                ]\n                                                            },\n                                                            {\n                                                                \"name\": \"Show a tip when submission.modified property is selected\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = row.component === '(submission).modified';\\n\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"Show a tip\",\n                                                                        \"type\": \"property\",\n                                                                        \"property\": {\n                                                                            \"label\": \"Description\",\n                                                                            \"value\": \"description\",\n                                                                            \"type\": \"string\"\n                                                                        },\n                                                                        \"text\": \"Notice that 'modified' property is not available Before/After Create. It also is not available or is equal to the last edit date Before Update and Before/After Read. So make sure that you configure it properly.\"\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ]\n                                                    },\n                                                    {\n                                                        \"label\": \"Is:\",\n                                                        \"widget\": \"choicesjs\",\n                                                        \"tableView\": true,\n                                                        \"dataSrc\": \"custom\",\n                                                        \"lazyLoad\": false,\n                                                        \"placeholder\": \"Select Comparison Operator\",\n                                                        \"refreshOn\": \"condition.conditions.component\",\n                                                        \"clearOnRefresh\": true,\n                                                        \"valueProperty\": \"value\",\n                                                        \"data\": {\n                                                            \"custom\": \"\\n                            const formComponents = {\\\"firstName\\\":{\\\"type\\\":\\\"textfield\\\",\\\"label\\\":\\\"First Name\\\",\\\"key\\\":\\\"firstName\\\",\\\"validate\\\":{\\\"required\\\":true}},\\\"middleName\\\":{\\\"type\\\":\\\"textfield\\\",\\\"label\\\":\\\"Middle Name\\\",\\\"key\\\":\\\"middleName\\\"},\\\"lastName\\\":{\\\"type\\\":\\\"textfield\\\",\\\"label\\\":\\\"Last Name\\\",\\\"key\\\":\\\"lastName\\\",\\\"validate\\\":{\\\"required\\\":true}},\\\"email\\\":{\\\"type\\\":\\\"email\\\",\\\"label\\\":\\\"Email\\\",\\\"key\\\":\\\"email\\\",\\\"validate\\\":{\\\"required\\\":true}},\\\"phoneNumber\\\":{\\\"inputMask\\\":\\\"(999) 999-9999\\\",\\\"label\\\":\\\"Phone Number\\\",\\\"key\\\":\\\"phoneNumber\\\",\\\"type\\\":\\\"phoneNumber\\\"},\\\"submit\\\":{\\\"label\\\":\\\"Submit\\\",\\\"key\\\":\\\"submit\\\",\\\"action\\\":\\\"submit\\\",\\\"type\\\":\\\"button\\\"}};\\n                            const rootLevelProperties = {\\\"(submission).created\\\":[\\\"isDateEqual\\\",\\\"isNotDateEqual\\\",\\\"dateLessThan\\\",\\\"dateGreaterThan\\\",\\\"dateLessThanOrEqual\\\",\\\"dateGreaterThanOrEqual\\\"],\\\"(submission).modified\\\":[\\\"isDateEqual\\\",\\\"isNotDateEqual\\\",\\\"dateLessThan\\\",\\\"dateGreaterThan\\\",\\\"dateLessThanOrEqual\\\",\\\"dateGreaterThanOrEqual\\\"],\\\"(submission).state\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\"]};\\n                            const isRootLevelProperty = row.component &&\\n                              row.component.startsWith &&\\n                              row.component.startsWith('(submission).');\\n                            const conditionComponent = formComponents[row.component];\\n                            let componentType = conditionComponent ? conditionComponent.type : 'base';\\n                            if (isRootLevelProperty) {\\n                              componentType = row.component;\\n                            }\\n                            const operatorsByComponentType = {\\\"base\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"address\\\":[\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"component\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"button\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"checkbox\\\":[\\\"isEqual\\\"],\\\"columns\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"container\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"content\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"currency\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"lessThan\\\",\\\"greaterThan\\\",\\\"lessThanOrEqual\\\",\\\"greaterThanOrEqual\\\"],\\\"datagrid\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"datamap\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"datetime\\\":[\\\"isDateEqual\\\",\\\"isNotDateEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"dateLessThan\\\",\\\"dateGreaterThan\\\",\\\"dateLessThanOrEqual\\\",\\\"dateGreaterThanOrEqual\\\"],\\\"day\\\":[\\\"isDateEqual\\\",\\\"isNotDateEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"dateLessThan\\\",\\\"dateGreaterThan\\\",\\\"dateLessThanOrEqual\\\",\\\"dateGreaterThanOrEqual\\\"],\\\"editgrid\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"email\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"includes\\\",\\\"notIncludes\\\",\\\"endsWith\\\",\\\"startsWith\\\"],\\\"input\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"field\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"multivalue\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"list\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"fieldset\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"file\\\":[\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"form\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"hidden\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"htmlelement\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"nested\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"nesteddata\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"nestedarray\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"number\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"lessThan\\\",\\\"greaterThan\\\",\\\"lessThanOrEqual\\\",\\\"greaterThanOrEqual\\\"],\\\"panel\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"password\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"includes\\\",\\\"notIncludes\\\",\\\"endsWith\\\",\\\"startsWith\\\"],\\\"phoneNumber\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"includes\\\",\\\"notIncludes\\\",\\\"endsWith\\\",\\\"startsWith\\\"],\\\"radio\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"recaptcha\\\":[\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"select\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"selectboxes\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"signature\\\":[\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"survey\\\":[\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"table\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"tabs\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"tags\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"includes\\\",\\\"notIncludes\\\"],\\\"textarea\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"includes\\\",\\\"notIncludes\\\",\\\"endsWith\\\",\\\"startsWith\\\"],\\\"textfield\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"includes\\\",\\\"notIncludes\\\",\\\"endsWith\\\",\\\"startsWith\\\"],\\\"time\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"includes\\\",\\\"notIncludes\\\",\\\"endsWith\\\",\\\"startsWith\\\"],\\\"unknown\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"url\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\",\\\"includes\\\",\\\"notIncludes\\\",\\\"endsWith\\\",\\\"startsWith\\\"],\\\"well\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\",\\\"isEmpty\\\",\\\"isNotEmpty\\\"],\\\"(submission).created\\\":[\\\"isDateEqual\\\",\\\"isNotDateEqual\\\",\\\"dateLessThan\\\",\\\"dateGreaterThan\\\",\\\"dateLessThanOrEqual\\\",\\\"dateGreaterThanOrEqual\\\"],\\\"(submission).modified\\\":[\\\"isDateEqual\\\",\\\"isNotDateEqual\\\",\\\"dateLessThan\\\",\\\"dateGreaterThan\\\",\\\"dateLessThanOrEqual\\\",\\\"dateGreaterThanOrEqual\\\"],\\\"(submission).state\\\":[\\\"isEqual\\\",\\\"isNotEqual\\\"]};\\n                            let operators = operatorsByComponentType[componentType];\\n                            if (!operators || !operators.length) {\\n                              operators = operatorsByComponentType.base;\\n                            }\\n                            const allOperators = [{\\\"value\\\":\\\"isNotEqual\\\",\\\"label\\\":\\\"Is Not Equal To\\\"},{\\\"value\\\":\\\"isEqual\\\",\\\"label\\\":\\\"Is Equal To\\\"},{\\\"value\\\":\\\"isEmpty\\\",\\\"label\\\":\\\"Is Empty\\\"},{\\\"value\\\":\\\"isNotEmpty\\\",\\\"label\\\":\\\"Is Not Empty\\\"},{\\\"value\\\":\\\"lessThan\\\",\\\"label\\\":\\\"Less Than\\\"},{\\\"value\\\":\\\"greaterThan\\\",\\\"label\\\":\\\"Greater Than\\\"},{\\\"value\\\":\\\"dateGreaterThan\\\",\\\"label\\\":\\\"Greater Than\\\"},{\\\"value\\\":\\\"dateLessThan\\\",\\\"label\\\":\\\"Less Than\\\"},{\\\"value\\\":\\\"includes\\\",\\\"label\\\":\\\"Includes\\\"},{\\\"value\\\":\\\"startsWith\\\",\\\"label\\\":\\\"Starts With\\\"},{\\\"value\\\":\\\"endsWith\\\",\\\"label\\\":\\\"Ends With\\\"},{\\\"value\\\":\\\"notIncludes\\\",\\\"label\\\":\\\"Not Includes\\\"},{\\\"value\\\":\\\"dateGreaterThanOrEqual\\\",\\\"label\\\":\\\"Greater Than Or Equal To\\\"},{\\\"value\\\":\\\"dateLessThanOrEqual\\\",\\\"label\\\":\\\"Less Than Or Equal To\\\"},{\\\"value\\\":\\\"lessThanOrEqual\\\",\\\"label\\\":\\\"Less Than Or Equal To\\\"},{\\\"value\\\":\\\"greaterThanOrEqual\\\",\\\"label\\\":\\\"Greater Than Or Equal To\\\"},{\\\"value\\\":\\\"isDateEqual\\\",\\\"label\\\":\\\"Is Equal To\\\"},{\\\"value\\\":\\\"isNotDateEqual\\\",\\\"label\\\":\\\"Is Not Equal To\\\"}];\\n\\n                            values = allOperators.filter((operator) => operators.includes(operator.value));\\n                          \"\n                                                        },\n                                                        \"key\": \"operator\",\n                                                        \"type\": \"select\",\n                                                        \"input\": true\n                                                    },\n                                                    {\n                                                        \"type\": \"textfield\",\n                                                        \"inputFormat\": \"plain\",\n                                                        \"label\": \"Value:\",\n                                                        \"key\": \"value\",\n                                                        \"placeholder\": \"Enter Compared Value\",\n                                                        \"input\": true,\n                                                        \"typeChangeEnabled\": true,\n                                                        \"logic\": [\n                                                            {\n                                                                \"name\": \"check if row component is defined\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = !!row.component;\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"change value component\",\n                                                                        \"type\": \"mergeComponentSchema\",\n                                                                        \"schemaDefinition\": \"\\n            const valueComponentsByFieldPath = {\\\"(submission).created\\\":{\\\"type\\\":\\\"datetime\\\",\\\"widget\\\":{\\\"type\\\":\\\"calendar\\\",\\\"displayInTimezone\\\":\\\"viewer\\\",\\\"locale\\\":\\\"en\\\",\\\"useLocaleSettings\\\":false,\\\"allowInput\\\":true,\\\"mode\\\":\\\"single\\\",\\\"enableTime\\\":true,\\\"noCalendar\\\":false,\\\"format\\\":\\\"yyyy-MM-dd hh:mm a\\\",\\\"hourIncrement\\\":1,\\\"minuteIncrement\\\":1,\\\"time_24hr\\\":false,\\\"minDate\\\":null,\\\"disableWeekends\\\":false,\\\"disableWeekdays\\\":false,\\\"maxDate\\\":null}},\\\"(submission).modified\\\":{\\\"type\\\":\\\"datetime\\\",\\\"widget\\\":{\\\"type\\\":\\\"calendar\\\",\\\"displayInTimezone\\\":\\\"viewer\\\",\\\"locale\\\":\\\"en\\\",\\\"useLocaleSettings\\\":false,\\\"allowInput\\\":true,\\\"mode\\\":\\\"single\\\",\\\"enableTime\\\":true,\\\"noCalendar\\\":false,\\\"format\\\":\\\"yyyy-MM-dd hh:mm a\\\",\\\"hourIncrement\\\":1,\\\"minuteIncrement\\\":1,\\\"time_24hr\\\":false,\\\"minDate\\\":null,\\\"disableWeekends\\\":false,\\\"disableWeekdays\\\":false,\\\"maxDate\\\":null}},\\\"(submission).state\\\":{\\\"valueType\\\":\\\"string\\\",\\\"data\\\":{\\\"values\\\":[{\\\"label\\\":\\\"Draft\\\",\\\"value\\\":\\\"draft\\\"},{\\\"label\\\":\\\"Submitted\\\",\\\"value\\\":\\\"submitted\\\"}]},\\\"type\\\":\\\"select\\\"}};\\n            const valueComponent = valueComponentsByFieldPath[row.component] || { type: 'textfield' };\\n\\n            if (valueComponent.type !== 'datetime') {\\n              valueComponent.widget = null;\\n            }\\n\\n            schema = {\\n              ...valueComponent,\\n              ..._.pick(component, [\\n                'label', 'key', 'placeholder', 'input', 'typeChangeEnabled', 'logic', 'customConditional'\\n              ])\\n            };\\n          \"\n                                                                    }\n                                                                ]\n                                                            },\n                                                            {\n                                                                \"name\": \"clear value on empty operator\",\n                                                                \"trigger\": {\n                                                                    \"type\": \"javascript\",\n                                                                    \"javascript\": \"result = !row.operator && row[component.key];\"\n                                                                },\n                                                                \"actions\": [\n                                                                    {\n                                                                        \"name\": \"clear value\",\n                                                                        \"type\": \"customAction\",\n                                                                        \"customAction\": \"instance.resetValue()\"\n                                                                    }\n                                                                ]\n                                                            }\n                                                        ],\n                                                        \"customConditional\": \"\\n      const singleOperators = [\\\"isEmpty\\\",\\\"isNotEmpty\\\"];\\n      show = !_.includes(singleOperators, row.operator);\\n    \"\n                                                    }\n                                                ]\n                                            }\n                                        ]\n                                    },\n                                    {\n                                        \"components\": [\n                                            {\n                                                \"key\": \"well2\",\n                                                \"type\": \"well\",\n                                                \"input\": false,\n                                                \"components\": [\n                                                    {\n                                                        \"key\": \"html\",\n                                                        \"type\": \"htmlelement\",\n                                                        \"tag\": \"h4\",\n                                                        \"input\": false,\n                                                        \"content\": \"Or you can provide your own custom JavaScript or <a href=\\\"http://jsonlogic.com\\\" target=\\\"_blank\\\">JSON</a> condition logic here\",\n                                                        \"className\": \"\"\n                                                    },\n                                                    {\n                                                        \"label\": \"\",\n                                                        \"type\": \"textarea\",\n                                                        \"input\": true,\n                                                        \"key\": \"custom\",\n                                                        \"editorComponents\": [\n                                                            {\n                                                                \"type\": \"textfield\",\n                                                                \"label\": \"First Name\",\n                                                                \"key\": \"firstName\",\n                                                                \"validate\": {\n                                                                    \"required\": true\n                                                                }\n                                                            },\n                                                            {\n                                                                \"type\": \"textfield\",\n                                                                \"label\": \"Middle Name\",\n                                                                \"key\": \"middleName\"\n                                                            },\n                                                            {\n                                                                \"type\": \"textfield\",\n                                                                \"label\": \"Last Name\",\n                                                                \"key\": \"lastName\",\n                                                                \"validate\": {\n                                                                    \"required\": true\n                                                                }\n                                                            },\n                                                            {\n                                                                \"type\": \"email\",\n                                                                \"label\": \"Email\",\n                                                                \"key\": \"email\",\n                                                                \"validate\": {\n                                                                    \"required\": true\n                                                                }\n                                                            },\n                                                            {\n                                                                \"inputMask\": \"(999) 999-9999\",\n                                                                \"label\": \"Phone Number\",\n                                                                \"key\": \"phoneNumber\",\n                                                                \"type\": \"phoneNumber\"\n                                                            },\n                                                            {\n                                                                \"label\": \"Submit\",\n                                                                \"key\": \"submit\",\n                                                                \"action\": \"submit\",\n                                                                \"type\": \"button\"\n                                                            }\n                                                        ],\n                                                        \"placeholder\": \"\\n        // Example: Only execute if submitted roles has 'authenticated'.\\n        JavaScript: execute = (data.roles.indexOf('authenticated') !== -1);\\n        JSON: { \\\"in\\\": [ \\\"authenticated\\\", { \\\"var\\\": \\\"data.roles\\\" } ] }\\n      \"\n                                                    }\n                                                ]\n                                            }\n                                        ]\n                                    }\n                                ]\n                            }\n                        ]\n                    }\n                ]\n            },\n            {\n                \"key\": \"html2\",\n                \"type\": \"htmlelement\",\n                \"tag\": \"hr\",\n                \"input\": false,\n                \"content\": \"\",\n                \"className\": \"\"\n            },\n            {\n                \"type\": \"button\",\n                \"input\": true,\n                \"label\": \"Save Action\",\n                \"key\": \"submit\",\n                \"size\": \"md\",\n                \"leftIcon\": \"\",\n                \"rightIcon\": \"\",\n                \"block\": false,\n                \"action\": \"submit\",\n                \"disableOnInvalid\": true,\n                \"theme\": \"primary\"\n            }\n        ],\n        \"action\": \"/project/69d65f4e040fa2cea257224d/form/69d68907040fa2cea2572b71/action\"\n    }\n}"}],"_postman_id":"f28fb43b-bc55-4f2f-954c-839dd62a8add"},{"name":"Add Action to Form","event":[{"listen":"test","script":{"id":"e04b898c-6eb2-4a13-ab89-a35a48754fcf","exec":["pm.environment.set(\" exampleEmailActionId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"8df7bb93-eb36-498b-a920-93b628ba3db4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"email\",\n  \"title\": \"Email\",\n  \"method\": [\n    \"create\"\n  ],\n  \"handler\": [\n    \"after\"\n  ],\n  \"priority\": 0,\n  \"settings\": {\n    \"emails\": [\n      \"test@example.com\"\n    ],\n    \"from\": \"np-reply@form.io\",\n    \"message\": \"{{ submission(data, form.components) }}\",\n    \"subject\": \"New submission for {{ form.title }}.\",\n    \"transport\": \"default\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/action","description":"<p>This request will attach an Action to an existing Form. The request provides the following parameters within a POST request body.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Setting</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>String</td>\n<td>The name of this action. Should be one of the provided actions available.</td>\n</tr>\n<tr>\n<td>title</td>\n<td>String</td>\n<td>The title provided to this action, which can be any title you chose</td>\n</tr>\n<tr>\n<td>handler</td>\n<td>Array</td>\n<td>The handlers to execute this action. Either \"before\" or \"after\"</td>\n</tr>\n<tr>\n<td>methods</td>\n<td>Array</td>\n<td>The methods for when this action will execute.</td>\n</tr>\n<tr>\n<td>settings</td>\n<td>Object</td>\n<td>The settings for this action</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","action"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"51db1f6a-21d6-45d8-9ca6-eaf223c0e4bf","name":"Add Action to Form","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"email\",\n  \"title\": \"Email\",\n  \"method\": [\n    \"create\"\n  ],\n  \"handler\": [\n    \"after\"\n  ],\n  \"priority\": 0,\n  \"settings\": {\n    \"emails\": [\n      \"test@example.com\"\n    ],\n    \"from\": \"np-reply@form.io\",\n    \"message\": \"{{ submission(data, form.components) }}\",\n    \"subject\": \"New submission for {{ form.title }}.\",\n    \"transport\": \"default\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/action"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 19:09:43 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"390"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"186-kk/eZzbEKXyvRc8yZC97MJXfoxQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Email\",\n    \"name\": \"email\",\n    \"handler\": [\n        \"after\"\n    ],\n    \"method\": [\n        \"create\"\n    ],\n    \"priority\": 0,\n    \"settings\": {\n        \"emails\": [\n            \"test@example.com\"\n        ],\n        \"from\": \"np-reply@form.io\",\n        \"message\": \"{{ submission(data, form.components) }}\",\n        \"subject\": \"New submission for {{ form.title }}.\",\n        \"transport\": \"default\"\n    },\n    \"form\": \"69d68907040fa2cea2572b71\",\n    \"_id\": \"69d6a7f7040fa2cea2572eec\",\n    \"machineName\": \"example:example:email\"\n}"}],"_postman_id":"8df7bb93-eb36-498b-a920-93b628ba3db4"},{"name":"List all Actions attached to a form","id":"843f2cbb-8d40-4eb1-b2bb-23d6ecd57315","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/action","description":"<p>This API will list all actions attached to a specific form.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","action"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"0c1694e3-96c5-4d32-a047-384822492838","name":"List all Actions attached to a form","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/action"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 19:16:27 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"610"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-1/2"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"262-4ZFtF2K5kVQE20L+x304nasmU2Y\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69d68907040fa2cea2572b79\",\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"handler\": [\n            \"before\"\n        ],\n        \"method\": [\n            \"create\",\n            \"update\"\n        ],\n        \"priority\": 10,\n        \"form\": \"69d68907040fa2cea2572b71\",\n        \"machineName\": \"example:example:save\"\n    },\n    {\n        \"_id\": \"69d6a7f7040fa2cea2572eec\",\n        \"title\": \"Email\",\n        \"name\": \"email\",\n        \"handler\": [\n            \"after\"\n        ],\n        \"method\": [\n            \"create\"\n        ],\n        \"priority\": 0,\n        \"settings\": {\n            \"emails\": [\n                \"test@example.com\"\n            ],\n            \"from\": \"np-reply@form.io\",\n            \"message\": \"{{ submission(data, form.components) }}\",\n            \"subject\": \"New submission for {{ form.title }}.\",\n            \"transport\": \"default\"\n        },\n        \"form\": \"69d68907040fa2cea2572b71\",\n        \"machineName\": \"example:example:email\"\n    }\n]"}],"_postman_id":"843f2cbb-8d40-4eb1-b2bb-23d6ecd57315"},{"name":"Get a specific Action attached to a Form","id":"c89f497d-742b-4f94-853d-8584653ce94c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/action/{{ exampleEmailActionId }}","description":"<p>This request will fetch a specific action attached to a form.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","action","{{ exampleEmailActionId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"b44e2499-a087-4012-ba35-41ba3fed3a42","name":"Get a specific Action attached to a Form","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/action/69d6a7f7040fa2cea2572eec"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 19:17:48 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"390"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"186-05VAfWqr12cJ8NMnZDUMFvWDRQ0\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d6a7f7040fa2cea2572eec\",\n    \"title\": \"Email\",\n    \"name\": \"email\",\n    \"handler\": [\n        \"after\"\n    ],\n    \"method\": [\n        \"create\"\n    ],\n    \"priority\": 0,\n    \"settings\": {\n        \"emails\": [\n            \"test@example.com\"\n        ],\n        \"from\": \"np-reply@form.io\",\n        \"message\": \"{{ submission(data, form.components) }}\",\n        \"subject\": \"New submission for {{ form.title }}.\",\n        \"transport\": \"default\"\n    },\n    \"form\": \"69d68907040fa2cea2572b71\",\n    \"machineName\": \"example:example:email\"\n}"}],"_postman_id":"c89f497d-742b-4f94-853d-8584653ce94c"},{"name":"Update an Action","id":"116e4361-c608-4207-8da8-a0a3a08cd812","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"email\",\n  \"title\": \"Email\",\n  \"method\": [\n    \"create\"\n  ],\n  \"handler\": [\n    \"after\"\n  ],\n  \"priority\": 0,\n  \"settings\": {\n    \"emails\": [\n      \"test@example.com\",\n      \"another@example.com\"\n    ],\n    \"from\": \"np-reply@form.io\",\n    \"message\": \"{{ submission(data, form.components) }}\",\n    \"subject\": \"New submission for {{ form.title }}.\",\n    \"transport\": \"default\"\n  }\n}"},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/action/{{ exampleEmailActionId }}","description":"<p>This request will update an action attached to the form.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","action","{{ exampleEmailActionId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"30e59aef-b1f2-4e80-876a-a7acf6354a04","name":"Update an Action","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"name\": \"email\",\n  \"title\": \"Email\",\n  \"method\": [\n    \"create\"\n  ],\n  \"handler\": [\n    \"after\"\n  ],\n  \"priority\": 0,\n  \"settings\": {\n    \"emails\": [\n      \"test@example.com\",\n      \"another@example.com\"\n    ],\n    \"from\": \"np-reply@form.io\",\n    \"message\": \"{{ submission(data, form.components) }}\",\n    \"subject\": \"New submission for {{ form.title }}.\",\n    \"transport\": \"default\"\n  }\n}"},"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/action/69d6a7f7040fa2cea2572eec"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 19:19:16 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"412"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"19c-UmkkfvFtKjGDXo7Q8YaoSKxX3cU\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Email\",\n    \"name\": \"email\",\n    \"handler\": [\n        \"after\"\n    ],\n    \"method\": [\n        \"create\"\n    ],\n    \"priority\": 0,\n    \"settings\": {\n        \"emails\": [\n            \"test@example.com\",\n            \"another@example.com\"\n        ],\n        \"from\": \"np-reply@form.io\",\n        \"message\": \"{{ submission(data, form.components) }}\",\n        \"subject\": \"New submission for {{ form.title }}.\",\n        \"transport\": \"default\"\n    },\n    \"form\": \"69d68907040fa2cea2572b71\",\n    \"_id\": \"69d6a7f7040fa2cea2572eec\",\n    \"machineName\": \"example:example:email\"\n}"}],"_postman_id":"116e4361-c608-4207-8da8-a0a3a08cd812"},{"name":"Delete an Action","id":"96894b25-2d85-4192-9124-0f7ba743f106","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"formdata","formdata":[]},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ exampleFormId }}/action/{{ exampleEmailActionId }}","description":"<p>This request deletes an action attached to a form.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ exampleFormId }}","action","{{ exampleEmailActionId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"f97be66f-cbed-4a01-afa0-e4d81145dbce","name":"Delete an Action","originalRequest":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"formdata","formdata":[]},"url":"https://forms.example.com/example/form/69dd5b72bb04c38a910291fc/action/69d6a7f7040fa2cea2572eec"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Wed, 08 Apr 2026 19:21:21 GMT"},{"key":"Content-Type","value":"text/plain; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"OK"}],"_postman_id":"96894b25-2d85-4192-9124-0f7ba743f106"}],"id":"609b550a-72b8-4fc0-9b19-a83a525a17ee","description":"<p>The Action API provides a way to add Actions to forms what are executed when the form is submitted.</p>\n","event":[{"listen":"prerequest","script":{"id":"42164db3-6fe4-4ff3-9594-993a00d8a800","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"bbb2439c-67e1-49b8-8b7b-4ed132a60fe7","type":"text/javascript","exec":[""]}}],"_postman_id":"609b550a-72b8-4fc0-9b19-a83a525a17ee"}],"id":"e9cf15e2-c3b5-4d1b-9c61-175affec9d58","description":"<p><strong>Project scope</strong> defines all of the APIs necessary to properly manage the Forms, Resources, Actions, settings, and Roles and Permissions within a single project. The authentication for this mechanism is provided via the API Key of a project as well as through the Admin resource within that project. The authentication is scoped to that project.</p>\n","_postman_id":"e9cf15e2-c3b5-4d1b-9c61-175affec9d58"},{"name":"Runtime Scope","item":[{"name":"Authentication","item":[{"name":"Create User","event":[{"listen":"test","script":{"id":"a4308c0a-5d7a-4d14-9353-8df7c90083e7","exec":["pm.environment.set(\" appUserEmail \", pm.response.json().data.email);",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"eeffb003-bd2b-41c6-ab70-ce015391ecfe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"Sterling.Kreiger93@hotmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/user/submission","description":"<p>Within each new default project, there is a special resource called <code>User</code>, that is used for the runtime scope authentication. By default, any user that is added to the user resource receives the <code>Authenticated</code> role.</p>\n","urlObject":{"path":["{{ projectName }}","user","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"3529114e-b87d-45bf-a874-de46da939712","name":"Create User","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"aniya42@gmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/user/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Fri, 10 Apr 2026 13:17:26 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"688"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2b0-gsJe4EqV+rlMYlY1gEpPVvGueUE\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69d65f4e040fa2cea2572261\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [\n        \"69d65f4e040fa2cea2572258\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"92\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"email\": \"aniya42@gmail.com\"\n    },\n    \"_id\": \"69d8f866040fa2cea2575003\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-10T13:17:26.864Z\",\n    \"modified\": \"2026-04-10T13:17:26.865Z\"\n}"}],"_postman_id":"eeffb003-bd2b-41c6-ab70-ce015391ecfe"},{"name":"User Login","event":[{"listen":"test","script":{"id":"4c5fe9ee-347e-471f-8cf5-760dd784c3cf","exec":["pm.environment.set(\" appUserJWT \", pm.response.headers.get('x-jwt-token'));",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"6322465e-1344-4b5d-b439-ac95c96362e2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"{{ appUserEmail }}\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/user/login/submission","description":"<p>Now that a user has been created, they can then login to the Form.io platform using the default <code>user/login</code> form. This form contains a <code>Login</code> action by default which is linked to the user resource to perform the authentication flow and generate a JWT token for that user.</p>\n<p>Since this API is within the runtime scope, it would be common to have this API called from the front-end application to authenticate an end user into that application.</p>\n","urlObject":{"path":["{{ projectName }}","user","login","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"0874c217-d86b-47fe-88be-6d255017f2d3","name":"User Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"aniya42@gmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/user/login/submission"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Fri, 10 Apr 2026 13:22:37 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"749"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"2ed-Nc/uVU4qKSaDPqlZCzGpbUI/Oc8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d8f993040fa2cea257506b\",\n    \"form\": \"69d65f4e040fa2cea2572261\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [\n        \"69d65f4e040fa2cea2572258\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"108\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"login\": {\n            \"attempts\": 0,\n            \"last\": 1775827357469\n        }\n    },\n    \"data\": {\n        \"email\": \"caroline.christiansen65@gmail.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-10T13:22:27.448Z\",\n    \"modified\": \"2026-04-10T13:22:27.448Z\"\n}"}],"_postman_id":"6322465e-1344-4b5d-b439-ac95c96362e2"},{"name":"Get Current User","id":"f1e2184d-1908-4fd6-ac46-cffe24bb2ff9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ appUserJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/current","description":"<p>Once a user has been authenticated, they can at any time send a GET request to the /current endpoint within a project to retrieve their user information. They must pass their authentication token to this endpoint within the <code>x-jwt-token</code> header.</p>\n","urlObject":{"path":["{{ projectName }}","current"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"f69e8f59-9057-4e33-8ea6-27cfc18adf89","name":"Get Current User","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ appUserJWT }}","type":"text"}],"url":"https://forms.example.com/example/current"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Fri, 10 Apr 2026 13:31:13 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"816"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"330-7hsnVNsyZW8BM/Qivew85aeYoDY\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69d8f993040fa2cea257506b\",\n    \"form\": \"69d65f4e040fa2cea2572261\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [\n        \"69d65f4e040fa2cea2572258\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"108\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"login\": {\n            \"attempts\": 0,\n            \"last\": 1775827826072\n        }\n    },\n    \"data\": {\n        \"email\": \"caroline.christiansen65@gmail.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"externalTokens\": [],\n    \"created\": \"2026-04-10T13:22:27.448Z\",\n    \"modified\": \"2026-04-10T13:22:27.448Z\",\n    \"isAdmin\": false,\n    \"onlyPrimaryWriteAccess\": false\n}"}],"_postman_id":"f1e2184d-1908-4fd6-ac46-cffe24bb2ff9"},{"name":"User Logout","id":"e3a87a61-3c31-41a3-97d7-51fd51816544","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ appUserJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/logout","description":"<p>To logout, the application a user is utilizing simply needs to send a GET request to the project endpoint at the <code>/logout</code> path. Every user that is currently authenticated is tracked via sessions within the Form.io Enterprise platform, and when a logout is called for this user, their session expires and they cannot use that token again for any other requests.</p>\n","urlObject":{"path":["{{ projectName }}","logout"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"84173f36-a6df-483e-a692-793a4574b2d1","name":"User Logout","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ appUserJWT }}","type":"text"}],"url":"https://forms.example.com/example/logout"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Fri, 10 Apr 2026 13:28:34 GMT"},{"key":"Content-Type","value":"text/plain; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":""},{"key":"ETag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"OK"}],"_postman_id":"e3a87a61-3c31-41a3-97d7-51fd51816544"},{"name":"Session Expired","id":"55cf1a41-0290-48cd-9a9c-f7c9a70805d7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ appUserJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/current","description":"<p>Now that the user has logged out, any requests that are attempted to be made against any endpoint using the previous token will receive a 'Session no longer valid' response with a status of 440.</p>\n","urlObject":{"path":["{{ projectName }}","current"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"ad9aa38e-8eef-4e4d-a683-424900d5c14a","name":"Session Expired","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ appUserJWT }}","type":"text"}],"url":"https://forms.example.com/example/current"},"status":"unknown","code":440,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Fri, 10 Apr 2026 13:29:31 GMT"},{"key":"Content-Type","value":"text/html; charset=utf-8"},{"key":"Content-Length","value":"24"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"ETag","value":"W/\"18-DFCCFpepghwAAUfnUS9yTsLgQ5g\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"Session no longer valid."}],"_postman_id":"55cf1a41-0290-48cd-9a9c-f7c9a70805d7"}],"id":"482f0d3f-a911-4a96-801d-4deea46bb2b7","description":"<p>The purpose for authentication within the runtime scope is to provide runtime users the ability to perform authenticated requests within a 'live' application embedding the Form.io platform. This authentication is strictly limited to access within a single project and does not allow for any cross-talk between different projects, even if they are on the same environment.</p>\n<p>Because of the wide variety of applications that require bespoke user authorization and permissions with data driven applications, there are many ways to configure authentication within the runtime scope to cover most cases. The following describes a list of different Authentication Schemes provided to the runtime scope.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Authentication Scheme</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Form.io Resource based authentication</td>\n<td>This provides a user the ability to 'authenticate' as a submission within ANY resource within a Form.io project.</td>\n</tr>\n<tr>\n<td>OAuth OIDC Remote Auth</td>\n<td>Allows for a user to authenticate with an external OIDC OpenID Connect provider. The user-record (source of truth) will strictly remain within the remote identity provider, and any user interaction with forms and submissions will be done through the use of an ephemeral user</td>\n</tr>\n<tr>\n<td>OAuth OIDC Linked Account</td>\n<td>Allows for a user to authenticate with an external OIDC OpenID Connect provider, and then 'link' that record to an existing Form.io resource submission object. This provides a way to easily extend any external IDP through leveraging the flexible nature of Form.io resources.</td>\n</tr>\n<tr>\n<td>SAML</td>\n<td>Provides a way to authenticate with an external SAML provider, The user record (source of truth) will strictly remain within the remote SAML provider.</td>\n</tr>\n<tr>\n<td>LDAP</td>\n<td>Provides a way to authenticate with an external LDAP provider. The user record (source of truth) will strictly remain within the remote LDAP provider</td>\n</tr>\n<tr>\n<td>Custom JWT</td>\n<td>In addition to using the authentication schemes above, it is possible for a deployed environment to 'forge' their own JWT tokens using the <code>JWT_SECRET</code> that is provided when the server has been deployed.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"482f0d3f-a911-4a96-801d-4deea46bb2b7"},{"name":"Custom User Types and Role Assignments","item":[{"name":"Create a custom user type","event":[{"listen":"test","script":{"id":"1d53de87-054f-4e33-ad85-9a62855fde0c","exec":["pm.environment.set(\" employeeResourceId \", pm.response.json()._id);","pm.environment.set(\" employeeResourcePath \", pm.response.json().path);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"e9b1a415-3595-45f4-8809-28fc9b4399ef","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee\",\n  \"display\": \"form\",\n  \"type\": \"resource\",\n  \"name\": \"employee\",\n  \"path\": \"employee\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"label\": \"Password\",\n      \"key\": \"password\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form","description":"<p>Here we will create a new Resource within our Form.io project that will serve as the source for all Employee users within our application. It is important, since we are creating a resource that will be required to login, that we add a password component to this resource. This way, when creating a new record that is used for a user, that user can provide a secret password to 'claim' their submission and perform the authentication.</p>\n","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"4746611a-785f-4922-93a5-629045907a15","name":"Create a custom user type","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee\",\n  \"display\": \"form\",\n  \"type\": \"resource\",\n  \"name\": \"employee\",\n  \"path\": \"employee\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"label\": \"Password\",\n      \"key\": \"password\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"inputMask\": \"(999) 999-9999\",\n      \"label\": \"Phone Number\",\n      \"key\": \"phoneNumber\",\n      \"type\": \"phoneNumber\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:31:17 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1120"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"460-JrBvrqR4lXeCs+hSkqJBolYXp+8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd0c45040fa2cea2578aa1\",\n    \"title\": \"Employee\",\n    \"name\": \"employee\",\n    \"path\": \"employee\",\n    \"type\": \"resource\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"password\",\n            \"label\": \"Password\",\n            \"key\": \"password\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"inputMask\": \"(999) 999-9999\",\n            \"label\": \"Phone Number\",\n            \"key\": \"phoneNumber\",\n            \"type\": \"phoneNumber\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"created\": \"2026-04-13T15:31:17.638Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-13T15:31:17.645Z\",\n    \"machineName\": \"example:employee\"\n}"}],"_postman_id":"e9b1a415-3595-45f4-8809-28fc9b4399ef"},{"name":"Create custom user role","event":[{"listen":"test","script":{"id":"0590443f-b6ee-4246-8c7b-7ab58ef20674","exec":["pm.environment.set(\" employeeRoleId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"af4a7725-41b3-4e11-a4a0-7edfd2370e7a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee\",\n  \"description\": \"A user who is an employee of a company.\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/role","description":"<p>Now that we have a bespoke resource for our User, it is also prudent to create a Role that will be associated with the new user type.</p>\n","urlObject":{"path":["{{ projectName }}","role"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"65a4182c-5cc0-43f6-bab8-a21786fd32da","name":"Create custom user role","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee\",\n  \"description\": \"A user who is an employee of a company.\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/role"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:32:56 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"295"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"127-r6AplC600+5/ZwoAwUwfIgkF8W0\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Employee\",\n    \"description\": \"A user who is an employee of a company.\",\n    \"default\": false,\n    \"admin\": false,\n    \"_id\": \"69dd0ca8040fa2cea2578c09\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"created\": \"2026-04-13T15:32:56.225Z\",\n    \"modified\": \"2026-04-13T15:32:56.227Z\",\n    \"machineName\": \"example:employee655\"\n}"}],"_postman_id":"af4a7725-41b3-4e11-a4a0-7edfd2370e7a"},{"name":"Add Role Assignment action to Resource","id":"d6fc01e7-1068-4e93-ac04-7b1010200dd8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"priority\": 1,\n  \"name\": \"role\",\n  \"title\": \"Role Assignment: Employee\",\n  \"settings\": {\n    \"association\": \"new\",\n    \"type\": \"add\",\n    \"role\": \"{{ employeeRoleId }}\"\n  },\n  \"handler\": [\n    \"after\"\n  ],\n  \"method\": [\n    \"create\"\n  ],\n  \"condition\": {\n    \"conjunction\": \"\",\n    \"conditions\": [],\n    \"custom\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ employeeResourceId }}/action","description":"<p>Now with an Employee resource and also an Employee role, the next objective is to add the Role Assigment action to the Employee resource. The purpose of this is to ensure that every new 'employee' added to this resource will receive the 'Employee' role.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ employeeResourceId }}","action"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"5d364f05-3f9d-4680-afd6-bb7ef2965c5c","name":"Add Role Assignment action to Resource","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"priority\": 1,\n  \"name\": \"role\",\n  \"title\": \"Role Assignment: Employee\",\n  \"settings\": {\n    \"association\": \"new\",\n    \"type\": \"add\",\n    \"role\": \"69dd0ca8040fa2cea2578c09\"\n  },\n  \"handler\": [\n    \"after\"\n  ],\n  \"method\": [\n    \"create\"\n  ],\n  \"condition\": {\n    \"conjunction\": \"\",\n    \"conditions\": [],\n    \"custom\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form/69dd0c45040fa2cea2578aa1/action"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:33:42 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"355"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"163-M1pQgBGvpVKAyoAiFHVWq5UErFs\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Role Assignment: Employee\",\n    \"name\": \"role\",\n    \"handler\": [\n        \"after\"\n    ],\n    \"method\": [\n        \"create\"\n    ],\n    \"condition\": {\n        \"conjunction\": \"\",\n        \"conditions\": [],\n        \"custom\": \"\"\n    },\n    \"priority\": 1,\n    \"settings\": {\n        \"association\": \"new\",\n        \"type\": \"add\",\n        \"role\": \"69dd0ca8040fa2cea2578c09\"\n    },\n    \"form\": \"69dd0c45040fa2cea2578aa1\",\n    \"_id\": \"69dd0cd5040fa2cea2578c30\",\n    \"machineName\": \"example:employee:role\"\n}"}],"_postman_id":"d6fc01e7-1068-4e93-ac04-7b1010200dd8"},{"name":"Create new Employee 1","event":[{"listen":"test","script":{"id":"fb6ff2bb-2352-4288-97d8-030d9f1c6e38","exec":["pm.environment.set(\" employee1Id \", pm.response.json()._id);","pm.environment.set(\" employee1Email \", pm.response.json().data.email);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"902a1016-5a16-494e-babb-85628f988c7b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"firstName\": \"Angelica\",\n    \"lastName\": \"Bailey\",\n    \"email\": \"Mitchel83@hotmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeResourcePath }}/submission","description":"<p>Now that we have an 'Employee' resource, an 'Employee' role, and have added the Role Assignment action to the employee resource that will add the employee role to any new submission within the 'employee' resource, we can add new Employee user accounts by simply submitting the 'Employee' resource form.</p>\n<p>The result will return a new submission record, but with one big difference. The 'roles' property of this submission will contain the role id's of the Employee role that we just created.</p>\n","urlObject":{"path":["{{ projectName }}","{{ employeeResourcePath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"984a9333-f73a-4a58-8dda-8ff09532ebef","name":"Create new Employee 1","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"firstName\": \"Kaylin\",\n    \"lastName\": \"Terry\",\n    \"email\": \"zack69@hotmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/employee/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:36:31 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"804"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"324-EjmFRLhR3dCXCrMfQfxIrdPrWh8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd0c45040fa2cea2578aa1\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"153\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Kaylin\",\n        \"lastName\": \"Terry\",\n        \"password\": \"$2a$10$OlPNoK/Vmq2gLxCXC4reOOp2PUFuHjSuS3lnHNMr6wnmrNng8G5Se\",\n        \"email\": \"zack69@hotmail.com\"\n    },\n    \"_id\": \"69dd0d7f040fa2cea2578e35\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T15:36:31.600Z\",\n    \"modified\": \"2026-04-13T15:36:31.601Z\"\n}"}],"_postman_id":"902a1016-5a16-494e-babb-85628f988c7b"},{"name":"Create new Employee 2","event":[{"listen":"test","script":{"id":"fb6ff2bb-2352-4288-97d8-030d9f1c6e38","exec":["pm.environment.set(\" employee2Id \", pm.response.json()._id);","pm.environment.set(\" employee2Email \", pm.response.json().data.email);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"e6442740-427f-4382-894d-f12fce719747","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"firstName\": \"Friedrich\",\n    \"lastName\": \"Monahan\",\n    \"email\": \"Lisette.Weissnat23@gmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeResourcePath }}/submission","description":"<p>We are now able to submit a new employee record so that we can test different user accounts access to different records.</p>\n","urlObject":{"path":["{{ projectName }}","{{ employeeResourcePath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"19a909fc-56a6-4601-a50a-0729b507186e","name":"Create new Employee 2","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"firstName\": \"Beau\",\n    \"lastName\": \"Wisoky\",\n    \"email\": \"sigrid29@hotmail.com\",\n    \"password\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/employee/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:40:48 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"805"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"325-tinmmY6nEbK1zY0xe57J+9MDu/c\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd0c45040fa2cea2578aa1\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"154\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Beau\",\n        \"lastName\": \"Wisoky\",\n        \"password\": \"$2a$10$2ShuUPZ7xoA8FH3PNnOEyOESOiGW2SOZQchTByQpH8wKrY/s/FK2q\",\n        \"email\": \"sigrid29@hotmail.com\"\n    },\n    \"_id\": \"69dd0e80040fa2cea2578e75\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T15:40:48.916Z\",\n    \"modified\": \"2026-04-13T15:40:48.917Z\"\n}"}],"_postman_id":"e6442740-427f-4382-894d-f12fce719747"},{"name":"Create Employee Login Form","event":[{"listen":"test","script":{"id":"6199b153-3f87-4973-aaa0-baa7745192a2","exec":["pm.environment.set(\" employeeLoginFormId \", pm.response.json()._id);","pm.environment.set(\" employeeLoginFormName \", pm.response.json().name);","pm.environment.set(\" employeeLoginFormPath \", pm.response.json().path);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"0f05ee2b-02ba-452e-9d61-b94c6157d8f8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee Login\",\n  \"path\": \"employee/login\",\n  \"name\": \"employeeLogin\",\n  \"type\": \"form\",\n  \"components\": [\n    {\n      \"type\": \"email\",\n      \"key\": \"email\",\n      \"label\": \"Email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"key\": \"password\",\n      \"label\": \"Password\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"key\": \"verifyPassword\",\n      \"label\": \"Verify Password\",\n      \"validate\": {\n        \"required\": true,\n        \"custom\": \"valid = input === data.password ? true : 'Passwords must match'\"\n      }\n    },\n    {\n      \"type\": \"button\",\n      \"action\": \"submit\",\n      \"label\": \"Login as a Customer\",\n      \"key\": \"submit\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form","description":"<p>Now that we have an Employee resource, with an Employee Role, and now a user record (submission) for the employee, we can create a new form that allows for the Employees to 'login' to our application. This can be done in a few ways.</p>\n<ol>\n<li><p>We can edit the <code>Login</code> action of the existing user/login form, and simply add the <code>{{ employeeResourceId }}</code> to the 'resources' array within the settings of the <code>Login</code> Action. What this will do is make the 'lookup' span accross multiple resources when looking for the user to authenticate. It would also allow an application to embed only a single form that is capable of logging in Employees as well as regular users. The drawback to this approach however, is that there is now not a 'unique' separation between the Employee users and the regular users, meaning that it would be possible to have user email collisions where only the first record is selected.</p>\n</li>\n<li><p>Create a separate login form that will be embedded separately within our application (such as a 'Employee Login' page). This means that any employees would need to enter the application through a separate login entrypoint, but would then guarantee that no other user types would be able to use the same form when authenticating within the application.</p>\n</li>\n</ol>\n<p>For this API, we will chose #2 as the approach we will use by creating a new login form for the Employee resource types.</p>\n","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"1f25159f-93c7-4972-92a7-ed7ff55ecb4a","name":"Create Employee Login Form","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee Login\",\n  \"path\": \"employee/login\",\n  \"name\": \"employeeLogin\",\n  \"type\": \"form\",\n  \"components\": [\n    {\n      \"type\": \"email\",\n      \"key\": \"email\",\n      \"label\": \"Email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"key\": \"password\",\n      \"label\": \"Password\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"key\": \"verifyPassword\",\n      \"label\": \"Verify Password\",\n      \"validate\": {\n        \"required\": true,\n        \"custom\": \"valid = input === data.password ? true : 'Passwords must match'\"\n      }\n    },\n    {\n      \"type\": \"button\",\n      \"action\": \"submit\",\n      \"label\": \"Login as a Customer\",\n      \"key\": \"submit\"\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:46:57 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1065"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"429-rhnLkuQQibC8dfvV1WpdTIn7eRk\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd0ff1040fa2cea2578ee4\",\n    \"title\": \"Employee Login\",\n    \"name\": \"employeeLogin\",\n    \"path\": \"employee/login\",\n    \"type\": \"form\",\n    \"tags\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"email\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"password\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"password\",\n            \"key\": \"verifyPassword\",\n            \"label\": \"Verify Password\",\n            \"validate\": {\n                \"required\": true,\n                \"custom\": \"valid = input === data.password ? true : 'Passwords must match'\"\n            }\n        },\n        {\n            \"type\": \"button\",\n            \"action\": \"submit\",\n            \"label\": \"Login as a Customer\",\n            \"key\": \"submit\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\",\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"created\": \"2026-04-13T15:46:57.690Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-13T15:46:57.693Z\",\n    \"machineName\": \"example:employeeLogin\"\n}"}],"_postman_id":"0f05ee2b-02ba-452e-9d61-b94c6157d8f8"},{"name":"Allow Anonymous Submissions","id":"c3b34fa9-f3ed-4b18-8679-3745ecea9b88","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ employeeLoginFormId }}\",\n  \"title\": \"Employee Login\",\n  \"name\": \"{{ employeeLoginFormName }}\",\n  \"path\": \"{{ employeeLoginFormPath }}\",\n  \"type\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"email\",\n      \"key\": \"email\",\n      \"label\": \"Email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"key\": \"password\",\n      \"label\": \"Password\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"key\": \"verifyPassword\",\n      \"label\": \"Verify Password\",\n      \"validate\": {\n        \"required\": true,\n        \"custom\": \"valid = input === data.password ? true : 'Passwords must match'\"\n      }\n    },\n    {\n      \"type\": \"button\",\n      \"action\": \"submit\",\n      \"label\": \"Login as a Customer\",\n      \"key\": \"submit\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 0,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\",\n        \"69d901ab040fa2cea257524f\",\n        \"69dd0ca8040fa2cea2578c09\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [\n    {\n      \"type\": \"create_own\",\n      \"roles\": [\n        \"{{ projectAnonymousRoleId }}\"\n      ]\n    }\n  ],\n  \"created\": \"2026-04-13T15:46:57.690Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-13T15:46:57.693Z\",\n  \"machineName\": \"{{ projectName }}:{{ employeeLoginFormName }}\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeLoginFormPath }}","description":"<p>Next, we need to ensure that Anonymous users are able to submit this form. The reason for this is because when a user is logging into an application, they will be viewing and submitting the login form anonymously. We can achieve this by adding the Anonymous Role ID to the <code>submissionAccess</code> <code>create_own</code> permission.</p>\n","urlObject":{"path":["{{ projectName }}","{{ employeeLoginFormPath }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"09778282-c6cb-46ca-ba56-dddd0ace805c","name":"Allow Anonymous Submissions","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69dd0ff1040fa2cea2578ee4\",\n  \"title\": \"Employee Login\",\n  \"name\": \"employeeLogin\",\n  \"path\": \"employee/login\",\n  \"type\": \"form\",\n  \"tags\": [],\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"components\": [\n    {\n      \"type\": \"email\",\n      \"key\": \"email\",\n      \"label\": \"Email\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"key\": \"password\",\n      \"label\": \"Password\",\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"password\",\n      \"key\": \"verifyPassword\",\n      \"label\": \"Verify Password\",\n      \"validate\": {\n        \"required\": true,\n        \"custom\": \"valid = input === data.password ? true : 'Passwords must match'\"\n      }\n    },\n    {\n      \"type\": \"button\",\n      \"action\": \"submit\",\n      \"label\": \"Login as a Customer\",\n      \"key\": \"submit\"\n    }\n  ],\n  \"pdfComponents\": [],\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"revisions\": \"\",\n  \"submissionRevisions\": \"\",\n  \"_vid\": 0,\n  \"access\": [\n    {\n      \"type\": \"read_all\",\n      \"roles\": [\n        \"69d65f4e040fa2cea2572254\",\n        \"69d65f4e040fa2cea2572258\",\n        \"69d65f4e040fa2cea257225c\",\n        \"69d68310040fa2cea2572945\",\n        \"69d901ab040fa2cea257524f\",\n        \"69dd0ca8040fa2cea2578c09\"\n      ]\n    }\n  ],\n  \"submissionAccess\": [\n    {\n      \"type\": \"create_own\",\n      \"roles\": [\n        \"{{ projectAnonymousRoleId }}\"\n      ]\n    }\n  ],\n  \"created\": \"2026-04-13T15:46:57.690Z\",\n  \"esign\": {},\n  \"modified\": \"2026-04-13T15:46:57.693Z\",\n  \"machineName\": \"example:employeeLogin-860\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/employee/login-947"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:49:48 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1123"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"463-tas2lb0uS1jAIxAgV2cqF6S202M\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Employee Login\",\n    \"name\": \"employeeLogin\",\n    \"path\": \"employee/login\",\n    \"type\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\",\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [\n        {\n            \"type\": \"create_own\",\n            \"roles\": [\n                \"69d65f4e040fa2cea257225c\"\n            ]\n        }\n    ],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"email\",\n            \"key\": \"email\",\n            \"label\": \"Email\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"password\",\n            \"key\": \"password\",\n            \"label\": \"Password\",\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"password\",\n            \"key\": \"verifyPassword\",\n            \"label\": \"Verify Password\",\n            \"validate\": {\n                \"required\": true,\n                \"custom\": \"valid = input === data.password ? true : 'Passwords must match'\"\n            }\n        },\n        {\n            \"type\": \"button\",\n            \"action\": \"submit\",\n            \"label\": \"Login as a Customer\",\n            \"key\": \"submit\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"_id\": \"69dd0ff1040fa2cea2578ee4\",\n    \"created\": \"2026-04-13T15:46:57.690Z\",\n    \"modified\": \"2026-04-13T15:49:48.861Z\",\n    \"machineName\": \"example:employeeLogin\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"esign\": {}\n}"}],"_postman_id":"c3b34fa9-f3ed-4b18-8679-3745ecea9b88"},{"name":"Get actions for Login Form","event":[{"listen":"test","script":{"id":"f9c0feea-bdb6-4377-9eaf-4715a156c126","exec":["pm.environment.set(\" employeeLoginSaveActionId \", pm.response.json()[0]._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"dd20ecee-93ba-427c-bd43-e1b1cfabd36e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeLoginFormPath }}/action","urlObject":{"path":["{{ projectName }}","{{ employeeLoginFormPath }}","action"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"5ccaf623-83ab-4c18-8b4a-d38868da99ea","name":"Get actions for Login Form","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/employee/login-947/action"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:50:30 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"225"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"e1-oEtDjeZAwJa4Rcq3zq/7g5sFGg0\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd0ff1040fa2cea2578eec\",\n        \"title\": \"Save Submission\",\n        \"name\": \"save\",\n        \"handler\": [\n            \"before\"\n        ],\n        \"method\": [\n            \"create\",\n            \"update\"\n        ],\n        \"priority\": 10,\n        \"form\": \"69dd0ff1040fa2cea2578ee4\",\n        \"machineName\": \"example:employeeLogin:save\"\n    }\n]"}],"_postman_id":"dd20ecee-93ba-427c-bd43-e1b1cfabd36e"},{"name":"Remove Save Submission from Employee Login Form","id":"b399cdb2-bd70-448d-81b5-754fae3560bc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeLoginFormPath }}/action/{{ employeeLoginSaveActionId }}","description":"<p>By default, a Save Submission action is added to every new form that is created within Form.io. For the case of Login, the default behavior should be to not save every single POST request made to login. This would make sense if you were creating a high compliance application that needed to 'log' every single login attempt made, but the typical case does not need that. For this reason, we will need to delete the default Save Submission action on the Login form.</p>\n","urlObject":{"path":["{{ projectName }}","{{ employeeLoginFormPath }}","action","{{ employeeLoginSaveActionId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"3b397790-30bc-4632-b52d-be39c256ede9","name":"Remove Save Submission from Employee Login Form","originalRequest":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/employee/login-947/action/69dd0ff1040fa2cea2578eec"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:51:14 GMT"},{"key":"Content-Type","value":"text/plain; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"OK"}],"_postman_id":"b399cdb2-bd70-448d-81b5-754fae3560bc"},{"name":"Add Login Action to Employee Login Form","id":"a064d35d-4b15-4493-85f4-45dced4c4903","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"priority\": 2,\n  \"name\": \"login\",\n  \"title\": \"Employee Login\",\n  \"settings\": {\n    \"resources\": [\n      \"{{ employeeResourceId }}\"\n    ],\n    \"username\": \"email\",\n    \"password\": \"password\",\n    \"allowedAttempts\": \"5\",\n    \"attemptWindow\": \"30\",\n    \"lockWait\": \"1800\"\n  },\n  \"handler\": [\n    \"before\"\n  ],\n  \"method\": [\n    \"create\"\n  ],\n  \"condition\": {\n    \"conjunction\": \"\",\n    \"conditions\": [],\n    \"custom\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeLoginFormPath }}/action","description":"<p>We can now add a Login Action to the employee login form, which will enable the user lookup and JWT generation when an employee provides an email along with a password that matches the encrypted password.</p>\n","urlObject":{"path":["{{ projectName }}","{{ employeeLoginFormPath }}","action"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"7ffdfb25-8d43-4897-8a5d-5901bd59b5d5","name":"Add Login Action to Employee Login Form","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"priority\": 2,\n  \"name\": \"login\",\n  \"title\": \"Employee Login\",\n  \"settings\": {\n    \"resources\": [\n      \"69dd0c45040fa2cea2578aa1\"\n    ],\n    \"username\": \"email\",\n    \"password\": \"password\",\n    \"allowedAttempts\": \"5\",\n    \"attemptWindow\": \"30\",\n    \"lockWait\": \"1800\"\n  },\n  \"handler\": [\n    \"before\"\n  ],\n  \"method\": [\n    \"create\"\n  ],\n  \"condition\": {\n    \"conjunction\": \"\",\n    \"conditions\": [],\n    \"custom\": \"\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/employee/login-947/action"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:51:53 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"429"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"1ad-2Ema2GhLLWY2Yi/wOj6An9Gxhdg\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Employee Login\",\n    \"name\": \"login\",\n    \"handler\": [\n        \"before\"\n    ],\n    \"method\": [\n        \"create\"\n    ],\n    \"condition\": {\n        \"conjunction\": \"\",\n        \"conditions\": [],\n        \"custom\": \"\"\n    },\n    \"priority\": 2,\n    \"settings\": {\n        \"resources\": [\n            \"69dd0c45040fa2cea2578aa1\"\n        ],\n        \"username\": \"email\",\n        \"password\": \"password\",\n        \"allowedAttempts\": \"5\",\n        \"attemptWindow\": \"30\",\n        \"lockWait\": \"1800\"\n    },\n    \"form\": \"69dd0ff1040fa2cea2578ee4\",\n    \"_id\": \"69dd1119040fa2cea2578f6b\",\n    \"machineName\": \"example:employeeLogin:login\"\n}"}],"_postman_id":"a064d35d-4b15-4493-85f4-45dced4c4903"},{"name":"Employee 1 Login","event":[{"listen":"test","script":{"id":"ef0c0a24-774b-498c-926a-56bd99f3fb1a","exec":["pm.environment.set(\" employee1JWT \", pm.response.headers.get('x-jwt-token'));"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"1bfa84f8-5b34-4e67-b78f-270991177828","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"{{ employee1Email }}\",\n    \"password\": \"CHANGEME\",\n    \"verifyPassword\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeLoginFormPath }}/submission","description":"<p>An employee can now login to the Employee Login form using their credentials. Once they do this, they will receive their own JWT token that will be used to authenticate that employee as the record they authenticated against.</p>\n<p>For this documentation, we will save this token as <code>employee1JWT</code> and <code>employee2JWT</code> respectively.</p>\n","urlObject":{"path":["{{ projectName }}","{{ employeeLoginFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"d78e36d8-7177-4a6a-ac14-c024da71b014","name":"Employee 1 Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"zack69@hotmail.com\",\n    \"password\": \"CHANGEME\",\n    \"verifyPassword\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/employee/login-947/submission"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:52:30 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"848"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"350-sxiUdinyG60K1r0bm8ZkR9iU2D8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd0d7f040fa2cea2578e35\",\n    \"form\": \"69dd0c45040fa2cea2578aa1\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"153\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"login\": {\n            \"attempts\": 0,\n            \"last\": 1776095550747\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Kaylin\",\n        \"lastName\": \"Terry\",\n        \"password\": \"$2a$10$OlPNoK/Vmq2gLxCXC4reOOp2PUFuHjSuS3lnHNMr6wnmrNng8G5Se\",\n        \"email\": \"zack69@hotmail.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T15:36:31.600Z\",\n    \"modified\": \"2026-04-13T15:36:31.601Z\"\n}"}],"_postman_id":"1bfa84f8-5b34-4e67-b78f-270991177828"},{"name":"Employee 2 Login","event":[{"listen":"test","script":{"id":"ef0c0a24-774b-498c-926a-56bd99f3fb1a","exec":["pm.environment.set(\" employee2JWT \", pm.response.headers.get('x-jwt-token'));"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"a5021f65-fd3e-4629-84e8-cd74ef5dbda1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"{{ employee2Email }}\",\n    \"password\": \"CHANGEME\",\n    \"verifyPassword\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeLoginFormPath }}/submission","description":"<p>Employee 2 will now authenticate and save their response x-jwt-token as <code>employee2JWT</code> variable.</p>\n","urlObject":{"path":["{{ projectName }}","{{ employeeLoginFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"2fb252a6-5ade-48fd-a5a5-01769195dbe5","name":"Employee 2 Login","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"email\": \"sigrid29@hotmail.com\",\n    \"password\": \"CHANGEME\",\n    \"verifyPassword\": \"CHANGEME\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/employee/login-947/submission"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:53:04 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"849"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"ETag","value":"W/\"351-LY4PhxXNjvWsEFixXRuv6PS+mT0\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd0e80040fa2cea2578e75\",\n    \"form\": \"69dd0c45040fa2cea2578aa1\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"154\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"login\": {\n            \"attempts\": 0,\n            \"last\": 1776095584675\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Beau\",\n        \"lastName\": \"Wisoky\",\n        \"password\": \"$2a$10$2ShuUPZ7xoA8FH3PNnOEyOESOiGW2SOZQchTByQpH8wKrY/s/FK2q\",\n        \"email\": \"sigrid29@hotmail.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T15:40:48.916Z\",\n    \"modified\": \"2026-04-13T15:40:48.917Z\"\n}"}],"_postman_id":"a5021f65-fd3e-4629-84e8-cd74ef5dbda1"}],"id":"12a71742-db40-41b9-a03e-bd23e44ce64a","description":"<p>One of the most flexible features of the Form.io platform is the capability to allow ANY resource to serve as a 'User' resource. This would, for example, allow an application that requires several bespoke user entities that also contain separate property field values (fields within the form).</p>\n<p>For example, let's suppose that your application has both Customer's and Vendor's and each one of these user entities have much different property values within that entity. If your application requires that both Customer's and Vendor's login to the application and then have different roles and permissions, then this would be accomplished by creating a separate resource for both Customer's and Vendor's and have them assigned to separate Roles created for each user type.</p>\n<h2 id=\"what-is-a-user-in-formio\">What is a \"user\" in Form.io?</h2>\n<p>This system is very unique to Form.io and is one of the more flexible and distinctive attributes of the Form.io platform. Within Form.io, a user is simply defined as a \"Submission with Assigned Roles\". This means that ANY submission can technically serve as a 'user', which means that any user object can be defined by the resource form that is used to create the submission. We can illustrate this concept by walking through the previous example using APIs to show how any resource can be used as a 'User' form within a form.io application.</p>\n","_postman_id":"12a71742-db40-41b9-a03e-bd23e44ce64a"},{"name":"Authentication & Authorization","item":[{"name":"Create form with \"own\" access","event":[{"listen":"test","script":{"id":"19d432ca-74da-4c93-b13f-68a1a512d5db","exec":["pm.environment.set(\" supportFormPath \", pm.response.json().path);","pm.environment.set(\" supportFormId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"316e8603-000f-4c66-ac51-5d404382a2f2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Support:\",\n  \"display\": \"form\",\n  \"type\": \"form\",\n  \"name\": \"support\",\n  \"path\": \"support\",\n  \"components\": [\n    {\n      \"label\": \"First Name\",\n      \"type\": \"textfield\",\n      \"key\": \"firstName\"\n    },\n    {\n      \"label\": \"Last Name\",\n      \"type\": \"textfield\",\n      \"key\": \"lastName\"\n    },\n    {\n      \"label\": \"Email\",\n      \"type\": \"email\",\n      \"key\": \"email\"\n    },\n    {\n      \"label\": \"Message\",\n      \"type\": \"message\",\n      \"key\": \"message\"\n    },\n    {\n      \"type\": \"button\",\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\"\n    }\n  ],\n  \"access\": [],\n  \"submissionAccess\": [\n    {\n      \"type\": \"create_own\",\n      \"roles\": [\n        \"{{ employeeRoleId }}\"\n      ]\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": [\n        \"{{ employeeRoleId }}\"\n      ]\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": [\n        \"{{ employeeRoleId }}\"\n      ]\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": [\n        \"{{ employeeRoleId }}\"\n      ]\n    }\n  ],\n  \"controller\": \"\",\n  \"properties\": {},\n  \"settings\": {}\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form","description":"<p>This will create a new \"support\" form for the purpose of testing different employees submitting this forms to which they should only have access to their form. It is able to do this by using the <code>submissionAccess</code> property and assigning the Employee Role ID as an <code>own</code> permissions within the form. This will ensure that any employee who submits this form will have full access to their own submissions but not any other employees submissions.</p>\n","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"75291371-7fc5-4dd9-98b6-2508fcbf58d6","name":"Create form with \"own\" access","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Support:\",\n  \"display\": \"form\",\n  \"type\": \"form\",\n  \"name\": \"support\",\n  \"path\": \"support\",\n  \"components\": [\n    {\n      \"label\": \"First Name\",\n      \"type\": \"textfield\",\n      \"key\": \"firstName\"\n    },\n    {\n      \"label\": \"Last Name\",\n      \"type\": \"textfield\",\n      \"key\": \"lastName\"\n    },\n    {\n      \"label\": \"Email\",\n      \"type\": \"email\",\n      \"key\": \"email\"\n    },\n    {\n      \"label\": \"Message\",\n      \"type\": \"message\",\n      \"key\": \"message\"\n    },\n    {\n      \"type\": \"button\",\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\"\n    }\n  ],\n  \"access\": [],\n  \"submissionAccess\": [\n    {\n      \"type\": \"create_own\",\n      \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n      ]\n    },\n    {\n      \"type\": \"read_own\",\n      \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n      ]\n    },\n    {\n      \"type\": \"update_own\",\n      \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n      ]\n    },\n    {\n      \"type\": \"delete_own\",\n      \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n      ]\n    }\n  ],\n  \"controller\": \"\",\n  \"properties\": {},\n  \"settings\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:56:51 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1211"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"4bb-KiH8Zfdkw1Qc/tuCD1d+bBFgtAw\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd1243040fa2cea2578fcd\",\n    \"title\": \"Support\",\n    \"name\": \"support\",\n    \"path\": \"support\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\",\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [\n        {\n            \"type\": \"create_own\",\n            \"roles\": [\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        },\n        {\n            \"type\": \"read_own\",\n            \"roles\": [\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        },\n        {\n            \"type\": \"update_own\",\n            \"roles\": [\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        },\n        {\n            \"type\": \"delete_own\",\n            \"roles\": [\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"label\": \"First Name\",\n            \"type\": \"textfield\",\n            \"key\": \"firstName\"\n        },\n        {\n            \"label\": \"Last Name\",\n            \"type\": \"textfield\",\n            \"key\": \"lastName\"\n        },\n        {\n            \"label\": \"Email\",\n            \"type\": \"email\",\n            \"key\": \"email\"\n        },\n        {\n            \"label\": \"Message\",\n            \"type\": \"message\",\n            \"key\": \"message\"\n        },\n        {\n            \"type\": \"button\",\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"settings\": {},\n    \"properties\": {},\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"controller\": \"\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"created\": \"2026-04-13T15:56:51.424Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-13T15:56:51.428Z\",\n    \"machineName\": \"example:support\"\n}"}],"_postman_id":"316e8603-000f-4c66-ac51-5d404382a2f2"},{"name":"Create a support submission as Employee 1","id":"83d41ac4-4b8e-4991-893a-41cb779de1a7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ employee1JWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"firstName\": \"Reggie\",\n    \"lastName\": \"Mayert\",\n    \"email\": \"{{ employee1Email }}\",\n    \"message\": \"This is a test\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ supportFormPath }}/submission","description":"<p>As employee 1, create a new support form record.</p>\n","urlObject":{"path":["{{ projectName }}","{{ supportFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"dc9af2f4-34f6-4e93-8ea4-ff0f72484066","name":"Create a support submission as Employee 1","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ employee1JWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"firstName\": \"Norris\",\n    \"lastName\": \"Haag\",\n    \"email\": \"zack69@hotmail.com\",\n    \"message\": \"This is a test\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/support/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 16:01:25 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"730"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2da-BjJlxsam6Ly9WONnKjhhZmB25AY\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd1243040fa2cea2578fcd\",\n    \"owner\": \"69dd0d7f040fa2cea2578e35\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"133\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Norris\",\n        \"lastName\": \"Haag\",\n        \"email\": \"zack69@hotmail.com\",\n        \"message\": \"This is a test\"\n    },\n    \"_id\": \"69dd1355040fa2cea2579019\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T16:01:25.904Z\",\n    \"modified\": \"2026-04-13T16:01:25.904Z\"\n}"}],"_postman_id":"83d41ac4-4b8e-4991-893a-41cb779de1a7"},{"name":"Create a support submission as Employee 2","id":"35aec893-b7ae-4580-aafc-98d78bd8f8fa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ employee2JWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"firstName\": \"Barrett\",\n    \"lastName\": \"O'Conner\",\n    \"email\": \"{{ employee2Email }}\",\n    \"message\": \"This is a test\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ supportFormPath }}/submission","description":"<p>As employee 2, create a new support form record.</p>\n","urlObject":{"path":["{{ projectName }}","{{ supportFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"64c9512e-0d37-4235-878e-8476e9032538","name":"Create a support submission as Employee 2","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ employee2JWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"firstName\": \"Pascale\",\n    \"lastName\": \"McLaughlin\",\n    \"email\": \"sigrid29@hotmail.com\",\n    \"message\": \"This is a test\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/support/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 16:02:43 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"739"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2e3-ofBNkoqFnOAKuH7UOu5KwCeMsaQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd1243040fa2cea2578fcd\",\n    \"owner\": \"69dd0e80040fa2cea2578e75\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"142\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Pascale\",\n        \"lastName\": \"McLaughlin\",\n        \"email\": \"sigrid29@hotmail.com\",\n        \"message\": \"This is a test\"\n    },\n    \"_id\": \"69dd13a3040fa2cea2579033\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T16:02:43.930Z\",\n    \"modified\": \"2026-04-13T16:02:43.931Z\"\n}"}],"_postman_id":"35aec893-b7ae-4580-aafc-98d78bd8f8fa"},{"name":"Employee 1 can only see their submissions","event":[{"listen":"test","script":{"id":"eab40285-e1d1-43db-9946-415be694de1e","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"ba8bbfa0-c82c-488f-8573-c3f7c42a1fba","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ employee1JWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ supportFormPath }}/submission","description":"<p>When the employee, authenticated as their account, performs a GET request to the support form, they will now ONLY see the records that they submitted.</p>\n","urlObject":{"path":["{{ projectName }}","{{ supportFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"14469280-da54-4c4d-be56-c27fa5899c6c","name":"Employee 1 can only see their submissions","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ employee1JWT }}","type":"text"}],"url":"https://forms.example.com/example/support/submission"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 16:03:25 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"732"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"2dc-dqiD+E+InX90EYI347hg9WNDhYc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd1355040fa2cea2579019\",\n        \"form\": \"69dd1243040fa2cea2578fcd\",\n        \"owner\": \"69dd0d7f040fa2cea2578e35\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"133\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            }\n        },\n        \"data\": {\n            \"firstName\": \"Norris\",\n            \"lastName\": \"Haag\",\n            \"email\": \"zack69@hotmail.com\",\n            \"message\": \"This is a test\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T16:01:25.904Z\",\n        \"modified\": \"2026-04-13T16:01:25.904Z\"\n    }\n]"}],"_postman_id":"ba8bbfa0-c82c-488f-8573-c3f7c42a1fba"},{"name":"Employee 2 can only see their submissions","event":[{"listen":"test","script":{"id":"eab40285-e1d1-43db-9946-415be694de1e","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"3f72050c-7448-4347-ad8c-126fffc6e23b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ employee2JWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ supportFormPath }}/submission","description":"<p>Same goes for the other employee. When they are authenticated as their account, they can now only see their submissions within the form.</p>\n","urlObject":{"path":["{{ projectName }}","{{ supportFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"e077a398-6a72-42f0-9c99-ed643a79fa4a","name":"Employee 2 can only see their submissions","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ employee2JWT }}","type":"text"}],"url":"https://forms.example.com/example/support/submission"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 16:04:16 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"741"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"2e5-dAfsdToILyg6xC6sh0oL+/GWg+c\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd13a3040fa2cea2579033\",\n        \"form\": \"69dd1243040fa2cea2578fcd\",\n        \"owner\": \"69dd0e80040fa2cea2578e75\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"142\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            }\n        },\n        \"data\": {\n            \"firstName\": \"Pascale\",\n            \"lastName\": \"McLaughlin\",\n            \"email\": \"sigrid29@hotmail.com\",\n            \"message\": \"This is a test\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T16:02:43.930Z\",\n        \"modified\": \"2026-04-13T16:02:43.931Z\"\n    }\n]"}],"_postman_id":"3f72050c-7448-4347-ad8c-126fffc6e23b"}],"id":"edea7789-28e5-4f74-82ad-1ae6fe295b2c","_postman_id":"edea7789-28e5-4f74-82ad-1ae6fe295b2c","description":""},{"name":"Group Permissions","item":[{"name":"Create Group Resource","event":[{"listen":"test","script":{"id":"0cd130ca-9452-42d5-a250-8d97197b8388","exec":["pm.environment.set(\" companyResourceId \", pm.response.json()._id);","pm.environment.set(\" companyResourcePath \", pm.response.json().path);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"644379ca-9b39-4e10-b4de-b969d6bce1eb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Company\",\n  \"display\": \"form\",\n  \"type\": \"resource\",\n  \"name\": \"company\",\n  \"path\": \"company\",\n  \"components\": [\n    {\n      \"label\": \"Name\",\n      \"key\": \"name\",\n      \"type\": \"textfield\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"access\": [],\n  \"submissionAccess\": [],\n  \"settings\": {}\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form","description":"<p>A Resource is created to represent the Group. That Resource is then used to establish the Group database. A group can be defined as any entity that is used to coalesce different sets of users into different groups. Here are some good examples of what could be defined as a Group.</p>\n<ul>\n<li><p><strong>Department</strong> - Place employees in their own departments.</p>\n</li>\n<li><p><strong>Team</strong> - Place athletes into their teams.</p>\n</li>\n<li><p><strong>Class</strong> - Used to collect teachers and students together into a \"class\" group.</p>\n</li>\n</ul>\n","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"c22f60dd-9cb2-4694-92be-02d2008b66f4","name":"Create Group Resource","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Company\",\n  \"display\": \"form\",\n  \"type\": \"resource\",\n  \"name\": \"company\",\n  \"path\": \"company\",\n  \"components\": [\n    {\n      \"label\": \"Name\",\n      \"key\": \"name\",\n      \"type\": \"textfield\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"access\": [],\n  \"submissionAccess\": [],\n  \"settings\": {}\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 14:06:18 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"749"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2ed-QjUS+jn3RY+U1TfKndtq+Q0l0jU\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dcf85a040fa2cea257873e\",\n    \"title\": \"Company\",\n    \"name\": \"company\",\n    \"path\": \"company\",\n    \"type\": \"resource\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"label\": \"Name\",\n            \"key\": \"name\",\n            \"type\": \"textfield\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"settings\": {},\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"created\": \"2026-04-13T14:06:18.374Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-13T14:06:18.377Z\",\n    \"machineName\": \"example:company\"\n}"}],"_postman_id":"644379ca-9b39-4e10-b4de-b969d6bce1eb"},{"name":"Create a company record","event":[{"listen":"test","script":{"id":"3bdd8959-bdd5-412b-a2c6-c03cfd256622","exec":["pm.environment.set(\" company1Id \", pm.response.json()._id);","pm.environment.set(\" company1Name \", pm.response.json().data.name);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"1f2fc065-2db3-44e1-a4f6-b7151566947d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"name\": \"Maggio LLC\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ companyResourcePath }}/submission","description":"<p>We will now create a few company records to demonstrate how resources work as Groups.</p>\n","urlObject":{"path":["{{ projectName }}","{{ companyResourcePath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"da9b5442-7d3a-41c6-b0f3-2d2c0068b740","name":"Create a company record","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"name\": \"Donnelly, Mraz and Connelly\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/company/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 14:06:34 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"671"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"29f-7zaxhbS1HeslsptYuYMNFk6pr7E\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dcf85a040fa2cea257873e\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"57\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"name\": \"Donnelly, Mraz and Connelly\"\n    },\n    \"_id\": \"69dcf86a040fa2cea2578756\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T14:06:34.480Z\",\n    \"modified\": \"2026-04-13T14:06:34.481Z\"\n}"}],"_postman_id":"1f2fc065-2db3-44e1-a4f6-b7151566947d"},{"name":"Create a company record","event":[{"listen":"test","script":{"id":"3bdd8959-bdd5-412b-a2c6-c03cfd256622","exec":["pm.environment.set(\" company2Id \", pm.response.json()._id);","pm.environment.set(\" company2Name \", pm.response.json().data.name);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"d163271d-bbfc-41ec-908e-a59815f48454","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"name\": \"Quitzon Group\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ companyResourcePath }}/submission","urlObject":{"path":["{{ projectName }}","{{ companyResourcePath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"cb0d3e25-b70d-41ea-9650-c97d710c104d","name":"Create a company record","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"name\": \"Gorczany, O'Reilly and Schmitt\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/company/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 14:06:49 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"674"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2a2-ns6tTX2qMJyc0Hl2KD/CvGYUlIQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dcf85a040fa2cea257873e\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"60\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"name\": \"Gorczany, O'Reilly and Schmitt\"\n    },\n    \"_id\": \"69dcf879040fa2cea2578763\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T14:06:49.197Z\",\n    \"modified\": \"2026-04-13T14:06:49.198Z\"\n}"}],"_postman_id":"d163271d-bbfc-41ec-908e-a59815f48454"},{"name":"Create Join Resource","event":[{"listen":"test","script":{"id":"a19fea81-a897-4dff-ac42-e8d53104d21d","exec":["pm.environment.set(\" employeeCompanyResourceId \", pm.response.json()._id);","pm.environment.set(\" employeeCompanyResourcePath \", pm.response.json().path);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"b605f18f-bd89-4f41-ad6c-a04709ce9ac4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee Company\",\n  \"display\": \"form\",\n  \"type\": \"resource\",\n  \"name\": \"employeeCompany\",\n  \"path\": \"employeeCompany\",\n  \"components\": [\n    {\n      \"label\": \"Employee\",\n      \"key\": \"employee\",\n      \"type\": \"select\",\n      \"dataSrc\": \"resource\",\n      \"data\": {\n        \"resource\": \"{{ employeeResourceId }}\"\n      },\n      \"template\": \"<span>{{ item.data.email }}</span>\"\n    },\n    {\n      \"label\": \"Company\",\n      \"key\": \"company\",\n      \"type\": \"select\",\n      \"dataSrc\": \"resource\",\n      \"reference\": true,\n      \"data\": {\n        \"resource\": \"{{ companyResourceId }}\"\n      },\n      \"template\": \"<span>{{ item.data.name }}</span>\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"access\": [],\n  \"submissionAccess\": [],\n  \"settings\": {},\n  \"page\": 0\n}"},"url":"{{ baseUrl }}/{{ projectName }}/form","description":"<p>You can establish a many-to-many relationship by creating a separate \"join\" resource which has only two Resource fields within it. This allows you to create records that \"joins\" together Employees with the Company they belong to. This also forms an API which allows you to request the company an employee blongs to by providing the \"data.company._id\" query parameter, or the employees within a company by providing the \"data.employee._id\" parameter.</p>\n<p>This can also be used to create a permission system that only allows customers access to records within their Company. A Select Resource field is then added to any form where Group Permissions should be established. Within the Access tab of the form, <a href=\"https://help.form.io/developers/roles-and-permissions/field-based-resource-access\"><b>Field-Based Resource Access</b></a> will be configured to assign permissions based on the Resource reference.</p>\n","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"d4c8b50b-f70d-4326-9266-8c06c77471fa","name":"Create Join Resource","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee Company\",\n  \"display\": \"form\",\n  \"type\": \"resource\",\n  \"name\": \"employeeCompany\",\n  \"path\": \"employeeCompany\",\n  \"components\": [\n    {\n      \"label\": \"Employee\",\n      \"key\": \"employee\",\n      \"type\": \"select\",\n      \"dataSrc\": \"resource\",\n      \"data\": {\n        \"resource\": \"69dd0c45040fa2cea2578aa1\"\n      },\n      \"template\": \"<span>{{ item.data.email }}</span>\"\n    },\n    {\n      \"label\": \"Company\",\n      \"key\": \"company\",\n      \"type\": \"select\",\n      \"dataSrc\": \"resource\",\n      \"reference\": true,\n      \"data\": {\n        \"resource\": \"69dcf85a040fa2cea257873e\"\n      },\n      \"template\": \"<span>{{ item.data.name }}</span>\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"access\": [],\n  \"submissionAccess\": [],\n  \"settings\": {},\n  \"page\": 0\n}"},"url":"https://forms.example.com/example/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:41:28 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1114"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"45a-9kVtcU9j/Wqr0FQzKvPzNwgGrQA\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd2ac8040fa2cea257917b\",\n    \"title\": \"Employee Company\",\n    \"name\": \"employeeCompany\",\n    \"path\": \"employeecompany\",\n    \"type\": \"resource\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\",\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"label\": \"Employee\",\n            \"key\": \"employee\",\n            \"type\": \"select\",\n            \"dataSrc\": \"resource\",\n            \"data\": {\n                \"resource\": \"69dd0c45040fa2cea2578aa1\"\n            },\n            \"template\": \"<span>{{ item.data.email }}</span>\"\n        },\n        {\n            \"label\": \"Company\",\n            \"key\": \"company\",\n            \"type\": \"select\",\n            \"dataSrc\": \"resource\",\n            \"reference\": true,\n            \"data\": {\n                \"resource\": \"69dcf85a040fa2cea257873e\"\n            },\n            \"template\": \"<span>{{ item.data.name }}</span>\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"settings\": {},\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"created\": \"2026-04-13T17:41:28.591Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-13T17:41:28.595Z\",\n    \"machineName\": \"example:employeeCompany\"\n}"}],"_postman_id":"b605f18f-bd89-4f41-ad6c-a04709ce9ac4"},{"name":"Add Group Assignment Action","id":"9ec09366-5379-439f-8006-f6d8caf58513","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"priority\": 5,\n    \"name\": \"group\",\n    \"title\": \"Group Assignment\",\n    \"settings\": {\n      \"group\": \"company\",\n      \"user\": \"employee\"\n    },\n    \"handler\": [\n      \"after\"\n    ],\n    \"method\": [\n      \"create\"\n    ],\n    \"condition\": {},\n    \"submit\": true\n  },\n  \"state\": \"submitted\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ employeeCompanyResourceId }}/action","description":"<p>A <a href=\"https://help.form.io/userguide/forms/form-building/actions#group-assignment\"><b>Group Assignment</b></a> action will then be added to the Resource where the Group and User fields will be defined. Submissions can then be made against this Resource which will save the Group and User to the submission object of the Join Resource. In this case, the <strong>Company</strong> is the group, and the <strong>Employee</strong> is the 'user'.</p>\n","urlObject":{"path":["{{ projectName }}","form","{{ employeeCompanyResourceId }}","action"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"8280bdc7-99ca-4dc4-b8af-a6e94f79aa36","name":"Add Group Assignment Action","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"priority\": 5,\n    \"name\": \"group\",\n    \"title\": \"Group Assignment\",\n    \"settings\": {\n      \"group\": \"company\",\n      \"user\": \"employee\"\n    },\n    \"handler\": [\n      \"after\"\n    ],\n    \"method\": [\n      \"create\"\n    ],\n    \"condition\": {},\n    \"submit\": true\n  },\n  \"state\": \"submitted\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form/69dd2ac8040fa2cea257917b/action"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:42:01 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"266"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"10a-3g26IwKYuZw65Rug1Y0Xr6dCrcw\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Group Assignment\",\n    \"name\": \"group\",\n    \"handler\": [\n        \"after\"\n    ],\n    \"method\": [\n        \"create\"\n    ],\n    \"priority\": 5,\n    \"settings\": {\n        \"group\": \"company\",\n        \"user\": \"employee\"\n    },\n    \"form\": \"69dd2ac8040fa2cea257917b\",\n    \"_id\": \"69dd2ae9040fa2cea2579196\",\n    \"machineName\": \"example:employeeCompany:group\"\n}"}],"_postman_id":"9ec09366-5379-439f-8006-f6d8caf58513"},{"name":"Assign Employee 1 to Company 1","id":"8072690b-7b69-4ba4-b1a4-c134d0b09a82","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"employee\": {\n      \"_id\": \"{{ employee1Id }}\",\n      \"data\": {\n        \"email\": \"{{ employee1Email }}\"\n      }\n    },\n    \"company\": {\n      \"_id\": \"{{ company1Id }}\",\n      \"data\": {\n        \"name\": \"{{ company1Name }}\"\n      }\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ customerCompanyResourcePath }}/submission","description":"<p>To create the 'join', we simply need to create a submission that selects the Employee and then select the Company that the employee belongs to. This creates a new record that serves as a join operator between the employee and the company that they belong to.</p>\n","urlObject":{"path":["{{ projectName }}","{{ customerCompanyResourcePath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"53e4419f-747b-4cff-9e51-e5925af0e811","name":"Assign Employee 1 to Company 1","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"employee\": {\n      \"_id\": \"69dd0d7f040fa2cea2578e35\",\n      \"data\": {\n        \"email\": \"zack69@hotmail.com\"\n      }\n    },\n    \"company\": {\n      \"_id\": \"69dcf86a040fa2cea2578756\",\n      \"data\": {\n        \"name\": \"Donnelly, Mraz and Connelly\"\n      }\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/{{ customerCompanyResourcePath }}/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:43:00 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"810"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"32a-S4mt6Z9j0u2WB3f+wJIPoFahdxQ\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd145f040fa2cea2579074\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"305\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"employee\": {\n            \"_id\": \"69dd0d7f040fa2cea2578e35\",\n            \"data\": {\n                \"email\": \"zack69@hotmail.com\"\n            }\n        },\n        \"company\": {\n            \"_id\": \"69dcf86a040fa2cea2578756\",\n            \"data\": {\n                \"name\": \"Donnelly, Mraz and Connelly\"\n            }\n        }\n    },\n    \"_id\": \"69dd2b24040fa2cea25791b9\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T17:43:00.679Z\",\n    \"modified\": \"2026-04-13T17:43:00.680Z\"\n}"}],"_postman_id":"8072690b-7b69-4ba4-b1a4-c134d0b09a82"},{"name":"Assign Employee 2 to Company 2","id":"70da1fc7-d324-4754-8e7d-7c4d63179be2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"employee\": {\n      \"_id\": \"{{ employee2Id }}\",\n      \"data\": {\n        \"email\": \"{{ employee2Email }}\"\n      }\n    },\n    \"company\": {\n      \"_id\": \"{{ company2Id }}\",\n      \"data\": {\n        \"name\": \"{{ company2Name }}\"\n      }\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ customerCompanyResourcePath }}/submission","description":"<p>We can now do this for another employee of that company.</p>\n","urlObject":{"path":["{{ projectName }}","{{ customerCompanyResourcePath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"f199f8b6-8a00-44a9-96bf-79f85acda2bd","name":"Assign Employee 2 to Company 2","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"employee\": {\n      \"_id\": \"69dd0e80040fa2cea2578e75\",\n      \"data\": {\n        \"email\": \"sigrid29@hotmail.com\"\n      }\n    },\n    \"company\": {\n      \"_id\": \"69dcf879040fa2cea2578763\",\n      \"data\": {\n        \"name\": \"Gorczany, O'Reilly and Schmitt\"\n      }\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/{{ customerCompanyResourcePath }}/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:43:41 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"815"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"32f-CqpxeEP5zuvnQcMsbZs3mdAH4UA\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd145f040fa2cea2579074\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"310\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"employee\": {\n            \"_id\": \"69dd0e80040fa2cea2578e75\",\n            \"data\": {\n                \"email\": \"sigrid29@hotmail.com\"\n            }\n        },\n        \"company\": {\n            \"_id\": \"69dcf879040fa2cea2578763\",\n            \"data\": {\n                \"name\": \"Gorczany, O'Reilly and Schmitt\"\n            }\n        }\n    },\n    \"_id\": \"69dd2b4d040fa2cea25791cb\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T17:43:41.676Z\",\n    \"modified\": \"2026-04-13T17:43:41.678Z\"\n}"}],"_postman_id":"70da1fc7-d324-4754-8e7d-7c4d63179be2"},{"name":"Ensure Customer 1 has Company 1 roles","event":[{"listen":"test","script":{"id":"b3943452-9329-4bfa-8841-a714f7d70af0","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"5c48f306-b194-4dff-95f2-f95e549f1c58","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeResourcePath }}/submission/{{ employee1Id }}","description":"<p>We should now see the company ID's assigned to the employee's roles.</p>\n","urlObject":{"path":["{{ projectName }}","{{ employeeResourcePath }}","submission","{{ employee1Id }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"e4263da6-fa48-4bd7-80dd-053d188a2510","name":"Ensure Customer 1 has Company 1 roles","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/employee/submission/69dd0d7f040fa2cea2578e35"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:45:31 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"848"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"350-sxiUdinyG60K1r0bm8ZkR9iU2D8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd0d7f040fa2cea2578e35\",\n    \"form\": \"69dd0c45040fa2cea2578aa1\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"153\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"login\": {\n            \"attempts\": 0,\n            \"last\": 1776095550747\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Kaylin\",\n        \"lastName\": \"Terry\",\n        \"password\": \"$2a$10$OlPNoK/Vmq2gLxCXC4reOOp2PUFuHjSuS3lnHNMr6wnmrNng8G5Se\",\n        \"email\": \"zack69@hotmail.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T15:36:31.600Z\",\n    \"modified\": \"2026-04-13T15:36:31.601Z\"\n}"}],"_postman_id":"5c48f306-b194-4dff-95f2-f95e549f1c58"},{"name":"Ensure Customer 2 has Company 2 roles","event":[{"listen":"test","script":{"id":"b3943452-9329-4bfa-8841-a714f7d70af0","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"bc3f66b6-d9b6-4703-9de3-8a3cb93a8853","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ employeeResourcePath }}/submission/{{ employee2Id }}","description":"<p>We should now see the department ID's assigned to the employee's roles.</p>\n","urlObject":{"path":["{{ projectName }}","{{ employeeResourcePath }}","submission","{{ employee2Id }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"edabb644-5dd4-4cb8-8576-0e755a817bd1","name":"Ensure Customer 2 has Company 2 roles","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/employee/submission/69dd0e80040fa2cea2578e75"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:46:26 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"849"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"351-LY4PhxXNjvWsEFixXRuv6PS+mT0\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd0e80040fa2cea2578e75\",\n    \"form\": \"69dd0c45040fa2cea2578aa1\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [\n        \"69dd0ca8040fa2cea2578c09\"\n    ],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"154\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"login\": {\n            \"attempts\": 0,\n            \"last\": 1776095584675\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Beau\",\n        \"lastName\": \"Wisoky\",\n        \"password\": \"$2a$10$2ShuUPZ7xoA8FH3PNnOEyOESOiGW2SOZQchTByQpH8wKrY/s/FK2q\",\n        \"email\": \"sigrid29@hotmail.com\"\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T15:40:48.916Z\",\n    \"modified\": \"2026-04-13T15:40:48.917Z\"\n}"}],"_postman_id":"bc3f66b6-d9b6-4703-9de3-8a3cb93a8853"},{"name":"Get Company Employees","id":"219d984b-0364-47d8-8ce3-4c3d106e9ceb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ customerCompanyResourcePath }}/submission?data.company._id={{ company1Id }}","description":"<p>Now that we have a JOIN resource in place that connects companies with employees, we can use this resource as our method for determing what records exist within other resources. For example, you can determine what Employee's exist within a certain Company, by simply sending a GET request to the submission endpoint of this resource and provide a query of <code>data.company._id={{ company1Id }}</code>. Alternatively, you can see what companies an employee belongs to by using the query <code>data.employee._id={{ employe1Id }}</code>.</p>\n","urlObject":{"path":["{{ projectName }}","{{ customerCompanyResourcePath }}","submission"],"host":["{{ baseUrl }}"],"query":[{"key":"data.company._id","value":"{{ company1Id }}"}],"variable":[]}},"response":[{"id":"1dc79c04-0cf3-46e5-a049-5b017330e00f","name":"Get Company Employees","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/{{ customerCompanyResourcePath }}/submission?data.company._id=69dcf86a040fa2cea2578756","protocol":"https","host":["forms","example","com"],"path":["example","{{ customerCompanyResourcePath }}","submission"],"query":[{"key":"data.company._id","value":"69dcf86a040fa2cea2578756"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:51:35 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"4252"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-2/3"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"109c-533yxiYM2rv8IeqLFXcVCw4S9Ts\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd2b17040fa2cea25791ac\",\n        \"form\": \"69dd145f040fa2cea2579074\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"305\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            }\n        },\n        \"data\": {\n            \"company\": {\n                \"_id\": \"69dcf86a040fa2cea2578756\",\n                \"form\": \"69dcf85a040fa2cea257873e\",\n                \"owner\": \"69d6813b040fa2cea257285a\",\n                \"deleted\": null,\n                \"roles\": [],\n                \"access\": [],\n                \"metadata\": {\n                    \"headers\": {\n                        \"host\": \"forms.example.com\",\n                        \"x-real-ip\": \"172.19.0.1\",\n                        \"x-forwarded-for\": \"172.19.0.1\",\n                        \"x-forwarded-proto\": \"https\",\n                        \"connection\": \"close\",\n                        \"content-length\": \"57\",\n                        \"content-type\": \"application/json\",\n                        \"user-agent\": \"PostmanRuntime/7.53.0\",\n                        \"accept\": \"*/*\",\n                        \"cache-control\": \"no-cache\",\n                        \"accept-encoding\": \"gzip, deflate, br\"\n                    }\n                },\n                \"data\": {\n                    \"name\": \"Donnelly, Mraz and Connelly\"\n                },\n                \"_fvid\": 0,\n                \"project\": \"69d65f4e040fa2cea257224d\",\n                \"state\": \"submitted\",\n                \"eSignatures\": [],\n                \"externalIds\": [],\n                \"externalTokens\": [],\n                \"created\": \"2026-04-13T14:06:34.480Z\",\n                \"modified\": \"2026-04-13T14:06:34.481Z\",\n                \"__v\": 0\n            }\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T17:42:47.258Z\",\n        \"modified\": \"2026-04-13T17:42:47.259Z\"\n    },\n    {\n        \"_id\": \"69dd2b24040fa2cea25791b9\",\n        \"form\": \"69dd145f040fa2cea2579074\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"305\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            }\n        },\n        \"data\": {\n            \"employee\": {\n                \"_id\": \"69dd0d7f040fa2cea2578e35\",\n                \"data\": {\n                    \"email\": \"zack69@hotmail.com\"\n                }\n            },\n            \"company\": {\n                \"_id\": \"69dcf86a040fa2cea2578756\",\n                \"form\": \"69dcf85a040fa2cea257873e\",\n                \"owner\": \"69d6813b040fa2cea257285a\",\n                \"deleted\": null,\n                \"roles\": [],\n                \"access\": [],\n                \"metadata\": {\n                    \"headers\": {\n                        \"host\": \"forms.example.com\",\n                        \"x-real-ip\": \"172.19.0.1\",\n                        \"x-forwarded-for\": \"172.19.0.1\",\n                        \"x-forwarded-proto\": \"https\",\n                        \"connection\": \"close\",\n                        \"content-length\": \"57\",\n                        \"content-type\": \"application/json\",\n                        \"user-agent\": \"PostmanRuntime/7.53.0\",\n                        \"accept\": \"*/*\",\n                        \"cache-control\": \"no-cache\",\n                        \"accept-encoding\": \"gzip, deflate, br\"\n                    }\n                },\n                \"data\": {\n                    \"name\": \"Donnelly, Mraz and Connelly\"\n                },\n                \"_fvid\": 0,\n                \"project\": \"69d65f4e040fa2cea257224d\",\n                \"state\": \"submitted\",\n                \"eSignatures\": [],\n                \"externalIds\": [],\n                \"externalTokens\": [],\n                \"created\": \"2026-04-13T14:06:34.480Z\",\n                \"modified\": \"2026-04-13T14:06:34.481Z\",\n                \"__v\": 0\n            }\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T17:43:00.679Z\",\n        \"modified\": \"2026-04-13T17:43:00.680Z\"\n    },\n    {\n        \"_id\": \"69dd2cf1040fa2cea2579549\",\n        \"form\": \"69dd145f040fa2cea2579074\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"305\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            }\n        },\n        \"data\": {\n            \"employee\": {\n                \"_id\": \"69dd0d7f040fa2cea2578e35\",\n                \"data\": {\n                    \"email\": \"zack69@hotmail.com\"\n                }\n            },\n            \"company\": {\n                \"_id\": \"69dcf86a040fa2cea2578756\",\n                \"form\": \"69dcf85a040fa2cea257873e\",\n                \"owner\": \"69d6813b040fa2cea257285a\",\n                \"deleted\": null,\n                \"roles\": [],\n                \"access\": [],\n                \"metadata\": {\n                    \"headers\": {\n                        \"host\": \"forms.example.com\",\n                        \"x-real-ip\": \"172.19.0.1\",\n                        \"x-forwarded-for\": \"172.19.0.1\",\n                        \"x-forwarded-proto\": \"https\",\n                        \"connection\": \"close\",\n                        \"content-length\": \"57\",\n                        \"content-type\": \"application/json\",\n                        \"user-agent\": \"PostmanRuntime/7.53.0\",\n                        \"accept\": \"*/*\",\n                        \"cache-control\": \"no-cache\",\n                        \"accept-encoding\": \"gzip, deflate, br\"\n                    }\n                },\n                \"data\": {\n                    \"name\": \"Donnelly, Mraz and Connelly\"\n                },\n                \"_fvid\": 0,\n                \"project\": \"69d65f4e040fa2cea257224d\",\n                \"state\": \"submitted\",\n                \"eSignatures\": [],\n                \"externalIds\": [],\n                \"externalTokens\": [],\n                \"created\": \"2026-04-13T14:06:34.480Z\",\n                \"modified\": \"2026-04-13T14:06:34.481Z\",\n                \"__v\": 0\n            }\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T17:50:41.993Z\",\n        \"modified\": \"2026-04-13T17:50:41.994Z\"\n    }\n]"}],"_postman_id":"219d984b-0364-47d8-8ce3-4c3d106e9ceb"},{"name":"Create a Company Report form","event":[{"listen":"test","script":{"id":"1110c557-9bf6-47c7-a755-a823e3ecc832","exec":["pm.environment.set(\" companyReportFormId \", pm.response.json()._id);","pm.environment.set(\" companyReportFormPath \", pm.response.json().path);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"48137e90-4c7c-4297-844b-a8c3b2340a54","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Company Report\",\n  \"display\": \"form\",\n  \"type\": \"form\",\n  \"components\": [\n    {\n      \"label\": \"Company\",\n      \"key\": \"company\",\n      \"type\": \"select\",\n      \"dataSrc\": \"resource\",\n      \"reference\": true,\n      \"submissionAccess\": [\n        {\n          \"type\": \"read\",\n          \"roles\": []\n        }\n      ],\n      \"data\": {\n        \"resource\": \"{{ companyResourceId }}\"\n      },\n      \"template\": \"<span>{{ item.data.name }}</span>\"\n    },\n    {\n      \"label\": \"Notes\",\n      \"key\": \"notes\",\n      \"type\": \"textarea\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"access\": [],\n  \"submissionAccess\": [],\n  \"settings\": {},\n  \"page\": 0,\n  \"name\": \"report\",\n  \"path\": \"report\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form","description":"<p>Let's now create a Company report form, and make sure to assign it to the specific company which this report exists within.</p>\n<p>Note that specifying group access for this form is done by providing <code>defaultPermission</code> Select / Resource component setting. Available values are 'read', 'create', 'write', 'admin'. To learn more about submission permissions, visit </p>\n<p><a href=\"https://help.form.io/userguide/roles-and-permissions/#submissionpermissions\">our online help docs.</a></p>\n","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"ec0eedc3-cb61-4f96-9e3c-bb1227606e8c","name":"Create a Company Report form","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Company Report\",\n  \"display\": \"form\",\n  \"type\": \"form\",\n  \"components\": [\n    {\n      \"label\": \"Company\",\n      \"key\": \"company\",\n      \"type\": \"select\",\n      \"dataSrc\": \"resource\",\n      \"reference\": true,\n      \"submissionAccess\": [\n        {\n          \"type\": \"read\",\n          \"roles\": []\n        }\n      ],\n      \"data\": {\n        \"resource\": \"69dcf85a040fa2cea257873e\"\n      },\n      \"template\": \"<span>{{ item.data.name }}</span>\"\n    },\n    {\n      \"label\": \"Notes\",\n      \"key\": \"notes\",\n      \"type\": \"textarea\"\n    },\n    {\n      \"label\": \"Submit\",\n      \"key\": \"submit\",\n      \"action\": \"submit\",\n      \"type\": \"button\"\n    }\n  ],\n  \"access\": [],\n  \"submissionAccess\": [],\n  \"settings\": {},\n  \"page\": 0,\n  \"name\": \"report\",\n  \"path\": \"report\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:54:20 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1009"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"3f1-2QG8UkqoCAfgZuKiFP+dvH+wK0E\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd2dcc040fa2cea25795b7\",\n    \"title\": \"Company Report\",\n    \"name\": \"report\",\n    \"path\": \"report\",\n    \"type\": \"form\",\n    \"display\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\",\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"label\": \"Company\",\n            \"key\": \"company\",\n            \"type\": \"select\",\n            \"dataSrc\": \"resource\",\n            \"reference\": true,\n            \"submissionAccess\": [\n                {\n                    \"type\": \"read\",\n                    \"roles\": []\n                }\n            ],\n            \"data\": {\n                \"resource\": \"69dcf85a040fa2cea257873e\"\n            },\n            \"template\": \"<span>{{ item.data.name }}</span>\"\n        },\n        {\n            \"label\": \"Notes\",\n            \"key\": \"notes\",\n            \"type\": \"textarea\"\n        },\n        {\n            \"label\": \"Submit\",\n            \"key\": \"submit\",\n            \"action\": \"submit\",\n            \"type\": \"button\"\n        }\n    ],\n    \"pdfComponents\": [],\n    \"settings\": {},\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"created\": \"2026-04-13T17:54:20.583Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-13T17:54:20.591Z\",\n    \"machineName\": \"example:report\"\n}"}],"_postman_id":"48137e90-4c7c-4297-844b-a8c3b2340a54"},{"name":"Create a new Company 1 Report","id":"ca2930f6-ce29-4a31-93b4-4e3a33fd8251","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"company\": {\n      \"_id\": \"{{ company1Id }}\",\n      \"data\": {\n        \"name\": \"{{ company1Name }}\"\n      }\n    },\n    \"notes\": \"This is only for the Company 1!\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ companyReportFormPath }}/submission","urlObject":{"path":["{{ projectName }}","{{ companyReportFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"d8349854-830a-477a-9d92-018752738840","name":"Create a new Company 1 Report","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"company\": {\n      \"_id\": \"69dcf86a040fa2cea2578756\",\n      \"data\": {\n        \"name\": \"Donnelly, Mraz and Connelly\"\n      }\n    },\n    \"notes\": \"This is only for the Company 1!\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/report/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:54:43 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"824"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"338-0EU4UQu2u0TPi27ngaEzUNSo2jY\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd2dcc040fa2cea25795b7\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [\n        {\n            \"type\": \"read\",\n            \"resources\": [\n                \"69dcf86a040fa2cea2578756\"\n            ]\n        }\n    ],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"180\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"company\": {\n            \"_id\": \"69dcf86a040fa2cea2578756\",\n            \"data\": {\n                \"name\": \"Donnelly, Mraz and Connelly\"\n            }\n        },\n        \"notes\": \"This is only for the Company 1!\"\n    },\n    \"_id\": \"69dd2de3040fa2cea25795d0\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T17:54:43.172Z\",\n    \"modified\": \"2026-04-13T17:54:43.173Z\"\n}"}],"_postman_id":"ca2930f6-ce29-4a31-93b4-4e3a33fd8251"},{"name":"Create a new Company 2 Report","id":"0a94ea1b-91c8-4fa1-8d2a-ba242e0692ca","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"company\": {\n      \"_id\": \"{{ company2Id }}\",\n      \"data\": {\n        \"name\": \"{{ company2Name }}\"\n      }\n    },\n    \"notes\": \"This is only for the Company 2!\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ companyReportFormPath }}/submission","urlObject":{"path":["{{ projectName }}","{{ companyReportFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"62b6c3db-85de-4774-81c7-e6875a76fee7","name":"Create a new Company 2 Report","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"company\": {\n      \"_id\": \"69dcf879040fa2cea2578763\",\n      \"data\": {\n        \"name\": \"Gorczany, O'Reilly and Schmitt\"\n      }\n    },\n    \"notes\": \"This is only for the Company 2!\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/report/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:55:00 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"827"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"33b-QgOHD5sh87dZTlQsbTmOiKZZ8Oo\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd2dcc040fa2cea25795b7\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [\n        {\n            \"type\": \"read\",\n            \"resources\": [\n                \"69dcf879040fa2cea2578763\"\n            ]\n        }\n    ],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"183\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"company\": {\n            \"_id\": \"69dcf879040fa2cea2578763\",\n            \"data\": {\n                \"name\": \"Gorczany, O'Reilly and Schmitt\"\n            }\n        },\n        \"notes\": \"This is only for the Company 2!\"\n    },\n    \"_id\": \"69dd2df4040fa2cea25795de\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T17:55:00.605Z\",\n    \"modified\": \"2026-04-13T17:55:00.607Z\"\n}"}],"_postman_id":"0a94ea1b-91c8-4fa1-8d2a-ba242e0692ca"},{"name":"Ensure Employee 1 can only see Company 1 reports","event":[{"listen":"test","script":{"id":"7eda69e2-8f65-4606-8778-f5109d8308d4","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"f7974df4-59e7-4a67-aac4-a48f24006e4a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ employee1JWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ companyReportFormPath }}/submission","description":"<p>When you use the JWT token from the 'employee' and then fetch the reports, the index will now ONLY return the documnets which that employee has access to. This establishes a Group based permission system where employees can be added to the group, and through that association are granted access to the content that was assigned to that group.</p>\n","urlObject":{"path":["{{ projectName }}","{{ companyReportFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"807c7310-0ded-4b36-a765-6d74160d56b8","name":"Ensure Customer 1 can only see Company 1 reports","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ customer1JWT }}","type":"text"}],"url":"https://forms.example.com/example/report/submission"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:10:19 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1460"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"5b4-KM2uTdsTEvTfmpPl3EsgXnY9C5Q\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd06a8040fa2cea257893e\",\n        \"form\": \"69dcfb6f040fa2cea2578864\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [\n            {\n                \"type\": \"read\",\n                \"resources\": [\n                    \"69dcf86a040fa2cea2578756\"\n                ]\n            }\n        ],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"180\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            }\n        },\n        \"data\": {\n            \"company\": {\n                \"_id\": \"69dcf86a040fa2cea2578756\",\n                \"form\": \"69dcf85a040fa2cea257873e\",\n                \"owner\": \"69d6813b040fa2cea257285a\",\n                \"deleted\": null,\n                \"roles\": [],\n                \"access\": [],\n                \"metadata\": {\n                    \"headers\": {\n                        \"host\": \"forms.example.com\",\n                        \"x-real-ip\": \"172.19.0.1\",\n                        \"x-forwarded-for\": \"172.19.0.1\",\n                        \"x-forwarded-proto\": \"https\",\n                        \"connection\": \"close\",\n                        \"content-length\": \"57\",\n                        \"content-type\": \"application/json\",\n                        \"user-agent\": \"PostmanRuntime/7.53.0\",\n                        \"accept\": \"*/*\",\n                        \"cache-control\": \"no-cache\",\n                        \"accept-encoding\": \"gzip, deflate, br\"\n                    }\n                },\n                \"data\": {\n                    \"name\": \"Donnelly, Mraz and Connelly\"\n                },\n                \"_fvid\": 0,\n                \"project\": \"69d65f4e040fa2cea257224d\",\n                \"state\": \"submitted\",\n                \"eSignatures\": [],\n                \"externalIds\": [],\n                \"externalTokens\": [],\n                \"created\": \"2026-04-13T14:06:34.480Z\",\n                \"modified\": \"2026-04-13T14:06:34.481Z\",\n                \"__v\": 0\n            },\n            \"notes\": \"This is only for the Company 1!\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T15:07:20.260Z\",\n        \"modified\": \"2026-04-13T15:07:20.261Z\"\n    }\n]"}],"_postman_id":"f7974df4-59e7-4a67-aac4-a48f24006e4a"},{"name":"Ensure Customer 2 can only see Company 2 reports","event":[{"listen":"test","script":{"id":"7eda69e2-8f65-4606-8778-f5109d8308d4","exec":[""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"b36e4483-aec4-42d8-aa2e-fc24728354eb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ employee2JWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ companyReportFormPath }}/submission","urlObject":{"path":["{{ projectName }}","{{ companyReportFormPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"166ce3c7-c6df-4d16-a808-13dbd378f351","name":"Ensure Customer 2 can only see Company 2 reports","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ customer2JWT }}","type":"text"}],"url":"https://forms.example.com/example/report/submission"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 15:11:23 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1463"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-0/1"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"5b7-S+dc+XSWceZmv4V5NCeRkVrzAwo\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd06f0040fa2cea2578957\",\n        \"form\": \"69dcfb6f040fa2cea2578864\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [\n            {\n                \"type\": \"read\",\n                \"resources\": [\n                    \"69dcf879040fa2cea2578763\"\n                ]\n            }\n        ],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"183\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            }\n        },\n        \"data\": {\n            \"company\": {\n                \"_id\": \"69dcf879040fa2cea2578763\",\n                \"form\": \"69dcf85a040fa2cea257873e\",\n                \"owner\": \"69d6813b040fa2cea257285a\",\n                \"deleted\": null,\n                \"roles\": [],\n                \"access\": [],\n                \"metadata\": {\n                    \"headers\": {\n                        \"host\": \"forms.example.com\",\n                        \"x-real-ip\": \"172.19.0.1\",\n                        \"x-forwarded-for\": \"172.19.0.1\",\n                        \"x-forwarded-proto\": \"https\",\n                        \"connection\": \"close\",\n                        \"content-length\": \"60\",\n                        \"content-type\": \"application/json\",\n                        \"user-agent\": \"PostmanRuntime/7.53.0\",\n                        \"accept\": \"*/*\",\n                        \"cache-control\": \"no-cache\",\n                        \"accept-encoding\": \"gzip, deflate, br\"\n                    }\n                },\n                \"data\": {\n                    \"name\": \"Gorczany, O'Reilly and Schmitt\"\n                },\n                \"_fvid\": 0,\n                \"project\": \"69d65f4e040fa2cea257224d\",\n                \"state\": \"submitted\",\n                \"eSignatures\": [],\n                \"externalIds\": [],\n                \"externalTokens\": [],\n                \"created\": \"2026-04-13T14:06:49.197Z\",\n                \"modified\": \"2026-04-13T14:06:49.198Z\",\n                \"__v\": 0\n            },\n            \"notes\": \"This is only for the Company 2!\"\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T15:08:32.425Z\",\n        \"modified\": \"2026-04-13T15:08:32.425Z\"\n    }\n]"}],"_postman_id":"b36e4483-aec4-42d8-aa2e-fc24728354eb"}],"id":"7948d82f-3d70-4fa9-87fe-2f47c425ce53","description":"<p>Group Permissions build upon Field-Based Resource access and grant users permission based on a submission against a Group Resource. Groups are saved within a Resource and assigned to different users creating a one-to-many relationship between a group and its users. Form permissions can then leverage these groups to establish permissions for the users based on the group they are associated with.</p>\n","_postman_id":"7948d82f-3d70-4fa9-87fe-2f47c425ce53"},{"name":"Report API","item":[{"name":"Get an aggregated report","id":"e9953ed4-64e6-4333-891f-291d59eb3eb6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"[\n  {\n    \"$match\": {\n      \"form\": {\n        \"$in\": [\n          \"{{ companyResourceId }}\"\n        ]\n      }\n    }\n  },\n  {\n    \"$lookup\": {\n      \"from\": \"submissions\",\n      \"localField\": \"_id\",\n      \"foreignField\": \"data.company._id\",\n      \"as\": \"joins\"\n    }\n  },\n  {\n    \"$lookup\": {\n      \"from\": \"submissions\",\n      \"localField\": \"joins.data.employee._id\",\n      \"foreignField\": \"_id\",\n      \"as\": \"employees\"\n    }\n  },\n  {\n    \"$project\": {\n      \"_id\": 0,\n      \"name\": \"$data.name\",\n      \"employees\": \"$employees.data.email\"\n    }\n  }\n]","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/report","description":"<p>Here is an example Report that is capable of fetching all submissions within one resource (called Company), and then finding all Customers within that company resource to create an aggregated list of \"employees\" within a company.</p>\n","urlObject":{"path":["{{ projectName }}","report"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"a566e478-baec-4900-92d8-e440b12adccd","name":"Get an aggregated report","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"[\n  {\n    \"$match\": {\n      \"form\": {\n        \"$in\": [\n          \"69dcf85a040fa2cea257873e\"\n        ]\n      }\n    }\n  },\n  {\n    \"$lookup\": {\n      \"from\": \"submissions\",\n      \"localField\": \"_id\",\n      \"foreignField\": \"data.company._id\",\n      \"as\": \"joins\"\n    }\n  },\n  {\n    \"$lookup\": {\n      \"from\": \"submissions\",\n      \"localField\": \"joins.data.employee._id\",\n      \"foreignField\": \"_id\",\n      \"as\": \"employees\"\n    }\n  },\n  {\n    \"$project\": {\n      \"_id\": 0,\n      \"name\": \"$data.name\",\n      \"employees\": \"$employees.data.email\"\n    }\n  }\n]","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/report"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 17:59:24 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-1/2"},{"key":"Link","value":""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"name\": \"Donnelly, Mraz and Connelly\",\n        \"employees\": [\n            \"zack69@hotmail.com\"\n        ]\n    },\n    {\n        \"name\": \"Gorczany, O'Reilly and Schmitt\",\n        \"employees\": [\n            \"sigrid29@hotmail.com\"\n        ]\n    }\n]"}],"_postman_id":"e9953ed4-64e6-4333-891f-291d59eb3eb6"}],"id":"34bf38f0-885f-4fe1-8cbf-698a4c2fda0b","description":"<p>The Report API can be accessed through the URL path of <code>/report</code> within your project. So, as an example, if your project API URL is <code>https://myproject.form.io</code>, then the report API for that project is <code>https://myproject.form.io/report</code>.</p>\n<p>This endpoint can be used with a payload of the</p>\n<p><a href=\"https://docs.mongodb.com/manual/aggregation/\">MongoDB Aggregation Pipeline</a></p>\n<p>to create the report you need. As an example, lets say you have multiple Forms, where all of them provide a <strong>Status</strong> field. Using the Report API, you can generate a Report to determine the count of each status within multiple forms within your project. The MongoDB Aggregation pipeline for this query would look something similar to the following.</p>\n","event":[{"listen":"prerequest","script":{"id":"842a029c-4ab3-45eb-8af2-aa3c05ca1ec9","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"5d0f3c88-4f73-4f62-a03e-292725b0100e","type":"text/javascript","exec":[""]}}],"_postman_id":"34bf38f0-885f-4fe1-8cbf-698a4c2fda0b"},{"name":"Submission API","item":[{"name":"Create Form","event":[{"listen":"test","script":{"id":"f4df4b24-da13-42a5-b112-00238cd885c7","exec":["pm.environment.set(\" formId \", pm.response.json()._id);","pm.environment.set(\" formPath \", pm.response.json().path);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"00cef15a-cefc-44fc-a05e-1cbf2a9c3486","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee Onboarding\",\n  \"path\": \"onboarding\",\n  \"name\": \"onboarding\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"input\": true,\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"input\": true,\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"input\": true,\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"label\": \"Topics of Interest\",\n      \"optionsLabelPosition\": \"right\",\n      \"tableView\": false,\n      \"values\": [\n        {\n          \"label\": \"Sports\",\n          \"value\": \"sports\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Technology\",\n          \"value\": \"technology\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Politics\",\n          \"value\": \"politics\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Arts & Crafts\",\n          \"value\": \"artsCrafts\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Business\",\n          \"value\": \"business\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Finance\",\n          \"value\": \"finance\",\n          \"shortcut\": \"\"\n        }\n      ],\n      \"validateWhenHidden\": false,\n      \"key\": \"topicsOfInterest\",\n      \"type\": \"selectboxes\",\n      \"input\": true,\n      \"inputType\": \"checkbox\",\n      \"defaultValue\": {\n        \"sports\": false,\n        \"technology\": false,\n        \"politics\": false,\n        \"artsCrafts\": false,\n        \"business\": false,\n        \"finance\": false\n      }\n    },\n    {\n      \"label\": \"Sign me up for Email Notifications!\",\n      \"tableView\": false,\n      \"key\": \"emailNotify\",\n      \"type\": \"checkbox\",\n      \"input\": true,\n      \"defaultValue\": false\n    },\n    {\n      \"label\": \"Number of Pets\",\n      \"applyMaskOn\": \"change\",\n      \"mask\": false,\n      \"tableView\": false,\n      \"delimiter\": false,\n      \"requireDecimal\": false,\n      \"inputFormat\": \"plain\",\n      \"truncateMultipleSpaces\": false,\n      \"validateWhenHidden\": false,\n      \"key\": \"numberOfPets\",\n      \"type\": \"number\",\n      \"input\": true\n    },\n    {\n      \"label\": \"Birthday\",\n      \"hideInputLabels\": true,\n      \"inputsLabelPosition\": \"top\",\n      \"useLocaleSettings\": false,\n      \"tableView\": false,\n      \"fields\": {\n        \"day\": {\n          \"hide\": false\n        },\n        \"month\": {\n          \"hide\": false\n        },\n        \"year\": {\n          \"hide\": false\n        }\n      },\n      \"validateWhenHidden\": false,\n      \"key\": \"birthday\",\n      \"type\": \"day\",\n      \"input\": true\n    },\n    {\n      \"label\": \"Children\",\n      \"key\": \"children\",\n      \"type\": \"datagrid\",\n      \"input\": true,\n      \"components\": [\n        {\n          \"label\": \"First Name\",\n          \"applyMaskOn\": \"change\",\n          \"tableView\": true,\n          \"validateWhenHidden\": false,\n          \"key\": \"firstName\",\n          \"type\": \"textfield\",\n          \"input\": true,\n          \"widget.type\": \"input\"\n        },\n        {\n          \"label\": \"Last Name\",\n          \"applyMaskOn\": \"change\",\n          \"tableView\": true,\n          \"validateWhenHidden\": false,\n          \"key\": \"lastName\",\n          \"type\": \"textfield\",\n          \"input\": true,\n          \"widget.type\": \"input\"\n        },\n        {\n          \"label\": \"Birthday\",\n          \"hideInputLabels\": true,\n          \"inputsLabelPosition\": \"top\",\n          \"useLocaleSettings\": false,\n          \"tableView\": false,\n          \"fields\": {\n            \"day\": {\n              \"hide\": false\n            },\n            \"month\": {\n              \"hide\": false\n            },\n            \"year\": {\n              \"hide\": false\n            }\n          },\n          \"validateWhenHidden\": false,\n          \"key\": \"birthday\",\n          \"type\": \"day\",\n          \"input\": true\n        }\n      ]\n    },\n    {\n      \"label\": \"Submit\",\n      \"tableView\": false,\n      \"key\": \"submit\",\n      \"type\": \"button\",\n      \"input\": true,\n      \"saveOnEnter\": false\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form","description":"<p>In order to illustrate all of the features of the Submission API, we will first create a form that will contain all of our submission for testing purposes.</p>\n","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"b6fd404b-bbb9-4325-b975-7a6856613ff1","name":"Create Form","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"Employee Onboarding\",\n  \"path\": \"onboarding\",\n  \"name\": \"onboarding\",\n  \"components\": [\n    {\n      \"type\": \"textfield\",\n      \"label\": \"First Name\",\n      \"key\": \"firstName\",\n      \"input\": true,\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"textfield\",\n      \"label\": \"Last Name\",\n      \"key\": \"lastName\",\n      \"input\": true,\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"type\": \"email\",\n      \"label\": \"Email\",\n      \"key\": \"email\",\n      \"input\": true,\n      \"tableView\": true,\n      \"validate\": {\n        \"required\": true\n      }\n    },\n    {\n      \"label\": \"Topics of Interest\",\n      \"optionsLabelPosition\": \"right\",\n      \"tableView\": false,\n      \"values\": [\n        {\n          \"label\": \"Sports\",\n          \"value\": \"sports\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Technology\",\n          \"value\": \"technology\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Politics\",\n          \"value\": \"politics\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Arts & Crafts\",\n          \"value\": \"artsCrafts\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Business\",\n          \"value\": \"business\",\n          \"shortcut\": \"\"\n        },\n        {\n          \"label\": \"Finance\",\n          \"value\": \"finance\",\n          \"shortcut\": \"\"\n        }\n      ],\n      \"validateWhenHidden\": false,\n      \"key\": \"topicsOfInterest\",\n      \"type\": \"selectboxes\",\n      \"input\": true,\n      \"inputType\": \"checkbox\",\n      \"defaultValue\": {\n        \"sports\": false,\n        \"technology\": false,\n        \"politics\": false,\n        \"artsCrafts\": false,\n        \"business\": false,\n        \"finance\": false\n      }\n    },\n    {\n      \"label\": \"Sign me up for Email Notifications!\",\n      \"tableView\": false,\n      \"key\": \"emailNotify\",\n      \"type\": \"checkbox\",\n      \"input\": true,\n      \"defaultValue\": false\n    },\n    {\n      \"label\": \"Number of Pets\",\n      \"applyMaskOn\": \"change\",\n      \"mask\": false,\n      \"tableView\": false,\n      \"delimiter\": false,\n      \"requireDecimal\": false,\n      \"inputFormat\": \"plain\",\n      \"truncateMultipleSpaces\": false,\n      \"validateWhenHidden\": false,\n      \"key\": \"numberOfPets\",\n      \"type\": \"number\",\n      \"input\": true\n    },\n    {\n      \"label\": \"Birthday\",\n      \"hideInputLabels\": true,\n      \"inputsLabelPosition\": \"top\",\n      \"useLocaleSettings\": false,\n      \"tableView\": false,\n      \"fields\": {\n        \"day\": {\n          \"hide\": false\n        },\n        \"month\": {\n          \"hide\": false\n        },\n        \"year\": {\n          \"hide\": false\n        }\n      },\n      \"validateWhenHidden\": false,\n      \"key\": \"birthday\",\n      \"type\": \"day\",\n      \"input\": true\n    },\n    {\n      \"label\": \"Children\",\n      \"key\": \"children\",\n      \"type\": \"datagrid\",\n      \"input\": true,\n      \"components\": [\n        {\n          \"label\": \"First Name\",\n          \"applyMaskOn\": \"change\",\n          \"tableView\": true,\n          \"validateWhenHidden\": false,\n          \"key\": \"firstName\",\n          \"type\": \"textfield\",\n          \"input\": true,\n          \"widget.type\": \"input\"\n        },\n        {\n          \"label\": \"Last Name\",\n          \"applyMaskOn\": \"change\",\n          \"tableView\": true,\n          \"validateWhenHidden\": false,\n          \"key\": \"lastName\",\n          \"type\": \"textfield\",\n          \"input\": true,\n          \"widget.type\": \"input\"\n        },\n        {\n          \"label\": \"Birthday\",\n          \"hideInputLabels\": true,\n          \"inputsLabelPosition\": \"top\",\n          \"useLocaleSettings\": false,\n          \"tableView\": false,\n          \"fields\": {\n            \"day\": {\n              \"hide\": false\n            },\n            \"month\": {\n              \"hide\": false\n            },\n            \"year\": {\n              \"hide\": false\n            }\n          },\n          \"validateWhenHidden\": false,\n          \"key\": \"birthday\",\n          \"type\": \"day\",\n          \"input\": true\n        }\n      ]\n    },\n    {\n      \"label\": \"Submit\",\n      \"tableView\": false,\n      \"key\": \"submit\",\n      \"type\": \"button\",\n      \"input\": true,\n      \"saveOnEnter\": false\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 18:35:59 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"3059"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"bf3-OxwcMjXQFKSaWzChyiIc1X02hXo\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd378f040fa2cea2579d84\",\n    \"title\": \"Employee Onboarding\",\n    \"name\": \"onboarding\",\n    \"path\": \"onboarding\",\n    \"type\": \"form\",\n    \"tags\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"input\": true,\n            \"tableView\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"input\": true,\n            \"tableView\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"input\": true,\n            \"tableView\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"label\": \"Topics of Interest\",\n            \"optionsLabelPosition\": \"right\",\n            \"tableView\": false,\n            \"values\": [\n                {\n                    \"label\": \"Sports\",\n                    \"value\": \"sports\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Technology\",\n                    \"value\": \"technology\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Politics\",\n                    \"value\": \"politics\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Arts & Crafts\",\n                    \"value\": \"artsCrafts\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Business\",\n                    \"value\": \"business\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Finance\",\n                    \"value\": \"finance\",\n                    \"shortcut\": \"\"\n                }\n            ],\n            \"validateWhenHidden\": false,\n            \"key\": \"topicsOfInterest\",\n            \"type\": \"selectboxes\",\n            \"input\": true,\n            \"inputType\": \"checkbox\",\n            \"defaultValue\": {\n                \"sports\": false,\n                \"technology\": false,\n                \"politics\": false,\n                \"artsCrafts\": false,\n                \"business\": false,\n                \"finance\": false\n            }\n        },\n        {\n            \"label\": \"Sign me up for Email Notifications!\",\n            \"tableView\": false,\n            \"key\": \"emailNotify\",\n            \"type\": \"checkbox\",\n            \"input\": true,\n            \"defaultValue\": false\n        },\n        {\n            \"label\": \"Number of Pets\",\n            \"applyMaskOn\": \"change\",\n            \"mask\": false,\n            \"tableView\": false,\n            \"delimiter\": false,\n            \"requireDecimal\": false,\n            \"inputFormat\": \"plain\",\n            \"truncateMultipleSpaces\": false,\n            \"validateWhenHidden\": false,\n            \"key\": \"numberOfPets\",\n            \"type\": \"number\",\n            \"input\": true\n        },\n        {\n            \"label\": \"Birthday\",\n            \"hideInputLabels\": true,\n            \"inputsLabelPosition\": \"top\",\n            \"useLocaleSettings\": false,\n            \"tableView\": false,\n            \"fields\": {\n                \"day\": {\n                    \"hide\": false\n                },\n                \"month\": {\n                    \"hide\": false\n                },\n                \"year\": {\n                    \"hide\": false\n                }\n            },\n            \"validateWhenHidden\": false,\n            \"key\": \"birthday\",\n            \"type\": \"day\",\n            \"input\": true\n        },\n        {\n            \"label\": \"Children\",\n            \"key\": \"children\",\n            \"type\": \"datagrid\",\n            \"input\": true,\n            \"components\": [\n                {\n                    \"label\": \"First Name\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"firstName\",\n                    \"type\": \"textfield\",\n                    \"input\": true,\n                    \"widget.type\": \"input\"\n                },\n                {\n                    \"label\": \"Last Name\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"lastName\",\n                    \"type\": \"textfield\",\n                    \"input\": true,\n                    \"widget.type\": \"input\"\n                },\n                {\n                    \"label\": \"Birthday\",\n                    \"hideInputLabels\": true,\n                    \"inputsLabelPosition\": \"top\",\n                    \"useLocaleSettings\": false,\n                    \"tableView\": false,\n                    \"fields\": {\n                        \"day\": {\n                            \"hide\": false\n                        },\n                        \"month\": {\n                            \"hide\": false\n                        },\n                        \"year\": {\n                            \"hide\": false\n                        }\n                    },\n                    \"validateWhenHidden\": false,\n                    \"key\": \"birthday\",\n                    \"type\": \"day\",\n                    \"input\": true\n                }\n            ]\n        },\n        {\n            \"label\": \"Submit\",\n            \"tableView\": false,\n            \"key\": \"submit\",\n            \"type\": \"button\",\n            \"input\": true,\n            \"saveOnEnter\": false\n        }\n    ],\n    \"pdfComponents\": [],\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\",\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"created\": \"2026-04-13T18:35:59.934Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-13T18:35:59.938Z\",\n    \"machineName\": \"example:onboarding\"\n}"}],"_postman_id":"00cef15a-cefc-44fc-a05e-1cbf2a9c3486"},{"name":"Create Form Submission","event":[{"listen":"test","script":{"id":"758620b9-b2e4-4b2f-ab20-211528880c14","exec":["pm.environment.set(\" submissionId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"fd848f6c-180c-4637-9324-d82fa38851a2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n\t\"data\": {\n\t\t\"firstName\": \"Sofia\",\n\t\t\"lastName\": \"Daugherty\",\n\t\t\"email\": \"Elda0@hotmail.com\",\n        \"numberOfPets\":,\n\t\t\"birthday\": \"08/10/2000\",\n        \"emailNotify\": true,\n        \"topicsOfInterest\": {\n            \"artsCrafts\": true,\n            \"business\": false,\n            \"finance\": true,\n            \"politics\": false,\n            \"sports\": true,\n            \"technology\": false\n        },\n        \"children\": [\n            {\n                \"firstName\": \"Nathanial\",\n                \"lastName\": \"Schultz\",\n                \"birthday\": \"02/03/2010\"\n            },\n            {\n                \"firstName\": \"Roel\",\n                \"lastName\": \"Goyette\",\n                \"birthday\": \"03/15/2014\"\n            }\n        ]\n\t}\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission","description":"<p>This is an example of how to create a new form submission within a custom form. If you want to create a form submission against a specific form revision, include the _fvid in the body of the request.</p>\n","urlObject":{"path":["{{ projectName }}","{{ formPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"86e27500-01ab-4388-b77a-947c8141ee38","name":"Create Form Submission","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n\t\"data\": {\n\t\t\"firstName\": \"Victor\",\n\t\t\"lastName\": \"Armstrong\",\n\t\t\"email\": \"Emelia67@hotmail.com\",\n        \"numberOfPets\":,\n\t\t\"birthday\": \"08/10/2000\",\n        \"emailNotify\": false,\n        \"topicsOfInterest\": {\n            \"artsCrafts\": false,\n            \"business\": false,\n            \"finance\": false,\n            \"politics\": false,\n            \"sports\": false,\n            \"technology\": false\n        },\n        \"children\": [\n            {\n                \"firstName\": \"Joan\",\n                \"lastName\": \"Jaskolski\",\n                \"birthday\": \"02/03/2010\"\n            },\n            {\n                \"firstName\": \"Jannie\",\n                \"lastName\": \"Greenfelder\",\n                \"birthday\": \"03/15/2014\"\n            }\n        ]\n\t}\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/{{ subFormPath }}/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 18:23:10 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1027"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"403-WRUFA4b7Be779OEHHT//SPx8rAk\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd328f040fa2cea2579979\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"726\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Reva\",\n        \"lastName\": \"Hammes\",\n        \"email\": \"ali94@yahoo.com\",\n        \"topicsOfInterest\": {\n            \"artsCrafts\": true,\n            \"business\": false,\n            \"finance\": true,\n            \"politics\": false,\n            \"sports\": false,\n            \"technology\": false\n        },\n        \"emailNotify\": false,\n        \"numberOfPets\": 826,\n        \"birthday\": \"08/10/2000\",\n        \"children\": [\n            {\n                \"firstName\": \"Naomi\",\n                \"lastName\": \"West\",\n                \"birthday\": \"02/03/2010\"\n            },\n            {\n                \"firstName\": \"Libbie\",\n                \"lastName\": \"Howe\",\n                \"birthday\": \"03/15/2014\"\n            }\n        ]\n    },\n    \"_id\": \"69dd348e040fa2cea2579c55\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T18:23:10.328Z\",\n    \"modified\": \"2026-04-13T18:23:10.328Z\"\n}"}],"_postman_id":"fd848f6c-180c-4637-9324-d82fa38851a2"},{"name":"Validate Form Submission","id":"6217bcd2-6c10-476a-951c-1b2f1351d383","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n\t\"data\": {\n\t\t\"lastName\": \"Stokes\",\n\t\t\"email\": \"bademail\",\n        \"numberOfPets\":,\n\t\t\"birthday\": \"08/10/2000\",\n        \"emailNotify\": false,\n        \"topicsOfInterest\": {\n            \"artsCrafts\": false,\n            \"business\": false,\n            \"finance\": true,\n            \"politics\": true,\n            \"sports\": false,\n            \"technology\": true\n        },\n        \"children\": [\n            {\n                \"firstName\": \"Nicholas\",\n                \"lastName\": \"Kautzer\",\n                \"birthday\": \"02/03/2010\"\n            },\n            {\n                \"firstName\": \"Lola\",\n                \"lastName\": \"Balistreri\",\n                \"birthday\": \"03/15/2014\"\n            }\n        ]\n\t}\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission","description":"<p>This endpoint will validate a submission, and return an array of any errors that have occured. If the submission is valid, it will return a 200.</p>\n","urlObject":{"path":["{{ projectName }}","{{ formPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"7d827860-bbb3-4064-820c-b0fbf167a786","name":"Validate Form Submission","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"{\n\t\"data\": {\n\t\t\"lastName\": \"Koepp\",\n\t\t\"email\": \"bademail\",\n        \"numberOfPets\":,\n\t\t\"birthday\": \"08/10/2000\",\n        \"emailNotify\": true,\n        \"topicsOfInterest\": {\n            \"artsCrafts\": true,\n            \"business\": true,\n            \"finance\": false,\n            \"politics\": false,\n            \"sports\": false,\n            \"technology\": false\n        },\n        \"children\": [\n            {\n                \"firstName\": \"Zola\",\n                \"lastName\": \"Veum\",\n                \"birthday\": \"02/03/2010\"\n            },\n            {\n                \"firstName\": \"Junius\",\n                \"lastName\": \"Schulist\",\n                \"birthday\": \"03/15/2014\"\n            }\n        ]\n\t}\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/onboarding/submission"},"status":"Bad Request","code":400,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 18:36:54 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"444"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"1bc-cJC3kLOu8iAmaLsmNscIW9eDrt8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"name\": \"ValidationError\",\n    \"details\": [\n        {\n            \"message\": \"First Name is required\",\n            \"level\": \"error\",\n            \"path\": [\n                \"firstName\"\n            ],\n            \"context\": {\n                \"validator\": \"required\",\n                \"hasLabel\": true,\n                \"key\": \"firstName\",\n                \"label\": \"First Name\",\n                \"path\": \"firstName\",\n                \"setting\": true,\n                \"index\": 0\n            }\n        },\n        {\n            \"message\": \"Email must be a valid email.\",\n            \"level\": \"error\",\n            \"path\": [\n                \"email\"\n            ],\n            \"context\": {\n                \"validator\": \"email\",\n                \"hasLabel\": true,\n                \"key\": \"email\",\n                \"label\": \"Email\",\n                \"path\": \"email\",\n                \"value\": \"bademail\",\n                \"index\": 0\n            }\n        }\n    ]\n}"}],"_postman_id":"6217bcd2-6c10-476a-951c-1b2f1351d383"},{"name":"Allow Submission Revisions","id":"5b696366-2bcb-4a89-9986-fcccc10587f0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ formId }}\",\n  \"submissionRevisions\": \"true\"\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ formId }}","urlObject":{"path":["{{ projectName }}","form","{{ formId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"3293578d-9758-4d06-8773-5cd49753216c","name":"Allow Submission Revisions","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"{{ subFormId }}\",\n  \"submissionRevisions\": \"true\"\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form/{{ subFormId }}"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 18:29:51 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"3063"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"bf7-BoDSAk5R5pIW20S2g8vYOizVLrw\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"title\": \"Employee Onboarding\",\n    \"name\": \"onboarding\",\n    \"path\": \"onboarding\",\n    \"type\": \"form\",\n    \"tags\": [],\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\",\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"type\": \"textfield\",\n            \"label\": \"First Name\",\n            \"key\": \"firstName\",\n            \"input\": true,\n            \"tableView\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"textfield\",\n            \"label\": \"Last Name\",\n            \"key\": \"lastName\",\n            \"input\": true,\n            \"tableView\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"type\": \"email\",\n            \"label\": \"Email\",\n            \"key\": \"email\",\n            \"input\": true,\n            \"tableView\": true,\n            \"validate\": {\n                \"required\": true\n            }\n        },\n        {\n            \"label\": \"Topics of Interest\",\n            \"optionsLabelPosition\": \"right\",\n            \"tableView\": false,\n            \"values\": [\n                {\n                    \"label\": \"Sports\",\n                    \"value\": \"sports\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Technology\",\n                    \"value\": \"technology\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Politics\",\n                    \"value\": \"politics\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Arts & Crafts\",\n                    \"value\": \"artsCrafts\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Business\",\n                    \"value\": \"business\",\n                    \"shortcut\": \"\"\n                },\n                {\n                    \"label\": \"Finance\",\n                    \"value\": \"finance\",\n                    \"shortcut\": \"\"\n                }\n            ],\n            \"validateWhenHidden\": false,\n            \"key\": \"topicsOfInterest\",\n            \"type\": \"selectboxes\",\n            \"input\": true,\n            \"inputType\": \"checkbox\",\n            \"defaultValue\": {\n                \"sports\": false,\n                \"technology\": false,\n                \"politics\": false,\n                \"artsCrafts\": false,\n                \"business\": false,\n                \"finance\": false\n            }\n        },\n        {\n            \"label\": \"Sign me up for Email Notifications!\",\n            \"tableView\": false,\n            \"key\": \"emailNotify\",\n            \"type\": \"checkbox\",\n            \"input\": true,\n            \"defaultValue\": false\n        },\n        {\n            \"label\": \"Number of Pets\",\n            \"applyMaskOn\": \"change\",\n            \"mask\": false,\n            \"tableView\": false,\n            \"delimiter\": false,\n            \"requireDecimal\": false,\n            \"inputFormat\": \"plain\",\n            \"truncateMultipleSpaces\": false,\n            \"validateWhenHidden\": false,\n            \"key\": \"numberOfPets\",\n            \"type\": \"number\",\n            \"input\": true\n        },\n        {\n            \"label\": \"Birthday\",\n            \"hideInputLabels\": true,\n            \"inputsLabelPosition\": \"top\",\n            \"useLocaleSettings\": false,\n            \"tableView\": false,\n            \"fields\": {\n                \"day\": {\n                    \"hide\": false\n                },\n                \"month\": {\n                    \"hide\": false\n                },\n                \"year\": {\n                    \"hide\": false\n                }\n            },\n            \"validateWhenHidden\": false,\n            \"key\": \"birthday\",\n            \"type\": \"day\",\n            \"input\": true\n        },\n        {\n            \"label\": \"Children\",\n            \"key\": \"children\",\n            \"type\": \"datagrid\",\n            \"input\": true,\n            \"components\": [\n                {\n                    \"label\": \"First Name\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"firstName\",\n                    \"type\": \"textfield\",\n                    \"input\": true,\n                    \"widget.type\": \"input\"\n                },\n                {\n                    \"label\": \"Last Name\",\n                    \"applyMaskOn\": \"change\",\n                    \"tableView\": true,\n                    \"validateWhenHidden\": false,\n                    \"key\": \"lastName\",\n                    \"type\": \"textfield\",\n                    \"input\": true,\n                    \"widget.type\": \"input\"\n                },\n                {\n                    \"label\": \"Birthday\",\n                    \"hideInputLabels\": true,\n                    \"inputsLabelPosition\": \"top\",\n                    \"useLocaleSettings\": false,\n                    \"tableView\": false,\n                    \"fields\": {\n                        \"day\": {\n                            \"hide\": false\n                        },\n                        \"month\": {\n                            \"hide\": false\n                        },\n                        \"year\": {\n                            \"hide\": false\n                        }\n                    },\n                    \"validateWhenHidden\": false,\n                    \"key\": \"birthday\",\n                    \"type\": \"day\",\n                    \"input\": true\n                }\n            ]\n        },\n        {\n            \"label\": \"Submit\",\n            \"tableView\": false,\n            \"key\": \"submit\",\n            \"type\": \"button\",\n            \"input\": true,\n            \"saveOnEnter\": false\n        }\n    ],\n    \"pdfComponents\": [],\n    \"_id\": \"69dd328f040fa2cea2579979\",\n    \"created\": \"2026-04-13T18:14:39.900Z\",\n    \"modified\": \"2026-04-13T18:29:51.343Z\",\n    \"machineName\": \"example:onboarding\",\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"true\",\n    \"_vid\": 0,\n    \"esign\": {}\n}"}],"_postman_id":"5b696366-2bcb-4a89-9986-fcccc10587f0"},{"name":"Get submissions within a form","id":"15432b11-a310-4937-ac54-e144f298b4e7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission","description":"<p>To <strong>read multiple</strong> submissions at once, perform a <strong>GET</strong> request against a resource's submission URL. The submission URL has an additional querystring to limit the number of items and a Range header to iterate over multiple pages.</p>\n<p><strong>To query for specific submissions</strong></p>\n<p>In order to find specific submissions within the index, you can also perform queries for any poperty within a submission. A typical submission is as follows.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"_id\": \"57cf908e6605476b00fab81f\",\n    \"modified\": \"2016-09-07T03:59:10.836Z\",\n    \"data\": {\n        \"firstName\": \"Joe\",\n        \"lastName\": \"Smith\",\n        \"email\": \"joe@example.com\",\n        \"phoneNumber\": \"234234234\"\n    },\n    \"form\": \"57c6d2a1783e146f00bc65c4\",\n    \"created\": \"2016-09-07T03:59:10.818Z\",\n    \"externalIds\": [],\n    \"access\": [],\n    \"roles\": [\"57c6d2a1783e146f00bc65c2\"],\n    \"owner\": \"553dbfc08d22d5cb1a7024f2\"\n}\n\n</code></pre><p>Where the submission data can be found within the <code>data</code> object. So, lets say you wish to find all people in the submissions who have the last name of Smith, you would run the following query.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission?data.lastName=Smith\n\n</code></pre><p>In addition to using <code>=</code> you can use a number of other parameters and search criteria to fully refine your search. These parameters are as follows.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Filter</th>\n<th>Query</th>\n<th>Example</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>equal</strong></td>\n<td><code>equals</code></td>\n<td><code>/submission?data.gender=male</code></td>\n<td>both return all male users</td>\n</tr>\n<tr>\n<td><strong>not equal</strong></td>\n<td><code>ne</code></td>\n<td><code>/submission?data.gender__ne=male</code></td>\n<td>returns all users who are not male (<code>female</code> and <code>x</code>)</td>\n</tr>\n<tr>\n<td><strong>greater than</strong></td>\n<td><code>gt</code></td>\n<td><code>/submission?data.age__gt=18</code></td>\n<td>returns all users older than 18</td>\n</tr>\n<tr>\n<td><strong>greater than or equal to</strong></td>\n<td><code>gte</code></td>\n<td><code>/submission?data.age__gte=18</code></td>\n<td>returns all users 18 and older (age should be a number property)</td>\n</tr>\n<tr>\n<td><strong>less than</strong></td>\n<td><code>lt</code></td>\n<td><code>/submission?data.age__lt=30</code></td>\n<td>returns all users age 29 and younger</td>\n</tr>\n<tr>\n<td><strong>less than or equal to</strong></td>\n<td><code>lte</code></td>\n<td><code>/submission?data.age__lte=30</code></td>\n<td>returns all users age 30 and younger</td>\n</tr>\n<tr>\n<td><strong>in</strong></td>\n<td><code>in</code></td>\n<td><code>/submission?data.gender__in=female,male</code></td>\n<td>returns all female and male users</td>\n</tr>\n<tr>\n<td><strong>nin</strong></td>\n<td><code>nin</code></td>\n<td><code>/submission?data.age__nin=18,21</code></td>\n<td>returns all users who are not 18 or 21</td>\n</tr>\n<tr>\n<td><strong>exists=true</strong></td>\n<td><code>exists</code></td>\n<td><code>/submission?data.age__exists=true</code></td>\n<td>returns all users where the age is provided.</td>\n</tr>\n<tr>\n<td><strong>exists=false</strong></td>\n<td><code>exists</code></td>\n<td><code>/submission?data.age__exists=false</code></td>\n<td>returns all users where the age is not provided.</td>\n</tr>\n<tr>\n<td><strong>Regex</strong></td>\n<td><code>regex</code></td>\n<td><code>/submission?data.username__regex=/^travis/i</code></td>\n<td>returns all users with a username starting with travis</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Boolean and Special Values</strong></p>\n<p>To filter boolean and special values, such as \"null\", \"true\", or \"false\" (not strings), you can use the <code>__eq</code> and <code>__ne</code> selectors. If you need to force any values to be interpereted as a string, you can wrap that value with \", which is the URL Encoded character of '\"'. Below is a table with some examples of how these characters are interpereted.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Filter</th>\n<th>Description</th>\n<th>Example</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>[PROPERTY]=null</td>\n<td>Filters values equal to string \"null\"</td>\n<td>title=null</td>\n</tr>\n<tr>\n<td>[PROPERTY]__eq=null</td>\n<td>Filters all values equal to \"null\" (not string)</td>\n<td>modified__eq=null</td>\n</tr>\n<tr>\n<td>[PROPERTY]__ne=null</td>\n<td>Filters all values not equal to \"null\" (not string)</td>\n<td>deleted__ne=null</td>\n</tr>\n<tr>\n<td>[PROPERTY]__ne=\"null\"</td>\n<td>Filters all values not equal to string \"null\"</td>\n<td>title__ne=\"null\"</td>\n</tr>\n</tbody>\n</table>\n</div><p>The same filters above can also apply for the boolean values of \"true\" and \"false\".</p>\n<p><strong>Pagination Queries</strong></p>\n<p>In addition to searching for records within the endpoint based on the data, you can also provide the following parameters to perform Pagination queries.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Query Parameter</th>\n<th>Example</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>limit</strong></td>\n<td><code>/submission?limit=200</code></td>\n<td>Returns at most 200 submissions</td>\n</tr>\n<tr>\n<td><strong>skip</strong></td>\n<td><code>/submission?limit=20&amp;skip=40</code></td>\n<td>Returns 20 items skiping the first 40 (i.e. 2nd page)</td>\n</tr>\n<tr>\n<td><strong>sort</strong></td>\n<td><code>/submission?limit=10&amp;skip=30&amp;sort=created</code></td>\n<td>Returns 10 items, skiping 30 (i.e. 3rd page), sorted by \"created\" in ascending order</td>\n</tr>\n<tr>\n<td><strong>-sort</strong></td>\n<td><code>/submission?limit=10&amp;skip=30&amp;sort=-created</code></td>\n<td>Returns 10 items, skiping 30 (i.e. 3rd page), sorted by \"created\" in descending order</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Field Selection</strong></p>\n<p>When performing index queries, it is always good practice to ask the endpoint to ONLY return the fields that you need within your application. This keeps the queries performant and also cuts down significantly on network traffic used when performing these queries. This is done using the <strong>select</strong> query parameter. For example, if you wish to return a list of user submissions, but only include their <strong>First Name</strong>, <strong>Last Name</strong>, and <strong>Email</strong>, you could do the following.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission?select=data.firstName,data.lastName,data.email\n\n</code></pre><p>This will return records that look like the following.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>[\n    {\n        \"_id\": \"5bab7f38f7e0d198a9965888\",\n        \"data\": {\n            \"firstName\": \"Bob\",\n            \"lastName\": \"Smith\",\n            \"email\": \"bob@example.com\"\n        }\n    },\n    {\n        \"_id\": \"5bab7f38f7e0d1969296588a\",\n        \"data\": {\n            \"firstName\": \"Jenny\",\n            \"lastName\": \"Thompson\",\n            \"email\": \"jenny@example.com\"\n        }\n    },\n    {\n        \"_id\": \"5bab7f38f7e0d1ed1f96588b\",\n        \"data\": {\n            \"firstName\": \"Sally\",\n            \"lastName\": \"Hunter\",\n            \"email\": \"sally@example.com\"\n        }\n    }\n]\n\n</code></pre>","urlObject":{"path":["{{ projectName }}","{{ formPath }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"3b0d0f00-1f12-46d0-869b-abeb58d17682","name":"Get submissions within a form","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/onboarding/submission"},"status":"Partial Content","code":206,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:01:33 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"17555"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-9/33"},{"key":"Link","value":"</form/69dd378f040fa2cea2579d84/submission>; rel=\"next\"; items=\"10-42\", </form/69dd378f040fa2cea2579d84/submission>; rel=\"last\"; items=\"30-62\""},{"key":"ETag","value":"W/\"4493-X+0713LFfHtU5VGAzX0Ed+O0SEw\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd37aa040fa2cea2579d9f\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"743\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Clementine\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Hyatt\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"federico.mills21@gmail.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": false,\n                        \"business\": false,\n                        \"finance\": false,\n                        \"politics\": true,\n                        \"sports\": true,\n                        \"technology\": true\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": false\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 376\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Uriel\",\n                            \"lastName\": \"Hilpert\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Ariel\",\n                            \"lastName\": \"Rice\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Clementine\",\n            \"lastName\": \"Hyatt\",\n            \"email\": \"federico.mills21@gmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": false,\n                \"business\": false,\n                \"finance\": false,\n                \"politics\": true,\n                \"sports\": true,\n                \"technology\": true\n            },\n            \"emailNotify\": false,\n            \"numberOfPets\": 376,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Uriel\",\n                    \"lastName\": \"Hilpert\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Ariel\",\n                    \"lastName\": \"Rice\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:26.178Z\",\n        \"modified\": \"2026-04-13T18:36:26.179Z\",\n        \"containRevisions\": true\n    },\n    {\n        \"_id\": \"69dd37aa040fa2cea2579da9\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"738\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Savion\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Kerluke\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"zita_will90@gmail.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": true,\n                        \"business\": true,\n                        \"finance\": true,\n                        \"politics\": true,\n                        \"sports\": false,\n                        \"technology\": false\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": false\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 578\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Bettye\",\n                            \"lastName\": \"Labadie\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Tiana\",\n                            \"lastName\": \"Heaney\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Savion\",\n            \"lastName\": \"Kerluke\",\n            \"email\": \"zita_will90@gmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": true,\n                \"business\": true,\n                \"finance\": true,\n                \"politics\": true,\n                \"sports\": false,\n                \"technology\": false\n            },\n            \"emailNotify\": false,\n            \"numberOfPets\": 578,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Bettye\",\n                    \"lastName\": \"Labadie\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Tiana\",\n                    \"lastName\": \"Heaney\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:26.978Z\",\n        \"modified\": \"2026-04-13T18:36:26.978Z\",\n        \"containRevisions\": true\n    },\n    {\n        \"_id\": \"69dd37ab040fa2cea2579db3\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"742\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Adelia\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Funk\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"roxane_kuhn60@gmail.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": false,\n                        \"business\": false,\n                        \"finance\": false,\n                        \"politics\": false,\n                        \"sports\": false,\n                        \"technology\": false\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": true\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 744\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Nicholas\",\n                            \"lastName\": \"Torp\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Patrick\",\n                            \"lastName\": \"Schultz\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Adelia\",\n            \"lastName\": \"Funk\",\n            \"email\": \"roxane_kuhn60@gmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": false,\n                \"business\": false,\n                \"finance\": false,\n                \"politics\": false,\n                \"sports\": false,\n                \"technology\": false\n            },\n            \"emailNotify\": true,\n            \"numberOfPets\": 744,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Nicholas\",\n                    \"lastName\": \"Torp\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Patrick\",\n                    \"lastName\": \"Schultz\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:27.678Z\",\n        \"modified\": \"2026-04-13T18:36:27.679Z\",\n        \"containRevisions\": true\n    },\n    {\n        \"_id\": \"69dd37ac040fa2cea2579dbd\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"734\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Chad\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Toy\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"deshaun66@hotmail.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": false,\n                        \"business\": false,\n                        \"finance\": true,\n                        \"politics\": false,\n                        \"sports\": false,\n                        \"technology\": false\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": true\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 703\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Stephan\",\n                            \"lastName\": \"Hyatt\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Velda\",\n                            \"lastName\": \"Corkery\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Chad\",\n            \"lastName\": \"Toy\",\n            \"email\": \"deshaun66@hotmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": false,\n                \"business\": false,\n                \"finance\": true,\n                \"politics\": false,\n                \"sports\": false,\n                \"technology\": false\n            },\n            \"emailNotify\": true,\n            \"numberOfPets\": 703,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Stephan\",\n                    \"lastName\": \"Hyatt\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Velda\",\n                    \"lastName\": \"Corkery\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:28.296Z\",\n        \"modified\": \"2026-04-13T18:36:28.297Z\",\n        \"containRevisions\": true\n    },\n    {\n        \"_id\": \"69dd37ac040fa2cea2579dc7\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"735\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Tania\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Nolan\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"salvatore53@hotmail.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": true,\n                        \"business\": false,\n                        \"finance\": false,\n                        \"politics\": false,\n                        \"sports\": true,\n                        \"technology\": true\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": true\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 169\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Easter\",\n                            \"lastName\": \"Dicki\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Herminio\",\n                            \"lastName\": \"Rau\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Tania\",\n            \"lastName\": \"Nolan\",\n            \"email\": \"salvatore53@hotmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": true,\n                \"business\": false,\n                \"finance\": false,\n                \"politics\": false,\n                \"sports\": true,\n                \"technology\": true\n            },\n            \"emailNotify\": true,\n            \"numberOfPets\": 169,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Easter\",\n                    \"lastName\": \"Dicki\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Herminio\",\n                    \"lastName\": \"Rau\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:28.884Z\",\n        \"modified\": \"2026-04-13T18:36:28.885Z\",\n        \"containRevisions\": true\n    },\n    {\n        \"_id\": \"69dd37ad040fa2cea2579dd1\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"745\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Noel\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Hintz\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"linwood_pollich14@gmail.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": false,\n                        \"business\": true,\n                        \"finance\": true,\n                        \"politics\": true,\n                        \"sports\": true,\n                        \"technology\": false\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": true\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 315\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Francesco\",\n                            \"lastName\": \"Gorczany\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Buddy\",\n                            \"lastName\": \"Bogisich\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Noel\",\n            \"lastName\": \"Hintz\",\n            \"email\": \"linwood_pollich14@gmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": false,\n                \"business\": true,\n                \"finance\": true,\n                \"politics\": true,\n                \"sports\": true,\n                \"technology\": false\n            },\n            \"emailNotify\": true,\n            \"numberOfPets\": 315,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Francesco\",\n                    \"lastName\": \"Gorczany\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Buddy\",\n                    \"lastName\": \"Bogisich\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:29.474Z\",\n        \"modified\": \"2026-04-13T18:36:29.474Z\",\n        \"containRevisions\": true\n    },\n    {\n        \"_id\": \"69dd37ae040fa2cea2579ddc\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"743\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Ayden\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Collins\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"kathlyn.tremblay@yahoo.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": true,\n                        \"business\": true,\n                        \"finance\": false,\n                        \"politics\": false,\n                        \"sports\": true,\n                        \"technology\": true\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": false\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 526\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Vicente\",\n                            \"lastName\": \"Cole\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Anabelle\",\n                            \"lastName\": \"Pouros\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Ayden\",\n            \"lastName\": \"Collins\",\n            \"email\": \"kathlyn.tremblay@yahoo.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": true,\n                \"business\": true,\n                \"finance\": false,\n                \"politics\": false,\n                \"sports\": true,\n                \"technology\": true\n            },\n            \"emailNotify\": false,\n            \"numberOfPets\": 526,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Vicente\",\n                    \"lastName\": \"Cole\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Anabelle\",\n                    \"lastName\": \"Pouros\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:30.038Z\",\n        \"modified\": \"2026-04-13T18:36:30.039Z\",\n        \"containRevisions\": true\n    },\n    {\n        \"_id\": \"69dd37ae040fa2cea2579de6\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"746\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Kiana\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Heathcote\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"vickie.weissnat@yahoo.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": false,\n                        \"business\": false,\n                        \"finance\": true,\n                        \"politics\": true,\n                        \"sports\": false,\n                        \"technology\": false\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": false\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 145\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Emile\",\n                            \"lastName\": \"Koss\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Gustave\",\n                            \"lastName\": \"Bechtelar\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Kiana\",\n            \"lastName\": \"Heathcote\",\n            \"email\": \"vickie.weissnat@yahoo.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": false,\n                \"business\": false,\n                \"finance\": true,\n                \"politics\": true,\n                \"sports\": false,\n                \"technology\": false\n            },\n            \"emailNotify\": false,\n            \"numberOfPets\": 145,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Emile\",\n                    \"lastName\": \"Koss\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Gustave\",\n                    \"lastName\": \"Bechtelar\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:30.617Z\",\n        \"modified\": \"2026-04-13T18:36:30.618Z\",\n        \"containRevisions\": true\n    },\n    {\n        \"_id\": \"69dd37af040fa2cea2579df0\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"729\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Max\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Hills\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"regan34@hotmail.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": true,\n                        \"business\": false,\n                        \"finance\": true,\n                        \"politics\": true,\n                        \"sports\": false,\n                        \"technology\": true\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": true\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 383\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Rashad\",\n                            \"lastName\": \"Hudson\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Lia\",\n                            \"lastName\": \"Bernhard\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Max\",\n            \"lastName\": \"Hills\",\n            \"email\": \"regan34@hotmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": true,\n                \"business\": false,\n                \"finance\": true,\n                \"politics\": true,\n                \"sports\": false,\n                \"technology\": true\n            },\n            \"emailNotify\": true,\n            \"numberOfPets\": 383,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Rashad\",\n                    \"lastName\": \"Hudson\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Lia\",\n                    \"lastName\": \"Bernhard\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:31.127Z\",\n        \"modified\": \"2026-04-13T18:36:31.128Z\",\n        \"containRevisions\": true\n    },\n    {\n        \"_id\": \"69dd37af040fa2cea2579dfa\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"732\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Haven\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Hagenes\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"neoma13@gmail.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": true,\n                        \"business\": false,\n                        \"finance\": true,\n                        \"politics\": false,\n                        \"sports\": true,\n                        \"technology\": false\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": true\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 176\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Franco\",\n                            \"lastName\": \"Mann\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Pietro\",\n                            \"lastName\": \"Bradtke\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Haven\",\n            \"lastName\": \"Hagenes\",\n            \"email\": \"neoma13@gmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": true,\n                \"business\": false,\n                \"finance\": true,\n                \"politics\": false,\n                \"sports\": true,\n                \"technology\": false\n            },\n            \"emailNotify\": true,\n            \"numberOfPets\": 176,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Franco\",\n                    \"lastName\": \"Mann\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Pietro\",\n                    \"lastName\": \"Bradtke\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"externalIds\": [],\n        \"created\": \"2026-04-13T18:36:31.678Z\",\n        \"modified\": \"2026-04-13T18:36:31.681Z\",\n        \"containRevisions\": true\n    }\n]"}],"_postman_id":"15432b11-a310-4937-ac54-e144f298b4e7"},{"name":"Get a Submission","event":[{"listen":"test","script":{"id":"634beb76-cb88-486d-80a8-9c47751fa198","exec":["pm.environment.set(\" submissionEmail \", pm.response.json().data.email);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"d555c4e1-d898-4481-b286-633301240c71","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission/{{ submissionId }}","description":"<p>This will retrieve a single submission within a form.</p>\n","urlObject":{"path":["{{ projectName }}","{{ formPath }}","submission","{{ submissionId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"b869fdc8-8be6-4642-bf13-fe12f4c39503","name":"Get a Submission","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/onboarding/submission/69dd348e040fa2cea2579c55"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 18:38:15 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1761"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"6e1-vkmAufoKwb71LssvOYd/nfKWZRU\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd37ba040fa2cea2579ee2\",\n    \"form\": \"69dd378f040fa2cea2579d84\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"742\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"jsonPatch\": [\n            {\n                \"op\": \"add\",\n                \"path\": \"/data/firstName\",\n                \"value\": \"Myrna\"\n            },\n            {\n                \"op\": \"add\",\n                \"path\": \"/data/lastName\",\n                \"value\": \"Beahan\"\n            },\n            {\n                \"op\": \"add\",\n                \"path\": \"/data/email\",\n                \"value\": \"mose.labadie5@hotmail.com\"\n            },\n            {\n                \"op\": \"add\",\n                \"path\": \"/data/topicsOfInterest\",\n                \"value\": {\n                    \"artsCrafts\": true,\n                    \"business\": false,\n                    \"finance\": false,\n                    \"politics\": true,\n                    \"sports\": false,\n                    \"technology\": true\n                }\n            },\n            {\n                \"op\": \"add\",\n                \"path\": \"/data/emailNotify\",\n                \"value\": false\n            },\n            {\n                \"op\": \"add\",\n                \"path\": \"/data/numberOfPets\",\n                \"value\": 112\n            },\n            {\n                \"op\": \"add\",\n                \"path\": \"/data/birthday\",\n                \"value\": \"08/10/2000\"\n            },\n            {\n                \"op\": \"add\",\n                \"path\": \"/data/children\",\n                \"value\": [\n                    {\n                        \"firstName\": \"Lazaro\",\n                        \"lastName\": \"Volkman\",\n                        \"birthday\": \"02/03/2010\"\n                    },\n                    {\n                        \"firstName\": \"Trisha\",\n                        \"lastName\": \"Hudson\",\n                        \"birthday\": \"03/15/2014\"\n                    }\n                ]\n            }\n        ]\n    },\n    \"data\": {\n        \"firstName\": \"Myrna\",\n        \"lastName\": \"Beahan\",\n        \"email\": \"mose.labadie5@hotmail.com\",\n        \"topicsOfInterest\": {\n            \"artsCrafts\": true,\n            \"business\": false,\n            \"finance\": false,\n            \"politics\": true,\n            \"sports\": false,\n            \"technology\": true\n        },\n        \"emailNotify\": false,\n        \"numberOfPets\": 112,\n        \"birthday\": \"08/10/2000\",\n        \"children\": [\n            {\n                \"firstName\": \"Lazaro\",\n                \"lastName\": \"Volkman\",\n                \"birthday\": \"02/03/2010\"\n            },\n            {\n                \"firstName\": \"Trisha\",\n                \"lastName\": \"Hudson\",\n                \"birthday\": \"03/15/2014\"\n            }\n        ]\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T18:36:42.985Z\",\n    \"modified\": \"2026-04-13T18:36:42.986Z\",\n    \"containRevisions\": true\n}"}],"_postman_id":"d555c4e1-d898-4481-b286-633301240c71"},{"name":"Check if a submission exists","id":"63ef69f0-1144-4dd0-b4fc-c6375aadcfb8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/exists?data.email={{ submissionEmail }}","description":"<p>This will check if a submission exists within a form provided some query parameters. It will simply return the ID of the submission if it does exist with a return status code of 200. If you want to allow access to this endpoint without a x-jwt-token, you must allow access to exists endpoint without any permissions within the access tab of the form.</p>\n<p>This is commonly used along with a user resource to see if a submission exists (such as in a registration process).</p>\n","urlObject":{"path":["{{ projectName }}","{{ formPath }}","exists"],"host":["{{ baseUrl }}"],"query":[{"key":"data.email","value":"{{ submissionEmail }}"}],"variable":[]}},"response":[{"id":"7b94236a-eca9-4aa2-ac66-d929d1f1118c","name":"Check if a submission exists","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":{"raw":"https://forms.example.com/example/onboarding/exists?data.email=mose.labadie5@hotmail.com","protocol":"https","host":["forms","example","com"],"path":["example","onboarding","exists"],"query":[{"key":"data.email","value":"mose.labadie5@hotmail.com"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 18:40:33 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"34"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"22-mrxrrtCPGji+Wv4uyi/dxsrevZc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd37ba040fa2cea2579ee2\"\n}"}],"_postman_id":"63ef69f0-1144-4dd0-b4fc-c6375aadcfb8"},{"name":"Update a Submission","id":"e7f10ba1-4c6e-4d4e-b9a0-fcb92cab32bc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69dd37ba040fa2cea2579ee2\",\n  \"form\": \"69dd378f040fa2cea2579d84\",\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"roles\": [],\n  \"access\": [],\n  \"metadata\": {\n    \"headers\": {\n      \"host\": \"forms.example.com\",\n      \"x-real-ip\": \"172.19.0.1\",\n      \"x-forwarded-for\": \"172.19.0.1\",\n      \"x-forwarded-proto\": \"https\",\n      \"connection\": \"close\",\n      \"content-length\": \"742\",\n      \"content-type\": \"application/json\",\n      \"user-agent\": \"PostmanRuntime/7.53.0\",\n      \"accept\": \"*/*\",\n      \"cache-control\": \"no-cache\",\n      \"accept-encoding\": \"gzip, deflate, br\"\n    },\n    \"jsonPatch\": [\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/firstName\",\n        \"value\": \"Myrna\"\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/lastName\",\n        \"value\": \"Beahan\"\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/email\",\n        \"value\": \"mose.labadie5@hotmail.com\"\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/topicsOfInterest\",\n        \"value\": {\n          \"artsCrafts\": true,\n          \"business\": false,\n          \"finance\": false,\n          \"politics\": true,\n          \"sports\": false,\n          \"technology\": true\n        }\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/emailNotify\",\n        \"value\": false\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/numberOfPets\",\n        \"value\": 112\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/birthday\",\n        \"value\": \"08/10/2000\"\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/children\",\n        \"value\": [\n          {\n            \"firstName\": \"Lazaro\",\n            \"lastName\": \"Volkman\",\n            \"birthday\": \"02/03/2010\"\n          },\n          {\n            \"firstName\": \"Trisha\",\n            \"lastName\": \"Hudson\",\n            \"birthday\": \"03/15/2014\"\n          }\n        ]\n      }\n    ]\n  },\n  \"data\": {\n    \"firstName\": \"Myrna\",\n    \"lastName\": \"Beahan\",\n    \"email\": \"Cheyanne_Bernier98@gmail.com\",\n    \"topicsOfInterest\": {\n      \"artsCrafts\": true,\n      \"business\": false,\n      \"finance\": false,\n      \"politics\": true,\n      \"sports\": false,\n      \"technology\": true\n    },\n    \"emailNotify\": false,\n    \"numberOfPets\": 112,\n    \"birthday\": \"08/10/2000\",\n    \"children\": [\n      {\n        \"firstName\": \"Lazaro\",\n        \"lastName\": \"Volkman\",\n        \"birthday\": \"02/03/2010\"\n      },\n      {\n        \"firstName\": \"Trisha\",\n        \"lastName\": \"Hudson\",\n        \"birthday\": \"03/15/2014\"\n      }\n    ]\n  },\n  \"_fvid\": 0,\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"state\": \"submitted\",\n  \"eSignatures\": [],\n  \"externalIds\": [],\n  \"created\": \"2026-04-13T18:36:42.985Z\",\n  \"modified\": \"2026-04-13T18:36:42.986Z\",\n  \"containRevisions\": true\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission/{{ submissionId }}","description":"<p>This request will update a specific submission within a form. This particular example will update the email address of a submission.</p>\n","urlObject":{"path":["{{ projectName }}","{{ formPath }}","submission","{{ submissionId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"93019cc2-2b14-496f-8247-26ffd4431e6b","name":"Update a Submission","originalRequest":{"method":"PUT","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"_id\": \"69dd37ba040fa2cea2579ee2\",\n  \"form\": \"69dd378f040fa2cea2579d84\",\n  \"owner\": \"69d6813b040fa2cea257285a\",\n  \"roles\": [],\n  \"access\": [],\n  \"metadata\": {\n    \"headers\": {\n      \"host\": \"forms.example.com\",\n      \"x-real-ip\": \"172.19.0.1\",\n      \"x-forwarded-for\": \"172.19.0.1\",\n      \"x-forwarded-proto\": \"https\",\n      \"connection\": \"close\",\n      \"content-length\": \"742\",\n      \"content-type\": \"application/json\",\n      \"user-agent\": \"PostmanRuntime/7.53.0\",\n      \"accept\": \"*/*\",\n      \"cache-control\": \"no-cache\",\n      \"accept-encoding\": \"gzip, deflate, br\"\n    },\n    \"jsonPatch\": [\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/firstName\",\n        \"value\": \"Myrna\"\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/lastName\",\n        \"value\": \"Beahan\"\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/email\",\n        \"value\": \"mose.labadie5@hotmail.com\"\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/topicsOfInterest\",\n        \"value\": {\n          \"artsCrafts\": true,\n          \"business\": false,\n          \"finance\": false,\n          \"politics\": true,\n          \"sports\": false,\n          \"technology\": true\n        }\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/emailNotify\",\n        \"value\": false\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/numberOfPets\",\n        \"value\": 112\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/birthday\",\n        \"value\": \"08/10/2000\"\n      },\n      {\n        \"op\": \"add\",\n        \"path\": \"/data/children\",\n        \"value\": [\n          {\n            \"firstName\": \"Lazaro\",\n            \"lastName\": \"Volkman\",\n            \"birthday\": \"02/03/2010\"\n          },\n          {\n            \"firstName\": \"Trisha\",\n            \"lastName\": \"Hudson\",\n            \"birthday\": \"03/15/2014\"\n          }\n        ]\n      }\n    ]\n  },\n  \"data\": {\n    \"firstName\": \"Myrna\",\n    \"lastName\": \"Beahan\",\n    \"email\": \"celestino97@yahoo.com\",\n    \"topicsOfInterest\": {\n      \"artsCrafts\": true,\n      \"business\": false,\n      \"finance\": false,\n      \"politics\": true,\n      \"sports\": false,\n      \"technology\": true\n    },\n    \"emailNotify\": false,\n    \"numberOfPets\": 112,\n    \"birthday\": \"08/10/2000\",\n    \"children\": [\n      {\n        \"firstName\": \"Lazaro\",\n        \"lastName\": \"Volkman\",\n        \"birthday\": \"02/03/2010\"\n      },\n      {\n        \"firstName\": \"Trisha\",\n        \"lastName\": \"Hudson\",\n        \"birthday\": \"03/15/2014\"\n      }\n    ]\n  },\n  \"_fvid\": 0,\n  \"project\": \"69d65f4e040fa2cea257224d\",\n  \"state\": \"submitted\",\n  \"eSignatures\": [],\n  \"externalIds\": [],\n  \"created\": \"2026-04-13T18:36:42.985Z\",\n  \"modified\": \"2026-04-13T18:36:42.986Z\",\n  \"containRevisions\": true\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/onboarding/submission/69dd348e040fa2cea2579c55"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 18:42:56 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1572"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"624-EqbLGACWy/0O9f133X+HOIAuyZg\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd378f040fa2cea2579d84\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [],\n    \"externalIds\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"742\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"jsonPatch\": [\n            {\n                \"op\": \"replace\",\n                \"path\": \"/data/email\",\n                \"value\": \"celestino97@yahoo.com\"\n            }\n        ],\n        \"previousData\": {\n            \"firstName\": \"Myrna\",\n            \"lastName\": \"Beahan\",\n            \"email\": \"mose.labadie5@hotmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": true,\n                \"business\": false,\n                \"finance\": false,\n                \"politics\": true,\n                \"sports\": false,\n                \"technology\": true\n            },\n            \"emailNotify\": false,\n            \"numberOfPets\": 112,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Lazaro\",\n                    \"lastName\": \"Volkman\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Trisha\",\n                    \"lastName\": \"Hudson\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        }\n    },\n    \"data\": {\n        \"firstName\": \"Myrna\",\n        \"lastName\": \"Beahan\",\n        \"email\": \"celestino97@yahoo.com\",\n        \"topicsOfInterest\": {\n            \"artsCrafts\": true,\n            \"business\": false,\n            \"finance\": false,\n            \"politics\": true,\n            \"sports\": false,\n            \"technology\": true\n        },\n        \"emailNotify\": false,\n        \"numberOfPets\": 112,\n        \"birthday\": \"08/10/2000\",\n        \"children\": [\n            {\n                \"firstName\": \"Lazaro\",\n                \"lastName\": \"Volkman\",\n                \"birthday\": \"02/03/2010\"\n            },\n            {\n                \"firstName\": \"Trisha\",\n                \"lastName\": \"Hudson\",\n                \"birthday\": \"03/15/2014\"\n            }\n        ]\n    },\n    \"_id\": \"69dd37ba040fa2cea2579ee2\",\n    \"created\": \"2026-04-13T18:36:42.985Z\",\n    \"modified\": \"2026-04-13T18:42:56.386Z\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"containRevisions\": true,\n    \"eSignatures\": []\n}"}],"_postman_id":"e7f10ba1-4c6e-4d4e-b9a0-fcb92cab32bc"},{"name":"Get Submission Revisions","event":[{"listen":"test","script":{"id":"74f646ed-d15c-4c76-81e5-6104b91eb390","exec":["pm.environment.set(\" submissionRevisionId \", pm.response.json()[0]._rid);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"9df3feb3-bf88-4e7a-a8b4-7dcb2e01ca5a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission/{{ submissionId }}/v","description":"<p>This API will fetch all revisions for a specific submission.</p>\n","urlObject":{"path":["{{ projectName }}","{{ formPath }}","submission","{{ submissionId }}","v"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"d8ead0cc-3a57-49c0-aa8e-f07624ef8f88","name":"Get Submission Revisions","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"https://forms.example.com/example/onboarding/submission/69dd348e040fa2cea2579c55/v"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 18:45:15 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"3516"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"Content-Range, Accept-Ranges, Range-Unit"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Accept-Ranges","value":"items"},{"key":"Range-Unit","value":"items"},{"key":"Content-Range","value":"0-1/2"},{"key":"Link","value":""},{"key":"ETag","value":"W/\"dbc-YxBdi/ApzeCVzLrBva4b2xlJC/k\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd37f3040fa2cea2579f91\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"externalIds\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"742\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/firstName\",\n                    \"value\": \"Myrna\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/lastName\",\n                    \"value\": \"Beahan\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"mose.labadie5@hotmail.com\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/topicsOfInterest\",\n                    \"value\": {\n                        \"artsCrafts\": true,\n                        \"business\": false,\n                        \"finance\": false,\n                        \"politics\": true,\n                        \"sports\": false,\n                        \"technology\": true\n                    }\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/emailNotify\",\n                    \"value\": false\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/numberOfPets\",\n                    \"value\": 112\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/birthday\",\n                    \"value\": \"08/10/2000\"\n                },\n                {\n                    \"op\": \"add\",\n                    \"path\": \"/data/children\",\n                    \"value\": [\n                        {\n                            \"firstName\": \"Lazaro\",\n                            \"lastName\": \"Volkman\",\n                            \"birthday\": \"02/03/2010\"\n                        },\n                        {\n                            \"firstName\": \"Trisha\",\n                            \"lastName\": \"Hudson\",\n                            \"birthday\": \"03/15/2014\"\n                        }\n                    ]\n                }\n            ]\n        },\n        \"data\": {\n            \"firstName\": \"Myrna\",\n            \"lastName\": \"Beahan\",\n            \"email\": \"mose.labadie5@hotmail.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": true,\n                \"business\": false,\n                \"finance\": false,\n                \"politics\": true,\n                \"sports\": false,\n                \"technology\": true\n            },\n            \"emailNotify\": false,\n            \"numberOfPets\": 112,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Lazaro\",\n                    \"lastName\": \"Volkman\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Trisha\",\n                    \"lastName\": \"Hudson\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"externalTokens\": [],\n        \"created\": \"2026-04-13T18:36:42.985Z\",\n        \"modified\": \"2026-04-13T18:37:39.366Z\",\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"eSignatures\": [],\n        \"_rid\": \"69dd37ba040fa2cea2579ee2\",\n        \"_vnote\": \"\",\n        \"_vuser\": \"jacynthe_johns@yahoo.com\"\n    },\n    {\n        \"_id\": \"69dd3930040fa2cea257a00e\",\n        \"form\": \"69dd378f040fa2cea2579d84\",\n        \"owner\": \"69d6813b040fa2cea257285a\",\n        \"roles\": [],\n        \"access\": [],\n        \"externalIds\": [],\n        \"metadata\": {\n            \"headers\": {\n                \"host\": \"forms.example.com\",\n                \"x-real-ip\": \"172.19.0.1\",\n                \"x-forwarded-for\": \"172.19.0.1\",\n                \"x-forwarded-proto\": \"https\",\n                \"connection\": \"close\",\n                \"content-length\": \"742\",\n                \"content-type\": \"application/json\",\n                \"user-agent\": \"PostmanRuntime/7.53.0\",\n                \"accept\": \"*/*\",\n                \"cache-control\": \"no-cache\",\n                \"accept-encoding\": \"gzip, deflate, br\"\n            },\n            \"jsonPatch\": [\n                {\n                    \"op\": \"replace\",\n                    \"path\": \"/data/email\",\n                    \"value\": \"celestino97@yahoo.com\"\n                }\n            ],\n            \"previousData\": {\n                \"firstName\": \"Myrna\",\n                \"lastName\": \"Beahan\",\n                \"email\": \"mose.labadie5@hotmail.com\",\n                \"topicsOfInterest\": {\n                    \"artsCrafts\": true,\n                    \"business\": false,\n                    \"finance\": false,\n                    \"politics\": true,\n                    \"sports\": false,\n                    \"technology\": true\n                },\n                \"emailNotify\": false,\n                \"numberOfPets\": 112,\n                \"birthday\": \"08/10/2000\",\n                \"children\": [\n                    {\n                        \"firstName\": \"Lazaro\",\n                        \"lastName\": \"Volkman\",\n                        \"birthday\": \"02/03/2010\"\n                    },\n                    {\n                        \"firstName\": \"Trisha\",\n                        \"lastName\": \"Hudson\",\n                        \"birthday\": \"03/15/2014\"\n                    }\n                ]\n            }\n        },\n        \"data\": {\n            \"firstName\": \"Myrna\",\n            \"lastName\": \"Beahan\",\n            \"email\": \"celestino97@yahoo.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": true,\n                \"business\": false,\n                \"finance\": false,\n                \"politics\": true,\n                \"sports\": false,\n                \"technology\": true\n            },\n            \"emailNotify\": false,\n            \"numberOfPets\": 112,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Lazaro\",\n                    \"lastName\": \"Volkman\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Trisha\",\n                    \"lastName\": \"Hudson\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        },\n        \"externalTokens\": [],\n        \"created\": \"2026-04-13T18:36:42.985Z\",\n        \"modified\": \"2026-04-13T18:42:56.391Z\",\n        \"_fvid\": 0,\n        \"project\": \"69d65f4e040fa2cea257224d\",\n        \"state\": \"submitted\",\n        \"containRevisions\": true,\n        \"eSignatures\": [],\n        \"_rid\": \"69dd37ba040fa2cea2579ee2\",\n        \"_vnote\": \"\",\n        \"_vuser\": \"jacynthe_johns@yahoo.com\"\n    }\n]"}],"_postman_id":"9df3feb3-bf88-4e7a-a8b4-7dcb2e01ca5a"},{"name":"Get Specific Submission Revision","id":"0e84c81a-e7d1-46a9-ae94-5dbe00708e30","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission/{{ submissionId }}?submissionRevision={{ submissionRevisionId }}","description":"<p>This API request will fetch a specific submission revision.</p>\n","urlObject":{"path":["{{ projectName }}","{{ formPath }}","submission","{{ submissionId }}"],"host":["{{ baseUrl }}"],"query":[{"key":"submissionRevision","value":"{{ submissionRevisionId }}"}],"variable":[]}},"response":[{"id":"e9c53974-9b7f-4d47-8aa5-d4dbce63d58d","name":"Get Specific Submission Revision with query parameter","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{token}}","type":"text"}],"url":{"raw":"https://forms.example.com/example/onboarding/submission/69dd348e040fa2cea2579c55?submissionRevision=69dd37ba040fa2cea2579ee2","protocol":"https","host":["forms","example","com"],"path":["example","onboarding","submission","69dd348e040fa2cea2579c55"],"query":[{"key":"submissionRevision","value":"69dd37ba040fa2cea2579ee2"}]}},"_postman_previewlanguage":"json","header":null,"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"62cbf0da2f2436c49404a230\",\n    \"form\": \"62cbeeb82f2436c494049ea8\",\n    \"owner\": \"6111a0c57a24cc85f37578c1\",\n    \"roles\": [],\n    \"access\": [],\n    \"externalIds\": [],\n    \"metadata\": {\n        \"timezone\": \"Europe/Warsaw\",\n        \"offset\": 120,\n        \"origin\": \"http://localhost:8080\",\n        \"referrer\": \"http://localhost:8080/\",\n        \"browserName\": \"Netscape\",\n        \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36\",\n        \"pathName\": \"/\",\n        \"onLine\": true,\n        \"headers\": {\n            \"host\": \"vsllnejlijbgtqe.localhost:3000\",\n            \"connection\": \"keep-alive\",\n            \"content-length\": \"380\",\n            \"sec-ch-ua\": \"\\\".Not/A)Brand\\\";v=\\\"99\\\", \\\"Google Chrome\\\";v=\\\"103\\\", \\\"Chromium\\\";v=\\\"103\\\"\",\n            \"accept\": \"application/json\",\n            \"content-type\": \"application/json\",\n            \"sec-ch-ua-mobile\": \"?0\",\n            \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36\",\n            \"sec-ch-ua-platform\": \"\\\"macOS\\\"\",\n            \"origin\": \"http://localhost:8080\",\n            \"sec-fetch-site\": \"cross-site\",\n            \"sec-fetch-mode\": \"cors\",\n            \"sec-fetch-dest\": \"empty\",\n            \"referer\": \"http://localhost:8080/\",\n            \"accept-encoding\": \"gzip, deflate, br\",\n            \"accept-language\": \"en-GB,en-US;q=0.9,en;q=0.8,ru;q=0.7\"\n        },\n        \"previousData\": {\n            \"textField\": \"1\"\n        },\n        \"jsonPatch\": [\n            {\n                \"op\": \"replace\",\n                \"path\": \"/data/textField\",\n                \"value\": \"12\"\n            }\n        ]\n    },\n    \"data\": {\n        \"textField\": \"12\"\n    },\n    \"externalTokens\": [],\n    \"created\": \"2022-07-11T09:42:40.177Z\",\n    \"modified\": \"2022-07-11T09:43:54.189Z\",\n    \"_fvid\": 0,\n    \"project\": \"62beddf91eb38be2ebf1f2a2\",\n    \"state\": \"submitted\",\n    \"containRevisions\": true,\n    \"_rid\": \"62cbf0902f2436c49404a14e\",\n    \"_vnote\": \"r1\",\n    \"_vuser\": \"maria@form.io\"\n}"}],"_postman_id":"0e84c81a-e7d1-46a9-ae94-5dbe00708e30"},{"name":"Partial Update a Submission","id":"919c394a-3560-4e77-a232-21abb2d64960","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"[\n  {\n    \"op\": \"replace\",\n    \"path\": \"/data/firstName\",\n    \"value\": \"James\"\n  },\n  {\n    \"op\": \"remove\",\n    \"path\": \"/data/lastName\"\n  },\n  {\n    \"op\": \"add\",\n    \"path\": \"/data/lastName\",\n    \"value\": \"Thompson\"\n  }\n]","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission/{{ submissionId }}","description":"<p>In addition to PUT a submission to update the whole submission, you can PATCH a submission that does a partial update.\nThe PATCH endpoint follows the following rfcs: </p>\n<ul>\n<li><a href=\"https://tools.ietf.org/html/rfc5789\">https://tools.ietf.org/html/rfc5789</a> </li>\n<li><a href=\"https://tools.ietf.org/html/rfc6902\">https://tools.ietf.org/html/rfc6902</a></li>\n</ul>\n<p>It implements json-patch for the changes.</p>\n","urlObject":{"path":["{{ projectName }}","{{ formPath }}","submission","{{ submissionId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"35cd6c7e-31cf-4382-aaf9-1f5db95b2a97","name":"Partial Update a Submission","originalRequest":{"method":"PATCH","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}","type":"text"}],"body":{"mode":"raw","raw":"[\n  {\n    \"op\": \"replace\",\n    \"path\": \"/data/firstName\",\n    \"value\": \"James\"\n  },\n  {\n    \"op\": \"remove\",\n    \"path\": \"/data/lastName\"\n  },\n  {\n    \"op\": \"add\",\n    \"path\": \"/data/lastName\",\n    \"value\": \"Thompson\"\n  }\n]","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/onboarding/submission/69dd348e040fa2cea2579c55"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:00:17 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"1618"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"652-d8jVfcw8aMzFoUawXTJ30O/4wbE\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd37ba040fa2cea2579ee2\",\n    \"form\": \"69dd378f040fa2cea2579d84\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"742\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        },\n        \"jsonPatch\": [\n            {\n                \"op\": \"replace\",\n                \"path\": \"/data/lastName\",\n                \"value\": \"Thompson\"\n            },\n            {\n                \"op\": \"replace\",\n                \"path\": \"/data/firstName\",\n                \"value\": \"James\"\n            }\n        ],\n        \"previousData\": {\n            \"firstName\": \"Myrna\",\n            \"lastName\": \"Beahan\",\n            \"email\": \"celestino97@yahoo.com\",\n            \"topicsOfInterest\": {\n                \"artsCrafts\": true,\n                \"business\": false,\n                \"finance\": false,\n                \"politics\": true,\n                \"sports\": false,\n                \"technology\": true\n            },\n            \"emailNotify\": false,\n            \"numberOfPets\": 112,\n            \"birthday\": \"08/10/2000\",\n            \"children\": [\n                {\n                    \"firstName\": \"Lazaro\",\n                    \"lastName\": \"Volkman\",\n                    \"birthday\": \"02/03/2010\"\n                },\n                {\n                    \"firstName\": \"Trisha\",\n                    \"lastName\": \"Hudson\",\n                    \"birthday\": \"03/15/2014\"\n                }\n            ]\n        }\n    },\n    \"data\": {\n        \"firstName\": \"James\",\n        \"lastName\": \"Thompson\",\n        \"email\": \"celestino97@yahoo.com\",\n        \"topicsOfInterest\": {\n            \"artsCrafts\": true,\n            \"business\": false,\n            \"finance\": false,\n            \"politics\": true,\n            \"sports\": false,\n            \"technology\": true\n        },\n        \"emailNotify\": false,\n        \"numberOfPets\": 112,\n        \"birthday\": \"08/10/2000\",\n        \"children\": [\n            {\n                \"firstName\": \"Lazaro\",\n                \"lastName\": \"Volkman\",\n                \"birthday\": \"02/03/2010\"\n            },\n            {\n                \"firstName\": \"Trisha\",\n                \"lastName\": \"Hudson\",\n                \"birthday\": \"03/15/2014\"\n            }\n        ]\n    },\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T18:36:42.985Z\",\n    \"modified\": \"2026-04-13T19:00:17.723Z\",\n    \"containRevisions\": true\n}"}],"_postman_id":"919c394a-3560-4e77-a232-21abb2d64960"},{"name":"Delete a Submission","id":"869aea41-2f6b-485e-a76b-a742370f6f08","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"formdata","formdata":[]},"url":"{{ baseUrl }}/{{ projectName }}/{{ formPath }}/submission/{{ submissionId }}","description":"<p>Signed in as the administrator of the application, I should be able to delete a user.</p>\n","urlObject":{"path":["{{ projectName }}","{{ formPath }}","submission","{{ submissionId }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"464b7401-f275-4028-a6d4-64eb7ed200c9","name":"Delete a Submission","originalRequest":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"formdata","formdata":[]},"url":"https://forms.example.com/example/onboarding/submission/69dd348e040fa2cea2579c55"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:08:25 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2-vyGp6PvFo4RvsFtPoIWeCReyIC8\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{}"}],"_postman_id":"869aea41-2f6b-485e-a76b-a742370f6f08"}],"id":"b493b68d-1463-4036-9a9d-0b839d24cca4","description":"<p>The Submission API gives you access to create, submit, edit, delete, and search submissions within a form.</p>\n<p>This also includes User creation authentication since all users are simply considered resources within the project.</p>\n","event":[{"listen":"prerequest","script":{"id":"ccc2ed27-6016-47bc-8ff6-f4d3a30b7186","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"34192a1c-192e-4fa8-a16b-584c68abd709","type":"text/javascript","exec":[""]}}],"_postman_id":"b493b68d-1463-4036-9a9d-0b839d24cca4"}],"id":"2fbecf15-ca77-46bd-96b9-b038ef5c6747","description":"<p>The runtime scope APIs define the APIs that may be used within a running form-based application within a Live environment. These include specific authetication APIs for end-users of the embedded forms, to PDF generation.</p>\n","_postman_id":"2fbecf15-ca77-46bd-96b9-b038ef5c6747"},{"name":"PDF API","item":[{"name":"Upload PDF file to server","event":[{"listen":"test","script":{"id":"b37e6335-d1ca-4d13-8622-183fb7dc0680","exec":["pm.environment.set(\" pdfFileName \", pm.response.json().file);","pm.environment.set(\" pdfFilePath \", pm.response.json().path);",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"6ce18c7a-4ce1-44db-8108-20547ed9d573","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"formdata","formdata":[{"key":"file","type":"file","fileNotInWorkingDirectoryWarning":"This file isn't in your working directory. Teammates you share this request with won't be able to use this file. To make collaboration easier you can setup your working directory in Settings.","filesNotInWorkingDirectory":["/C:/Users/Jacob/Desktop/fw4.pdf"],"src":"postman-cloud:///1ef00ed5-6f96-49d0-a3f8-04ca12095b82"}]},"url":"{{ baseUrl }}/{{ projectName }}/upload","description":"<p>This request is able to upload a PDF file to the files server and store it in the database.</p>\n","urlObject":{"path":["{{ projectName }}","upload"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"f1041b80-553b-4d15-a01c-508c3aef8c16","name":"Upload PDF file to server","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"formdata","formdata":[{"key":"file","type":"file","fileNotInWorkingDirectoryWarning":"This file isn't in your working directory. Teammates you share this request with won't be able to use this file. To make collaboration easier you can setup your working directory in Settings.","filesNotInWorkingDirectory":["/C:/Users/Jacob/Desktop/fw4.pdf"],"src":"postman-cloud:///1ef00ed5-6f96-49d0-a3f8-04ca12095b82"}]},"url":"https://forms.example.com/example/upload"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:17:34 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"5305"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src * blob: data:;script-src * 'unsafe-inline' 'unsafe-eval' data:;style-src * 'unsafe-inline' data:;font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=15552000; includeSubDomains"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"access-control-allow-headers","value":"*"},{"key":"access-control-allow-origin","value":"*"},{"key":"etag","value":"W/\"14b9-LFfc9GJdcRiXvI9J7QNXpv33nkw\""},{"key":"x-powered-by","value":"Express"},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"path\": \"/pdf/69d65f4e040fa2cea257224d/file/7b45f38b-dc26-5b1d-aa33-947522157c57\",\n    \"file\": \"7b45f38b-dc26-5b1d-aa33-947522157c57\",\n    \"formfields\": {\n        \"components\": [\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1010\",\n                \"label\": \"f1_01[0]\",\n                \"overlay\": {\n                    \"width\": 317.2850000000001,\n                    \"height\": 24.921779999999856,\n                    \"top\": 167.31822000000017,\n                    \"left\": 168.388,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1020\",\n                \"label\": \"f1_02[0]\",\n                \"overlay\": {\n                    \"width\": 355.73299999999995,\n                    \"height\": 24.921779999999856,\n                    \"top\": 167.31822000000017,\n                    \"left\": 488.78800000000007,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1030\",\n                \"label\": \"f1_03[0]\",\n                \"overlay\": {\n                    \"width\": 676.133,\n                    \"height\": 24.921780000000187,\n                    \"top\": 210.04000000000008,\n                    \"left\": 168.388,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1040\",\n                \"label\": \"f1_04[0]\",\n                \"overlay\": {\n                    \"width\": 676.133,\n                    \"height\": 24.92178000000001,\n                    \"top\": 252.76178000000016,\n                    \"left\": 168.388,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1050\",\n                \"label\": \"f1_05[0]\",\n                \"overlay\": {\n                    \"width\": 177.64400000000012,\n                    \"height\": 24.921779999999856,\n                    \"top\": 167.31822000000017,\n                    \"left\": 847.6359999999999,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"value\": \"1\",\n                \"type\": \"checkbox\",\n                \"key\": \"c110\",\n                \"label\": \"c1_1[0]\",\n                \"overlay\": {\n                    \"width\": 14.24,\n                    \"height\": 14.239999999999899,\n                    \"top\": 281.23643999999996,\n                    \"left\": 205.056,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"value\": \"2\",\n                \"type\": \"checkbox\",\n                \"key\": \"c111\",\n                \"label\": \"c1_1[1]\",\n                \"overlay\": {\n                    \"width\": 14.24,\n                    \"height\": 14.239999999999899,\n                    \"top\": 302.6000000000001,\n                    \"left\": 205.056,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"value\": \"3\",\n                \"type\": \"checkbox\",\n                \"key\": \"c112\",\n                \"label\": \"c1_1[2]\",\n                \"overlay\": {\n                    \"width\": 14.24,\n                    \"height\": 14.239999999999899,\n                    \"top\": 323.51321999999993,\n                    \"left\": 205.056,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"value\": \"1\",\n                \"type\": \"checkbox\",\n                \"key\": \"c120\",\n                \"label\": \"c1_2[0]\",\n                \"overlay\": {\n                    \"width\": 14.24,\n                    \"height\": 14.239999999999899,\n                    \"top\": 591.8500000000001,\n                    \"left\": 1003.92,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1060\",\n                \"label\": \"f1_06[0]\",\n                \"overlay\": {\n                    \"width\": 113.9200000000001,\n                    \"height\": 21.358219999999942,\n                    \"top\": 715.5617800000001,\n                    \"left\": 731.9359999999999,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1070\",\n                \"label\": \"f1_07[0]\",\n                \"overlay\": {\n                    \"width\": 113.9200000000001,\n                    \"height\": 21.358220000000145,\n                    \"top\": 747.60178,\n                    \"left\": 731.9359999999999,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1090\",\n                \"label\": \"f1_09[0]\",\n                \"overlay\": {\n                    \"width\": 113.92,\n                    \"height\": 21.35821999999974,\n                    \"top\": 801.0000000000001,\n                    \"left\": 911.36,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1100\",\n                \"label\": \"f1_10[0]\",\n                \"overlay\": {\n                    \"width\": 113.92,\n                    \"height\": 21.358219999999942,\n                    \"top\": 865.08,\n                    \"left\": 911.36,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1110\",\n                \"label\": \"f1_11[0]\",\n                \"overlay\": {\n                    \"width\": 113.92,\n                    \"height\": 21.35821999999984,\n                    \"top\": 939.84178,\n                    \"left\": 911.36,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1120\",\n                \"label\": \"f1_12[0]\",\n                \"overlay\": {\n                    \"width\": 113.92,\n                    \"height\": 21.35821999999984,\n                    \"top\": 982.55822,\n                    \"left\": 911.36,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textarea\",\n                \"key\": \"f1130\",\n                \"label\": \"f1_13[0]\",\n                \"overlay\": {\n                    \"width\": 522.3410000000001,\n                    \"height\": 58.73822000000004,\n                    \"top\": 1180.1399999999999,\n                    \"left\": 168.388,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1140\",\n                \"label\": \"f1_14[0]\",\n                \"overlay\": {\n                    \"width\": 137.861,\n                    \"height\": 24.91821999999984,\n                    \"top\": 1213.96,\n                    \"left\": 693.844,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1150\",\n                \"label\": \"f1_15[0]\",\n                \"overlay\": {\n                    \"width\": 190.46,\n                    \"height\": 24.91821999999984,\n                    \"top\": 1213.96,\n                    \"left\": 834.82,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3010\",\n                \"label\": \"f3_01[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.35821999999979,\n                    \"top\": 309.71822000000003,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3020\",\n                \"label\": \"f3_02[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000195,\n                    \"top\": 448.55999999999995,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3030\",\n                \"label\": \"f3_03[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358219999999942,\n                    \"top\": 544.6800000000001,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3040\",\n                \"label\": \"f3_04[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.35821999999984,\n                    \"top\": 576.7200000000001,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3050\",\n                \"label\": \"f3_05[0]\",\n                \"overlay\": {\n                    \"width\": 128.16,\n                    \"height\": 21.358219999999942,\n                    \"top\": 630.1182200000001,\n                    \"left\": 897.12,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3060\",\n                \"label\": \"f3_06[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000042,\n                    \"top\": 704.88,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3070\",\n                \"label\": \"f3_07[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000042,\n                    \"top\": 833.04,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3080\",\n                \"label\": \"f3_08[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358219999999942,\n                    \"top\": 886.43822,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3090\",\n                \"label\": \"f3_09[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000244,\n                    \"top\": 961.1999999999998,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3100\",\n                \"label\": \"f3_10[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000244,\n                    \"top\": 1014.5982199999999,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3110\",\n                \"label\": \"f3_11[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000244,\n                    \"top\": 1046.6382199999998,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            }\n        ]\n    }\n}"}],"_postman_id":"6ce18c7a-4ce1-44db-8108-20547ed9d573"},{"name":"Get a list of all uploaded PDF's","id":"c042d647-dce2-4443-8591-d17f3ad58992","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/pdf-proxy/pdf/{{ projectId }}/file","urlObject":{"path":["pdf-proxy","pdf","{{ projectId }}","file"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"71f2fb68-c0de-4ca8-887f-b73d24cbe199","name":"Get a list of all uploaded PDF's","originalRequest":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/pdf-proxy/pdf/69dfb6dcbb04c38a91029771/file"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:18:37 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"418"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src * blob: data:;script-src * 'unsafe-inline' 'unsafe-eval' data:;style-src * 'unsafe-inline' data:;font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=15552000; includeSubDomains"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"access-control-allow-headers","value":"*"},{"key":"access-control-allow-origin","value":"*"},{"key":"etag","value":"W/\"1a2-zrryq2O+qrDDfwVdfW8SZHsTW6U\""},{"key":"x-powered-by","value":"Express"},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd414de5cad6669f158ff6\",\n        \"form\": \"650a5e1cdc01b795146a6def\",\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"access\": [],\n        \"created\": \"2026-04-13T19:17:33.745Z\",\n        \"modified\": \"2026-04-13T19:17:33.745Z\",\n        \"data\": {\n            \"project\": \"69d65f4e040fa2cea257224d\",\n            \"id\": \"7b45f38b-dc26-5b1d-aa33-947522157c57\",\n            \"path\": \"/pdf/69d65f4e040fa2cea257224d/file/7b45f38b-dc26-5b1d-aa33-947522157c57\",\n            \"status\": \"active\"\n        }\n    }\n]"}],"_postman_id":"c042d647-dce2-4443-8591-d17f3ad58992"},{"name":"Get a specific uploaded PDF HTML","id":"9c835d36-f830-4ca0-a973-9a60af624989","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/pdf-proxy/pdf/{{ projectId }}/file/{{ pdfFileName }}.html","urlObject":{"path":["pdf-proxy","pdf","{{ projectId }}","file","{{ pdfFileName }}.html"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"9c835d36-f830-4ca0-a973-9a60af624989"},{"name":"Get a specific PDF file download","id":"00c1e4ad-23ab-444f-b187-d236d98c8ec8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/pdf-proxy/pdf/{{ projectId }}/file/{{ pdfFileName }}.pdf","urlObject":{"path":["pdf-proxy","pdf","{{ projectId }}","file","{{ pdfFileName }}.pdf"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"00c1e4ad-23ab-444f-b187-d236d98c8ec8"},{"name":"Create form with PDF attached","event":[{"listen":"test","script":{"id":"48418b93-e8d8-4612-b280-ac17b7d28f4d","exec":["pm.environment.set(\" pdfFormId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"4c4447ae-291d-4ebc-b266-e2c0ddf32c3c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"W4\",\n  \"path\": \"w4\",\n  \"name\": \"w4\",\n  \"display\": \"pdf\",\n  \"settings\": {\n    \"pdf\": {\n      \"id\": \"{{ pdfFileName }}\",\n      \"src\": \"{{ pdfServer }}{{ pdfFilePath }}\"\n    }\n  },\n  \"components\": [\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1218,\n        \"left\": 808.344,\n        \"height\": 18,\n        \"width\": 215\n      },\n      \"id\": \"57jklo\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"expectedReturn\",\n      \"label\": \"Expected Return\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1132,\n        \"left\": 910.344,\n        \"height\": 18,\n        \"width\": 115\n      },\n      \"id\": \"962ifi\",\n      \"type\": \"number\",\n      \"validate\": {\n        \"required\": false,\n        \"min\": \"\",\n        \"max\": \"\",\n        \"step\": \"any\",\n        \"integer\": \"\",\n        \"multiple\": \"\",\n        \"custom\": \"\"\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"witholdings\",\n      \"label\": \"Witholdings\",\n      \"inputType\": \"number\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1109,\n        \"left\": 909.344,\n        \"height\": 20,\n        \"width\": 116\n      },\n      \"id\": \"6n8w7p\",\n      \"type\": \"number\",\n      \"validate\": {\n        \"required\": false,\n        \"min\": \"\",\n        \"max\": \"\",\n        \"step\": \"any\",\n        \"integer\": \"\",\n        \"multiple\": \"\",\n        \"custom\": \"\"\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"allowances\",\n      \"label\": \"Allowances\",\n      \"inputType\": \"number\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"Office Code\",\n      \"key\": \"officeCode\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"vwi17\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1319,\n        \"left\": 656.344,\n        \"height\": 21,\n        \"width\": 121\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"Employers Name and Address\",\n      \"key\": \"employersName\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"mz72px\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1320,\n        \"left\": 79.34379999999999,\n        \"height\": 21,\n        \"width\": 570\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"label\": \"date\",\n      \"key\": \"date\",\n      \"placeholder\": \"\",\n      \"format\": \"yyyy-MM-dd hh:mm a\",\n      \"enableDate\": true,\n      \"enableTime\": true,\n      \"defaultDate\": \"\",\n      \"datepickerMode\": \"day\",\n      \"datePicker\": {\n        \"showWeeks\": true,\n        \"startingDay\": 0,\n        \"initDate\": \"\",\n        \"minMode\": \"day\",\n        \"maxMode\": \"year\",\n        \"yearRows\": 4,\n        \"yearColumns\": 5,\n        \"datepickerMode\": \"day\"\n      },\n      \"timePicker\": {\n        \"hourStep\": 1,\n        \"minuteStep\": 1,\n        \"showMeridian\": true,\n        \"readonlyInput\": false,\n        \"mousewheel\": true,\n        \"arrowkeys\": true\n      },\n      \"protected\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"custom\": \"\"\n      },\n      \"type\": \"datetime\",\n      \"id\": \"d3uhes\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1275,\n        \"left\": 842.344,\n        \"height\": 22,\n        \"width\": 176\n      },\n      \"tags\": [],\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"label\": \"Signature\",\n      \"key\": \"signature\",\n      \"placeholder\": \"\",\n      \"footer\": \"Sign above\",\n      \"width\": \"100%\",\n      \"height\": \"150px\",\n      \"penColor\": \"black\",\n      \"backgroundColor\": \"rgb(245,245,235)\",\n      \"minWidth\": \"0.5\",\n      \"maxWidth\": \"2.5\",\n      \"protected\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false\n      },\n      \"type\": \"signature\",\n      \"id\": \"pctj39\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1257,\n        \"left\": 347.344,\n        \"height\": 41,\n        \"width\": 437\n      },\n      \"hideLabel\": true,\n      \"tags\": [],\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"properties\": {\n        \"\": \"\"\n      }\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"City, State, Zip\",\n      \"key\": \"cityStateZip\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"6c5a77\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1084,\n        \"left\": 80.3438,\n        \"height\": 21,\n        \"width\": 465\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"tags\": [],\n      \"hideLabel\": false,\n      \"overlay\": {\n        \"width\": 11.400024414062523,\n        \"height\": 12.75628779296875,\n        \"left\": 730.538,\n        \"top\": 1027.8,\n        \"page\": 1\n      },\n      \"id\": \"6c1n8wd\",\n      \"type\": \"checkbox\",\n      \"validate\": {\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"value\": \"marriedsingle\",\n      \"name\": \"status\",\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": false,\n      \"key\": \"marriedButSingle\",\n      \"datagridLabel\": true,\n      \"label\": \"Married But Single\",\n      \"tableView\": true,\n      \"inputType\": \"radio\",\n      \"input\": true\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"tags\": [],\n      \"hideLabel\": false,\n      \"overlay\": {\n        \"width\": 13.400012207031228,\n        \"height\": 13.618787792968659,\n        \"left\": 652.938,\n        \"top\": 1027.4,\n        \"page\": 1\n      },\n      \"id\": \"qnfiqa\",\n      \"type\": \"checkbox\",\n      \"validate\": {\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"value\": \"married\",\n      \"name\": \"status\",\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": false,\n      \"key\": \"married\",\n      \"datagridLabel\": true,\n      \"label\": \"Married\",\n      \"tableView\": true,\n      \"inputType\": \"radio\",\n      \"input\": true\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"tags\": [],\n      \"hideLabel\": false,\n      \"overlay\": {\n        \"width\": 13.400012207031205,\n        \"height\": 13.88128779296875,\n        \"left\": 576.538,\n        \"top\": 1027,\n        \"page\": 1\n      },\n      \"id\": \"83qbhb\",\n      \"type\": \"checkbox\",\n      \"validate\": {\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"value\": \"single\",\n      \"name\": \"status\",\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": false,\n      \"key\": \"single\",\n      \"datagridLabel\": true,\n      \"label\": \"Single\",\n      \"tableView\": true,\n      \"inputType\": \"radio\",\n      \"input\": true\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": 466.72555555555556,\n        \"height\": 21.10074501953125,\n        \"left\": 81.30207777777777,\n        \"top\": 1044.2255555555555,\n        \"page\": 1\n      },\n      \"id\": \"yg0z4n\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"homeAddress\",\n      \"label\": \"Home Address\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": 234.0871314561631,\n        \"height\": 23.47576724175342,\n        \"left\": 789.0803333333333,\n        \"top\": 998.6667777777777,\n        \"page\": 1\n      },\n      \"id\": \"3s52a8\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"ssn\",\n      \"label\": \"ssn\",\n      \"inputMask\": \"999-99-9999\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": 389.90500508626303,\n        \"height\": 22.095556130642336,\n        \"left\": 387.4138888888889,\n        \"top\": 999.2222222222222,\n        \"page\": 1\n      },\n      \"id\": \"65t2qf\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"lastName\",\n      \"label\": \"Last Name\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": 299.9064457160102,\n        \"height\": 23.24826724175342,\n        \"left\": 81.85761111111108,\n        \"top\": 998.6664444444444,\n        \"page\": 1\n      },\n      \"id\": \"3ebhgr\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"firstName\",\n      \"label\": \"First Name\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": \"50\",\n        \"height\": \"18\",\n        \"left\": 972.9684444444445,\n        \"top\": 750.3336666666667,\n        \"page\": 1\n      },\n      \"id\": \"n92fqkc\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"h\",\n      \"label\": \"H\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"G\",\n      \"key\": \"g\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"9ub9k\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 726.5,\n        \"left\": 973.172,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"F\",\n      \"key\": \"f\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"pu3d5\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 621.5,\n        \"left\": 973.172,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"E\",\n      \"key\": \"e\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"vf655m\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 599.5,\n        \"left\": 973.172,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"D\",\n      \"key\": \"d\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"bll9zn\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 577.5,\n        \"left\": 972.672,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"C\",\n      \"key\": \"c\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"ajc30d\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 556.5,\n        \"left\": 972.672,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"B\",\n      \"key\": \"b\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"j9zbe6\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 493,\n        \"left\": 972.672,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"A\",\n      \"key\": \"a\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"bz3j3p\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 449.375,\n        \"left\": 972.469,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"label\": \"Submit\",\n      \"tableView\": false,\n      \"key\": \"submit\",\n      \"size\": \"md\",\n      \"leftIcon\": \"\",\n      \"rightIcon\": \"\",\n      \"block\": false,\n      \"action\": \"submit\",\n      \"disableOnInvalid\": false,\n      \"theme\": \"primary\",\n      \"type\": \"button\",\n      \"hideLabel\": false\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form","urlObject":{"path":["{{ projectName }}","form"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"7851a8df-3f35-4048-881d-258d4667a23d","name":"Create form with PDF attached","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"title\": \"W4\",\n  \"path\": \"w4\",\n  \"name\": \"w4\",\n  \"display\": \"pdf\",\n  \"settings\": {\n    \"pdf\": {\n      \"id\": \"7b45f38b-dc26-5b1d-aa33-947522157c57\",\n      \"src\": \"{{ pdfServer }}/pdf/69d65f4e040fa2cea257224d/file/7b45f38b-dc26-5b1d-aa33-947522157c57\"\n    }\n  },\n  \"components\": [\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1218,\n        \"left\": 808.344,\n        \"height\": 18,\n        \"width\": 215\n      },\n      \"id\": \"57jklo\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"expectedReturn\",\n      \"label\": \"Expected Return\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1132,\n        \"left\": 910.344,\n        \"height\": 18,\n        \"width\": 115\n      },\n      \"id\": \"962ifi\",\n      \"type\": \"number\",\n      \"validate\": {\n        \"required\": false,\n        \"min\": \"\",\n        \"max\": \"\",\n        \"step\": \"any\",\n        \"integer\": \"\",\n        \"multiple\": \"\",\n        \"custom\": \"\"\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"witholdings\",\n      \"label\": \"Witholdings\",\n      \"inputType\": \"number\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1109,\n        \"left\": 909.344,\n        \"height\": 20,\n        \"width\": 116\n      },\n      \"id\": \"6n8w7p\",\n      \"type\": \"number\",\n      \"validate\": {\n        \"required\": false,\n        \"min\": \"\",\n        \"max\": \"\",\n        \"step\": \"any\",\n        \"integer\": \"\",\n        \"multiple\": \"\",\n        \"custom\": \"\"\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"allowances\",\n      \"label\": \"Allowances\",\n      \"inputType\": \"number\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"Office Code\",\n      \"key\": \"officeCode\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"vwi17\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1319,\n        \"left\": 656.344,\n        \"height\": 21,\n        \"width\": 121\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"Employers Name and Address\",\n      \"key\": \"employersName\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"mz72px\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1320,\n        \"left\": 79.34379999999999,\n        \"height\": 21,\n        \"width\": 570\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"label\": \"date\",\n      \"key\": \"date\",\n      \"placeholder\": \"\",\n      \"format\": \"yyyy-MM-dd hh:mm a\",\n      \"enableDate\": true,\n      \"enableTime\": true,\n      \"defaultDate\": \"\",\n      \"datepickerMode\": \"day\",\n      \"datePicker\": {\n        \"showWeeks\": true,\n        \"startingDay\": 0,\n        \"initDate\": \"\",\n        \"minMode\": \"day\",\n        \"maxMode\": \"year\",\n        \"yearRows\": 4,\n        \"yearColumns\": 5,\n        \"datepickerMode\": \"day\"\n      },\n      \"timePicker\": {\n        \"hourStep\": 1,\n        \"minuteStep\": 1,\n        \"showMeridian\": true,\n        \"readonlyInput\": false,\n        \"mousewheel\": true,\n        \"arrowkeys\": true\n      },\n      \"protected\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"custom\": \"\"\n      },\n      \"type\": \"datetime\",\n      \"id\": \"d3uhes\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1275,\n        \"left\": 842.344,\n        \"height\": 22,\n        \"width\": 176\n      },\n      \"tags\": [],\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"label\": \"Signature\",\n      \"key\": \"signature\",\n      \"placeholder\": \"\",\n      \"footer\": \"Sign above\",\n      \"width\": \"100%\",\n      \"height\": \"150px\",\n      \"penColor\": \"black\",\n      \"backgroundColor\": \"rgb(245,245,235)\",\n      \"minWidth\": \"0.5\",\n      \"maxWidth\": \"2.5\",\n      \"protected\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false\n      },\n      \"type\": \"signature\",\n      \"id\": \"pctj39\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1257,\n        \"left\": 347.344,\n        \"height\": 41,\n        \"width\": 437\n      },\n      \"hideLabel\": true,\n      \"tags\": [],\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"properties\": {\n        \"\": \"\"\n      }\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"City, State, Zip\",\n      \"key\": \"cityStateZip\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"6c5a77\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 1084,\n        \"left\": 80.3438,\n        \"height\": 21,\n        \"width\": 465\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"tags\": [],\n      \"hideLabel\": false,\n      \"overlay\": {\n        \"width\": 11.400024414062523,\n        \"height\": 12.75628779296875,\n        \"left\": 730.538,\n        \"top\": 1027.8,\n        \"page\": 1\n      },\n      \"id\": \"6c1n8wd\",\n      \"type\": \"checkbox\",\n      \"validate\": {\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"value\": \"marriedsingle\",\n      \"name\": \"status\",\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": false,\n      \"key\": \"marriedButSingle\",\n      \"datagridLabel\": true,\n      \"label\": \"Married But Single\",\n      \"tableView\": true,\n      \"inputType\": \"radio\",\n      \"input\": true\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"tags\": [],\n      \"hideLabel\": false,\n      \"overlay\": {\n        \"width\": 13.400012207031228,\n        \"height\": 13.618787792968659,\n        \"left\": 652.938,\n        \"top\": 1027.4,\n        \"page\": 1\n      },\n      \"id\": \"qnfiqa\",\n      \"type\": \"checkbox\",\n      \"validate\": {\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"value\": \"married\",\n      \"name\": \"status\",\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": false,\n      \"key\": \"married\",\n      \"datagridLabel\": true,\n      \"label\": \"Married\",\n      \"tableView\": true,\n      \"inputType\": \"radio\",\n      \"input\": true\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"tags\": [],\n      \"hideLabel\": false,\n      \"overlay\": {\n        \"width\": 13.400012207031205,\n        \"height\": 13.88128779296875,\n        \"left\": 576.538,\n        \"top\": 1027,\n        \"page\": 1\n      },\n      \"id\": \"83qbhb\",\n      \"type\": \"checkbox\",\n      \"validate\": {\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"value\": \"single\",\n      \"name\": \"status\",\n      \"hidden\": false,\n      \"persistent\": true,\n      \"protected\": false,\n      \"defaultValue\": false,\n      \"key\": \"single\",\n      \"datagridLabel\": true,\n      \"label\": \"Single\",\n      \"tableView\": true,\n      \"inputType\": \"radio\",\n      \"input\": true\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": 466.72555555555556,\n        \"height\": 21.10074501953125,\n        \"left\": 81.30207777777777,\n        \"top\": 1044.2255555555555,\n        \"page\": 1\n      },\n      \"id\": \"yg0z4n\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"homeAddress\",\n      \"label\": \"Home Address\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": 234.0871314561631,\n        \"height\": 23.47576724175342,\n        \"left\": 789.0803333333333,\n        \"top\": 998.6667777777777,\n        \"page\": 1\n      },\n      \"id\": \"3s52a8\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"ssn\",\n      \"label\": \"ssn\",\n      \"inputMask\": \"999-99-9999\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": 389.90500508626303,\n        \"height\": 22.095556130642336,\n        \"left\": 387.4138888888889,\n        \"top\": 999.2222222222222,\n        \"page\": 1\n      },\n      \"id\": \"65t2qf\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"lastName\",\n      \"label\": \"Last Name\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": 299.9064457160102,\n        \"height\": 23.24826724175342,\n        \"left\": 81.85761111111108,\n        \"top\": 998.6664444444444,\n        \"page\": 1\n      },\n      \"id\": \"3ebhgr\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"firstName\",\n      \"label\": \"First Name\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"tags\": [],\n      \"overlay\": {\n        \"width\": \"50\",\n        \"height\": \"18\",\n        \"left\": 972.9684444444445,\n        \"top\": 750.3336666666667,\n        \"page\": 1\n      },\n      \"id\": \"n92fqkc\",\n      \"type\": \"textfield\",\n      \"conditional\": {\n        \"eq\": \"\",\n        \"when\": null,\n        \"show\": \"\"\n      },\n      \"validate\": {\n        \"customPrivate\": false,\n        \"custom\": \"\",\n        \"pattern\": \"\",\n        \"maxLength\": \"\",\n        \"minLength\": \"\",\n        \"required\": false\n      },\n      \"clearOnHide\": true,\n      \"hidden\": false,\n      \"persistent\": true,\n      \"unique\": false,\n      \"protected\": false,\n      \"defaultValue\": \"\",\n      \"multiple\": false,\n      \"suffix\": \"\",\n      \"prefix\": \"\",\n      \"placeholder\": \"\",\n      \"key\": \"h\",\n      \"label\": \"H\",\n      \"inputMask\": \"\",\n      \"inputType\": \"text\",\n      \"tableView\": true,\n      \"input\": true,\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"G\",\n      \"key\": \"g\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"9ub9k\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 726.5,\n        \"left\": 973.172,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"F\",\n      \"key\": \"f\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"pu3d5\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 621.5,\n        \"left\": 973.172,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"E\",\n      \"key\": \"e\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"vf655m\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 599.5,\n        \"left\": 973.172,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"D\",\n      \"key\": \"d\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"bll9zn\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 577.5,\n        \"left\": 972.672,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"C\",\n      \"key\": \"c\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"ajc30d\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 556.5,\n        \"left\": 972.672,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"B\",\n      \"key\": \"b\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"j9zbe6\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 493,\n        \"left\": 972.672,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"tableView\": true,\n      \"inputType\": \"text\",\n      \"inputMask\": \"\",\n      \"label\": \"A\",\n      \"key\": \"a\",\n      \"placeholder\": \"\",\n      \"prefix\": \"\",\n      \"suffix\": \"\",\n      \"multiple\": false,\n      \"defaultValue\": \"\",\n      \"protected\": false,\n      \"unique\": false,\n      \"persistent\": true,\n      \"hidden\": false,\n      \"clearOnHide\": true,\n      \"validate\": {\n        \"required\": false,\n        \"minLength\": \"\",\n        \"maxLength\": \"\",\n        \"pattern\": \"\",\n        \"custom\": \"\",\n        \"customPrivate\": false\n      },\n      \"conditional\": {\n        \"show\": \"\",\n        \"when\": null,\n        \"eq\": \"\"\n      },\n      \"type\": \"textfield\",\n      \"id\": \"bz3j3p\",\n      \"overlay\": {\n        \"page\": 1,\n        \"top\": 449.375,\n        \"left\": 972.469,\n        \"height\": \"18\",\n        \"width\": \"50\"\n      },\n      \"tags\": [],\n      \"properties\": {\n        \"\": \"\"\n      },\n      \"hideLabel\": false\n    },\n    {\n      \"input\": true,\n      \"label\": \"Submit\",\n      \"tableView\": false,\n      \"key\": \"submit\",\n      \"size\": \"md\",\n      \"leftIcon\": \"\",\n      \"rightIcon\": \"\",\n      \"block\": false,\n      \"action\": \"submit\",\n      \"disableOnInvalid\": false,\n      \"theme\": \"primary\",\n      \"type\": \"button\",\n      \"hideLabel\": false\n    }\n  ]\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:24:28 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"14159"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"374f-D56lETBsFpIsprYSy5o06DRskrk\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"_id\": \"69dd42ec040fa2cea257a2d0\",\n    \"title\": \"W4\",\n    \"name\": \"w4\",\n    \"path\": \"w4\",\n    \"type\": \"form\",\n    \"display\": \"pdf\",\n    \"tags\": [],\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"components\": [\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"tags\": [],\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 1218,\n                \"left\": 808.344,\n                \"height\": 18,\n                \"width\": 215\n            },\n            \"id\": \"57jklo\",\n            \"type\": \"textfield\",\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"clearOnHide\": true,\n            \"hidden\": false,\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"multiple\": false,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"\",\n            \"key\": \"expectedReturn\",\n            \"label\": \"Expected Return\",\n            \"inputMask\": \"\",\n            \"inputType\": \"text\",\n            \"tableView\": true,\n            \"input\": true,\n            \"hideLabel\": false\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"tags\": [],\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 1132,\n                \"left\": 910.344,\n                \"height\": 18,\n                \"width\": 115\n            },\n            \"id\": \"962ifi\",\n            \"type\": \"number\",\n            \"validate\": {\n                \"required\": false,\n                \"min\": \"\",\n                \"max\": \"\",\n                \"step\": \"any\",\n                \"integer\": \"\",\n                \"multiple\": \"\",\n                \"custom\": \"\"\n            },\n            \"clearOnHide\": true,\n            \"hidden\": false,\n            \"persistent\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"\",\n            \"key\": \"witholdings\",\n            \"label\": \"Witholdings\",\n            \"inputType\": \"number\",\n            \"tableView\": true,\n            \"input\": true,\n            \"hideLabel\": false\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"tags\": [],\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 1109,\n                \"left\": 909.344,\n                \"height\": 20,\n                \"width\": 116\n            },\n            \"id\": \"6n8w7p\",\n            \"type\": \"number\",\n            \"validate\": {\n                \"required\": false,\n                \"min\": \"\",\n                \"max\": \"\",\n                \"step\": \"any\",\n                \"integer\": \"\",\n                \"multiple\": \"\",\n                \"custom\": \"\"\n            },\n            \"clearOnHide\": true,\n            \"hidden\": false,\n            \"persistent\": true,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"\",\n            \"key\": \"allowances\",\n            \"label\": \"Allowances\",\n            \"inputType\": \"number\",\n            \"tableView\": true,\n            \"input\": true,\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"Office Code\",\n            \"key\": \"officeCode\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"vwi17\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 1319,\n                \"left\": 656.344,\n                \"height\": 21,\n                \"width\": 121\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"Employers Name and Address\",\n            \"key\": \"employersName\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"mz72px\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 1320,\n                \"left\": 79.34379999999999,\n                \"height\": 21,\n                \"width\": 570\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"label\": \"date\",\n            \"key\": \"date\",\n            \"placeholder\": \"\",\n            \"format\": \"yyyy-MM-dd hh:mm a\",\n            \"enableDate\": true,\n            \"enableTime\": true,\n            \"defaultDate\": \"\",\n            \"datepickerMode\": \"day\",\n            \"datePicker\": {\n                \"showWeeks\": true,\n                \"startingDay\": 0,\n                \"initDate\": \"\",\n                \"minMode\": \"day\",\n                \"maxMode\": \"year\",\n                \"yearRows\": 4,\n                \"yearColumns\": 5,\n                \"datepickerMode\": \"day\"\n            },\n            \"timePicker\": {\n                \"hourStep\": 1,\n                \"minuteStep\": 1,\n                \"showMeridian\": true,\n                \"readonlyInput\": false,\n                \"mousewheel\": true,\n                \"arrowkeys\": true\n            },\n            \"protected\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"custom\": \"\"\n            },\n            \"type\": \"datetime\",\n            \"id\": \"d3uhes\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 1275,\n                \"left\": 842.344,\n                \"height\": 22,\n                \"width\": 176\n            },\n            \"tags\": [],\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"label\": \"Signature\",\n            \"key\": \"signature\",\n            \"placeholder\": \"\",\n            \"footer\": \"Sign above\",\n            \"width\": \"100%\",\n            \"height\": \"150px\",\n            \"penColor\": \"black\",\n            \"backgroundColor\": \"rgb(245,245,235)\",\n            \"minWidth\": \"0.5\",\n            \"maxWidth\": \"2.5\",\n            \"protected\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false\n            },\n            \"type\": \"signature\",\n            \"id\": \"pctj39\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 1257,\n                \"left\": 347.344,\n                \"height\": 41,\n                \"width\": 437\n            },\n            \"hideLabel\": true,\n            \"tags\": [],\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"properties\": {\n                \"\": \"\"\n            }\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"City, State, Zip\",\n            \"key\": \"cityStateZip\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"6c5a77\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 1084,\n                \"left\": 80.3438,\n                \"height\": 21,\n                \"width\": 465\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"conditional\": {\n                \"eq\": \"\",\n                \"when\": null,\n                \"show\": \"\"\n            },\n            \"tags\": [],\n            \"hideLabel\": false,\n            \"overlay\": {\n                \"width\": 11.400024414062523,\n                \"height\": 12.75628779296875,\n                \"left\": 730.538,\n                \"top\": 1027.8,\n                \"page\": 1\n            },\n            \"id\": \"6c1n8wd\",\n            \"type\": \"checkbox\",\n            \"validate\": {\n                \"required\": false\n            },\n            \"clearOnHide\": true,\n            \"value\": \"marriedsingle\",\n            \"name\": \"status\",\n            \"hidden\": false,\n            \"persistent\": true,\n            \"protected\": false,\n            \"defaultValue\": false,\n            \"key\": \"marriedButSingle\",\n            \"datagridLabel\": true,\n            \"label\": \"Married But Single\",\n            \"tableView\": true,\n            \"inputType\": \"radio\",\n            \"input\": true\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"conditional\": {\n                \"eq\": \"\",\n                \"when\": null,\n                \"show\": \"\"\n            },\n            \"tags\": [],\n            \"hideLabel\": false,\n            \"overlay\": {\n                \"width\": 13.400012207031228,\n                \"height\": 13.618787792968659,\n                \"left\": 652.938,\n                \"top\": 1027.4,\n                \"page\": 1\n            },\n            \"id\": \"qnfiqa\",\n            \"type\": \"checkbox\",\n            \"validate\": {\n                \"required\": false\n            },\n            \"clearOnHide\": true,\n            \"value\": \"married\",\n            \"name\": \"status\",\n            \"hidden\": false,\n            \"persistent\": true,\n            \"protected\": false,\n            \"defaultValue\": false,\n            \"key\": \"married\",\n            \"datagridLabel\": true,\n            \"label\": \"Married\",\n            \"tableView\": true,\n            \"inputType\": \"radio\",\n            \"input\": true\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"conditional\": {\n                \"eq\": \"\",\n                \"when\": null,\n                \"show\": \"\"\n            },\n            \"tags\": [],\n            \"hideLabel\": false,\n            \"overlay\": {\n                \"width\": 13.400012207031205,\n                \"height\": 13.88128779296875,\n                \"left\": 576.538,\n                \"top\": 1027,\n                \"page\": 1\n            },\n            \"id\": \"83qbhb\",\n            \"type\": \"checkbox\",\n            \"validate\": {\n                \"required\": false\n            },\n            \"clearOnHide\": true,\n            \"value\": \"single\",\n            \"name\": \"status\",\n            \"hidden\": false,\n            \"persistent\": true,\n            \"protected\": false,\n            \"defaultValue\": false,\n            \"key\": \"single\",\n            \"datagridLabel\": true,\n            \"label\": \"Single\",\n            \"tableView\": true,\n            \"inputType\": \"radio\",\n            \"input\": true\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"tags\": [],\n            \"overlay\": {\n                \"width\": 466.72555555555556,\n                \"height\": 21.10074501953125,\n                \"left\": 81.30207777777777,\n                \"top\": 1044.2255555555555,\n                \"page\": 1\n            },\n            \"id\": \"yg0z4n\",\n            \"type\": \"textfield\",\n            \"conditional\": {\n                \"eq\": \"\",\n                \"when\": null,\n                \"show\": \"\"\n            },\n            \"validate\": {\n                \"customPrivate\": false,\n                \"custom\": \"\",\n                \"pattern\": \"\",\n                \"maxLength\": \"\",\n                \"minLength\": \"\",\n                \"required\": false\n            },\n            \"clearOnHide\": true,\n            \"hidden\": false,\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"multiple\": false,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"\",\n            \"key\": \"homeAddress\",\n            \"label\": \"Home Address\",\n            \"inputMask\": \"\",\n            \"inputType\": \"text\",\n            \"tableView\": true,\n            \"input\": true,\n            \"hideLabel\": false\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"tags\": [],\n            \"overlay\": {\n                \"width\": 234.0871314561631,\n                \"height\": 23.47576724175342,\n                \"left\": 789.0803333333333,\n                \"top\": 998.6667777777777,\n                \"page\": 1\n            },\n            \"id\": \"3s52a8\",\n            \"type\": \"textfield\",\n            \"conditional\": {\n                \"eq\": \"\",\n                \"when\": null,\n                \"show\": \"\"\n            },\n            \"validate\": {\n                \"customPrivate\": false,\n                \"custom\": \"\",\n                \"pattern\": \"\",\n                \"maxLength\": \"\",\n                \"minLength\": \"\",\n                \"required\": false\n            },\n            \"clearOnHide\": true,\n            \"hidden\": false,\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"multiple\": false,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"\",\n            \"key\": \"ssn\",\n            \"label\": \"ssn\",\n            \"inputMask\": \"999-99-9999\",\n            \"inputType\": \"text\",\n            \"tableView\": true,\n            \"input\": true,\n            \"hideLabel\": false\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"tags\": [],\n            \"overlay\": {\n                \"width\": 389.90500508626303,\n                \"height\": 22.095556130642336,\n                \"left\": 387.4138888888889,\n                \"top\": 999.2222222222222,\n                \"page\": 1\n            },\n            \"id\": \"65t2qf\",\n            \"type\": \"textfield\",\n            \"conditional\": {\n                \"eq\": \"\",\n                \"when\": null,\n                \"show\": \"\"\n            },\n            \"validate\": {\n                \"customPrivate\": false,\n                \"custom\": \"\",\n                \"pattern\": \"\",\n                \"maxLength\": \"\",\n                \"minLength\": \"\",\n                \"required\": false\n            },\n            \"clearOnHide\": true,\n            \"hidden\": false,\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"multiple\": false,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"\",\n            \"key\": \"lastName\",\n            \"label\": \"Last Name\",\n            \"inputMask\": \"\",\n            \"inputType\": \"text\",\n            \"tableView\": true,\n            \"input\": true,\n            \"hideLabel\": false\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"tags\": [],\n            \"overlay\": {\n                \"width\": 299.9064457160102,\n                \"height\": 23.24826724175342,\n                \"left\": 81.85761111111108,\n                \"top\": 998.6664444444444,\n                \"page\": 1\n            },\n            \"id\": \"3ebhgr\",\n            \"type\": \"textfield\",\n            \"conditional\": {\n                \"eq\": \"\",\n                \"when\": null,\n                \"show\": \"\"\n            },\n            \"validate\": {\n                \"customPrivate\": false,\n                \"custom\": \"\",\n                \"pattern\": \"\",\n                \"maxLength\": \"\",\n                \"minLength\": \"\",\n                \"required\": false\n            },\n            \"clearOnHide\": true,\n            \"hidden\": false,\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"multiple\": false,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"\",\n            \"key\": \"firstName\",\n            \"label\": \"First Name\",\n            \"inputMask\": \"\",\n            \"inputType\": \"text\",\n            \"tableView\": true,\n            \"input\": true,\n            \"hideLabel\": false\n        },\n        {\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"tags\": [],\n            \"overlay\": {\n                \"width\": \"50\",\n                \"height\": \"18\",\n                \"left\": 972.9684444444445,\n                \"top\": 750.3336666666667,\n                \"page\": 1\n            },\n            \"id\": \"n92fqkc\",\n            \"type\": \"textfield\",\n            \"conditional\": {\n                \"eq\": \"\",\n                \"when\": null,\n                \"show\": \"\"\n            },\n            \"validate\": {\n                \"customPrivate\": false,\n                \"custom\": \"\",\n                \"pattern\": \"\",\n                \"maxLength\": \"\",\n                \"minLength\": \"\",\n                \"required\": false\n            },\n            \"clearOnHide\": true,\n            \"hidden\": false,\n            \"persistent\": true,\n            \"unique\": false,\n            \"protected\": false,\n            \"defaultValue\": \"\",\n            \"multiple\": false,\n            \"suffix\": \"\",\n            \"prefix\": \"\",\n            \"placeholder\": \"\",\n            \"key\": \"h\",\n            \"label\": \"H\",\n            \"inputMask\": \"\",\n            \"inputType\": \"text\",\n            \"tableView\": true,\n            \"input\": true,\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"G\",\n            \"key\": \"g\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"9ub9k\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 726.5,\n                \"left\": 973.172,\n                \"height\": \"18\",\n                \"width\": \"50\"\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"F\",\n            \"key\": \"f\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"pu3d5\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 621.5,\n                \"left\": 973.172,\n                \"height\": \"18\",\n                \"width\": \"50\"\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"E\",\n            \"key\": \"e\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"vf655m\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 599.5,\n                \"left\": 973.172,\n                \"height\": \"18\",\n                \"width\": \"50\"\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"D\",\n            \"key\": \"d\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"bll9zn\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 577.5,\n                \"left\": 972.672,\n                \"height\": \"18\",\n                \"width\": \"50\"\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"C\",\n            \"key\": \"c\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"ajc30d\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 556.5,\n                \"left\": 972.672,\n                \"height\": \"18\",\n                \"width\": \"50\"\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"B\",\n            \"key\": \"b\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"j9zbe6\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 493,\n                \"left\": 972.672,\n                \"height\": \"18\",\n                \"width\": \"50\"\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"tableView\": true,\n            \"inputType\": \"text\",\n            \"inputMask\": \"\",\n            \"label\": \"A\",\n            \"key\": \"a\",\n            \"placeholder\": \"\",\n            \"prefix\": \"\",\n            \"suffix\": \"\",\n            \"multiple\": false,\n            \"defaultValue\": \"\",\n            \"protected\": false,\n            \"unique\": false,\n            \"persistent\": true,\n            \"hidden\": false,\n            \"clearOnHide\": true,\n            \"validate\": {\n                \"required\": false,\n                \"minLength\": \"\",\n                \"maxLength\": \"\",\n                \"pattern\": \"\",\n                \"custom\": \"\",\n                \"customPrivate\": false\n            },\n            \"conditional\": {\n                \"show\": \"\",\n                \"when\": null,\n                \"eq\": \"\"\n            },\n            \"type\": \"textfield\",\n            \"id\": \"bz3j3p\",\n            \"overlay\": {\n                \"page\": 1,\n                \"top\": 449.375,\n                \"left\": 972.469,\n                \"height\": \"18\",\n                \"width\": \"50\"\n            },\n            \"tags\": [],\n            \"properties\": {\n                \"\": \"\"\n            },\n            \"hideLabel\": false\n        },\n        {\n            \"input\": true,\n            \"label\": \"Submit\",\n            \"tableView\": false,\n            \"key\": \"submit\",\n            \"size\": \"md\",\n            \"leftIcon\": \"\",\n            \"rightIcon\": \"\",\n            \"block\": false,\n            \"action\": \"submit\",\n            \"disableOnInvalid\": false,\n            \"theme\": \"primary\",\n            \"type\": \"button\",\n            \"hideLabel\": false\n        }\n    ],\n    \"pdfComponents\": [],\n    \"settings\": {\n        \"pdf\": {\n            \"id\": \"7b45f38b-dc26-5b1d-aa33-947522157c57\",\n            \"src\": \"https://forms.example.com/pdf/pdf/69d65f4e040fa2cea257224d/file/7b45f38b-dc26-5b1d-aa33-947522157c57\"\n        }\n    },\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"revisions\": \"\",\n    \"submissionRevisions\": \"\",\n    \"_vid\": 0,\n    \"access\": [\n        {\n            \"type\": \"read_all\",\n            \"roles\": [\n                \"69d65f4e040fa2cea2572254\",\n                \"69d65f4e040fa2cea2572258\",\n                \"69d65f4e040fa2cea257225c\",\n                \"69d68310040fa2cea2572945\",\n                \"69d901ab040fa2cea257524f\",\n                \"69dd0ca8040fa2cea2578c09\"\n            ]\n        }\n    ],\n    \"submissionAccess\": [],\n    \"created\": \"2026-04-13T19:24:28.688Z\",\n    \"esign\": {},\n    \"modified\": \"2026-04-13T19:24:28.693Z\",\n    \"machineName\": \"example:w4\"\n}"}],"_postman_id":"4c4447ae-291d-4ebc-b266-e2c0ddf32c3c"},{"name":"Create PDF Submission","event":[{"listen":"test","script":{"id":"0254e8d3-7fcb-44d4-ac16-e95782a936c2","exec":["pm.environment.set(\" pdfSubmissionId \", pm.response.json()._id);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"608aa65c-8fe8-4ee0-ace1-aa22a6503adc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"expectedReturn\": \"23\",\n    \"witholdings\": 23,\n    \"allowances\": 23,\n    \"officeCode\": \"234\",\n    \"employersName\": \"Form.io\",\n    \"date\": \"2018-02-23T06:00:00.000Z\",\n    \"signature\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABRIAAACWCAYAAACiuHTbAAAdfElEQVR4Xu3db4xWV50H8NMibMFlBrct1RpmXmxjUmCG3W5rpHRau/5ZqJDtZhPBdNomm92igi+LCaivFNO6UROL2fJGXTA79ZWE0VIT41paxLZ25V/XhJbtTNP6whfAbOhGInbzu+N9eGZguBeYeeY+z/3cZDLDzJl7z/mcO33x7e+cc82ZM797J7kIECBAgAABAgQIECBAgAABAgQIECBwCYFrBIneDwIECBAgQIAAAQIECBAgQIAAAQIEigQEiUVCfk6AAAECBAgQIECAAAECBAgQIECAQBIkegkIECBAgAABAgQIECBAgAABAgQIECgUECQWEmlAgAABAgQIECBAgAABAgQIECBAgIAg0TtAgAABAgQIECBAgAABAgQIECBAgEChgCCxkEgDAgQIECBAgAABAgQIECBAgAABAgQEid4BAgQIECBAgAABAgQIECBAgAABAgQKBQSJhUQaECBAgAABAgQIECBAgAABAgQIECAgSPQOECBAgAABAgQIECBAgAABAgQIECBQKCBILCTSgAABAgQIECBAgAABAgQIECBAgAABQaJ3gAABAgQIECBAgAABAgQIECBAgACBQgFBYiGRBgQIECBAgAABAgQIECBAgAABAgQICBK9AwQIECBAgAABAgQIECBAgAABAgQIFAoIEguJNCBAgAABAgQIECBAgAABAgQIECBAQJDoHSBAgAABAgQIECBAgAABAgQIECBAoFBAkFhIpAEBAgQIECBAgAABAgQIECBAgAABAoJE7wABAgQIECBAgAABAgQIECBAgAABAoUCgsRCIg0IECBAgAABAgQIECBAgAABAgQIEBAkegcIECBAgAABAgQIECBAgAABAgQIECgUECQWEmlAgAABAgQIECBAgAABAgQIECBAgIAg0TtAgAABAgQIECBAgAABAgQIECBAgEChgCCxkEgDAgQIECBAgAABAgQIECBAgAABAgQEid4BAgQIECBAgAABAgQIECBAgAABAgQKBQSJhUQaECBAgAABAgQIECBAgAABAgQIECAgSPQOECBAgAABAgQIECBAgAABAgQIECBQKCBILCTSgAABAgQIECBAgAABAgQIECBAgAABQaJ3gAABAgQIECBAgAABAgQIECBAgACBQgFBYiGRBgQIECBAgAABAgQIECBAgAABAgQICBK9AwQIECBAgAABAgQIECBAgAABAgQIFAoIEguJNCBAgAABAgQIECBAgAABAgQIECBAQJDoHSBAgAABAgQIECBAgAABAgQIECBAoFBAkFhIpAEBAgQIECBAgAABAgQIECBAgAABAoJE7wABAgQIECBAgAABAgQIECBAgAABAoUCgsRCIg0IECBAgAABAgQIECBAgAABAgQIEBAkegcIECBAgAABAgQIECBAgAABAgQIECgUECQWEmlAgAABAgQIECBAgAABAgQIECBAgIAg0TtAgAABAgQIECBAgAABAgQIECBAgEChgCCxkEgDAgQIECBAgAABAgQIECBAgAABAgQEid4BAgQIECBAgAABAgQIECBAgAABAgQKBQSJhUQaECBAgAABAgQIECBAgAABAgQIECAgSPQOECBAgAABAgQIECBAgAABAgQIECBQKCBILCTSgAABAgQIECBAgAABAgQIECBAgAABQaJ3gEDNBUZG3kinT5/OPlK6ZoLGnDnXpnPn/pj2738++/mhQ0ezz4cPH2206+7uTv39y1Nv75J0002L0wc/eHsaGLgzxfddBAgQIECAAAECBAgQIECAQOcICBI7Zy6NhEChQASC+/cfSM8++3waHR1NESLO1BXB4rp196XPfnZjFjK6CBAgQIAAAQIECBAgQIAAgfYWECS29/zpPYFLCkTl4PDw01lwGCHi1V5dXV1pxYrlF9wmKhXHxsamvP3g4Ia0desWgeLVToDfJ0CAAAECBAgQIECAAAECsyggSJxFfI8mMBMCe/f+OH3pS19Or78+ks6ePXvZj8jDwliuvGTJknTPPXdl94h/X+qKJc8RWEZ4mVc+NrePqsTHHvtyVqXoIkCAAAECBAgQIECAAAECBNpPQJDYfnOmxwQuKhBB3vr1D19W5WFPz5IsIDz/0TdtVYPRnyeeeDL7aK5W/Mxn/iV98Yuft4ei95gAAQIECBAgQIAAAQIECLSZgCCxzSZMdwlMJbB69d9n+x9e6urrW5buvntV6u/vSwMDq6YtNLzUM2MfxvXrH0xHjhxrNIuqxKhOtHei95kAAQIECBAgQIAAAQIECLSPgCCxfeZKTwlMKXDrrbel0dELD06ZM2dOWrPm49ly4nXr1sxaFWBUJz744D+nn/70PxtjiBBxaOjfC5dMm3YCBAgQIECAAAECBAgQIECgGgKCxGrMg14QuGKB2JNw5cp7L/j9WLa8b9+eylT95Uudt2//2oS+7tv3w6w60kWAAAECBAgQIECAAAECBAhUW0CQWO350TsChQJxsMnq1fdPaBcHpjzzzJ5KVvvFYTCPPPK5Cfsm/uIXP6tkXwvxNSBAgAABAgQIECBAgAABAjUSECTWaLINtXMFmpc2xz6ITz21qzKViBdTnxx+xmEvUZnY3d3duZNkZAQIECBAgAABAgQIECBAoM0FBIltPoG6TyAXiCXOcUUo1w5XVCZu2PBwo6tbtz6atm3b0g5d10cCBAgQIECAAAECBAgQIFBLAUFiLafdoAlUQ6D5pOl58+aln//8mbYJQqshqBcECBAgQIAAAQIECBAgQKB1AoLE1ll7EgECkwQmL3GO06WHhr7HiQABAgQIECBAgAABAgQIEKiggCCxgpOiSwTqJHDPPX+XXnrp5caQI0iMQNFFgAABAgQIECBAgAABAgQIVEtAkFit+dAbArUTiL0dV668tzHu2OMxTnF2ESBAgAABAgQIECBAgAABAtUSECRWaz70hkAtBdavfygNDz/dGLuqxFq+BgZNgAABAgQIECBAgAABAhUXECRWfIJ0j0AdBCZXJQ4MrEr79v2wDkM3RgIECBAgQIAAAQIECBAg0DYCgsS2mSodJdDZApOrEl955eXU27ukswdtdAQIECBAgAABAgQIECBAoI0EBIltNFm6SqCTBSaf4PzYY19Omzdv7OQhGxsBAgQIECBAgAABAgQIEGgrAUFiW02XzhLobIFbb70tjY6+kQ1yYODOtG/fns4esNERIECAAAECBAgQIECAAIE2EhAkttFk6SqBThd44okn0+c//4XGMM+c+V2nD9n4CBAgQIAAAQIECBAgQIBA2wgIEttmqnSUQOcLjIy8kZYuva0x0DhwJQ5ecREgQIAAAQIECBAgQIAAAQKzLyBInP050AMCBJoEPvShD6cjR45l39m69dG0bdsWPgQIECBAgAABAgQIECBAgEAFBASJFZgEXSBA4LxA8/Jm+yR6MwgQIECAAAECBAgQIECAQHUEBInVmQs9IUAgpTR5efNs75MY/RkdHU0pXZPNz+HDR9OiRV2pu7s7+8iv7u7x78XPzn9v/Odxj/yafK/Tp09nP4rPhw4dnfId6O1dknp7exrP6OnpST098b0l3hsCBAgQIECAAAECBAgQINASAUFiS5g9hACByxFYs+Yf0rPPPpf9ytDQ99K6dfddzq9fdtsI8cYDwzeyoHD848iEAPCyb5pSmjdvXjp79uyV/Grp31m8eHGaP//PUgSLixZ1p/7+5Vm4KGgsTaghAQIECBAgQIAAAQIECJQUECSWhNKMAIHWCezd++O0YcPD2QNnYp/E/fufT/v3H0jPPhufn5+xgU0OEru6urKwL668kjCvbGz+d/7zaBsB56lT56sW42d5lWR8f2zsf9PJk6fS2NjYRccR98/DxbvvXpX6+pZn/3YRIECAAAECBAgQIECAAIHLFRAkXq6Y9gQIzLhAhHurV9+fPeeBBzaknTu/ddXPjCrDHTueTHv3Pp0tI77U1de3rFHdlwdxeQCYL2eOz7FMOT7H/SYvdW4OC6+68yVukIeL8XlkZDQLSPMqy8m/Hn1dt25NimBx7do1E5Zol3iUJgQIECBAgAABAgQIECBQUwFBYk0n3rAJVFlgOoPEqG7csWPnJSsP41CXe+4ZSJ/4xOqOrNYLz9h/McLU+DqWcDdfUaE4OPipLFS052KV/zL0jQABAgQIECBAgAABArMrIEicXX9PJ0DgIgLNS5uXLHl/+sEPdl92wLd791Davv3xKfc5jINKtm3bklXmNR+aUocJiUrFCBTDOZZ3Ny+LjiAx9qSMSlBLoOvwNhgjAQIECBAgQIAAAQIEygsIEstbaUmAQIsEmisS45ER9EXoNzi4fsrQL37n8OFjWUAW4dhUy5fzAHFwcEOLRlP9x+ShYiz7bq5WDPdY/rxp08bU37+sdoFr9WdODwkQIECAAAECBAgQINBaAUFia709jQCBkgJ9fR9MJ078z4TWebVcXkH4ox/tyyoOT548WXjXOOgkwsjNmzcWtq1zg/CMSsXxYPZoI1j8wAduSTfddFNjX0XVinV+S4ydAAECBAgQIECAAIG6CggS6zrzxk2g4gIRYm3Zsi07XflqrggQIzyMj7otYb4at/x3Yx4iWDx48MX06quvNYLFCHUHBlZly6Bjb0UXAQIECBAgQIAAAQIECHS+gCCx8+fYCAm0tcATTzyZnbY8+YCQokFFuBXLlyPock2PQCwXj2Ax5qR5b8U8VAzvCBddBAgQIECAAAECBAgQINCZAoLEzpxXoyLQUQIRYMX+fVEZNzz89ISxzZ07N9144w3pttv+KjscJPb0E2a1Zvpj+fOuXUPZvOQHtkSouGnTp50A3ZopKPWUWK4ef0OnT49ln+PfixZ1ZZ+jSje+zqt1xz+/k97znkVp4cKuxv2jzcUuVb6lpkAjAgQIECBAgAABAh0jIEjsmKk0EAL1EohARIhRjTnPg97du/9jwlL0qAaNU7HvumtVioDRNf0CEQaOjo6mt976bfrDH/6QhYNRNToyMtoIDaf/qVPfMea5p6cnm+/e3p4s3O/rW27+WzkJnkWAAAECBAgQIEBgBgUEiTOI69YECBCom0C+9DmqFZuXo0eVaFSLPvDABqHSFbwU4XrkyNFsSXkeFk51MvkV3H7GfyVC/wgX4x1Yu/Y+p4DPuLgHECBAgAABAgQIEJgZAUHizLi6KwECBGovEEued+8emrCf4rx589L8+fOzSsWoWBwYuFNl6UXelAgJYxl/BIexrP9KQsO+vmVp0aLuRoXg+DLm8UAvv5qreuPr/Dn596PaMf+6qA8RcJ46FUuoxz/GKyOjYvKNC0Z4ww3Xp5tvfl9WtRghc7wH0S9VxrX/zwYAAgQIECBAgACBigsIEis+QbpHgACBdheIUCkCsahS/O53d6czZ96eMKR8b8s4IKfO+1seOHAw7dkznFlFCFd0xYnkK1Ysz5YPX3fddemOO/6msZy46Hdb+fOY/1OnxtLhw0eyccV78Oabb6UTJ16/oBsx//mYLIlv5Sx5FgECBAgQIECAAIFyAoLEck5aESBAgMA0CUSV2vh+ihEuHphw16hIi+WvddlbMSy+//2hzCO+vtTV07Mkc4mwLd9/cJqmZFZuk1ctRuVqjL35JPC8Q/n7kFctRmjqIkCAAAECBAgQIEBg9gQEibNn78kECBCovUAESBEoji/hPX/6c3OQFOFZf39fVnnX37+sI5a/xri//e0ns1Ovp1oyHBWH+SnksQy8DgfWRMViXpE5eZ/NeCcEi7X/TwYAAgQIECBAgACBWRYQJM7yBHg8AQIECJwXiCApAsX4OHLk2EVpxgPFOAl4fH+9dgkXyyxdjr0D16//xz/tH7mq9q9G87L4CBgnvxN1q2Ct/QsBgAABAgQIECBAYNYFBImzPgU6QIAAAQJTCeTVivF5qoM75s6dmxYsWNA4rCOq+OKKCr6enp5L4L6TBZL5NRMHfUQg+txzB7Jg9FJLl+M0682bN07oj7fiQoE8WIwDaC5WsRjzGdWbsd+mZdDeIAIECBAgQIAAAQLTLyBInH5TdyRAgACBGRKIMC4O7RgPFUezwzt+9av/Sm+//X/T8sQIE/MAKg8k49/jIeM72TOaTzGeM2dOOnfuj9ny5OjT+dOKx/t2qSv2PBwc3JAGBz9Vi2XL0zJBk24S5hHS5oHz2NhYo0UEyVGxmgeLM/F89yRAgAABAgQIECBQNwFBYt1m3HgJECDQgQJ5gHfo0NEsYMxDvRhqfN3d3ZVOnx5Lp06dTs1hUyspFi5cmN7//velj3zkw1l4qGJu+vXzUDEqFkdHzx9eE+Fv7LUpVJx+8+m4Y/73Gn+j8becn/Sd3ztC4ZjD+DuOz63YLzT+R0CrnjUdhu5BgAABAgQIEGiVgCCxVdKeQ4AAAQKVE8gDiwgfI2RsriqMn00+VbrsAOKglBUrxvdy7JRTlsuOvSrt8oNb4kTsyXsrRqAYwWIsgZ6JJe1VMahaP+Lva3h4fFn6Cy+8lE6ePJXOnj17Rd3Mw8V3v/vd6cYbb0h9fcuy++RVxVeyd2r06/DhY2nHjn9rbEUwNPS9LIB2ESBAgAABAgQIjAsIEr0JBAgQIECgQCBfSp03i9Axrnnz5qUFC+Y3Aow83ABaLYEIhaNKMSoW49CW5qrU5uXPrah0q5ZMa3oTfz/btz+edu8eas0D//SUmM+bb745nTt3Ln3sY387ITR+663fpl//+lC2NUGEzlOdnr5166Np27YtLe23hxEgQIAAAQIEqiwgSKzy7OgbAQIECBAgMO0CUy2BjuAplp0PDNyZVZK6rl7gq1/91/Sd7+xKb7751tXfbBbuoCJxFtA9kgABAgQIEKi0gCCx0tOjcwQIECBAgMBMCuRLoCcf2BJLZOPAnU2b4jTtZZZAX+YkRBXixo2fy5YxT3Vde+21af7869KcOe/KtgKIK19qPlV17+TKwd///mxWYXrLLX/ZeNaVbkmQ9zMOQoql7/YyvcxJ15wAAQIECBCohYAgsRbTbJAECBAgQIBAkUB+aE8sf46qxXxvxTxUzPe8jIpF19QC4bhy5b2NfQabW8Zehps3f/pPe4cumTHG/IT33/zmeDpx4kRauPDPGyepx9YEc+e+K506NZZuv/2vsxCyt7cnO8Slp2f8s4sAAQIECBAgQODiAoJEbwYBAgQIECBA4CICzXsrjoyMNoLFNWs+nq6//i9Sf39fdmCL4Ok8XpitXn1/I7TLfzJ//vz0zW8+ngYHN3jXCBAgQIAAAQIE2lhAkNjGk6frBAgQIECAQOsEIiTbtWsoHT/+avrlL19sBIsRJMaeirEU+q67VtU6WNyyZVvasWPnhEmJKsSnntpVa5fWvaWeRIAAAQIECBCYWQFB4sz6ujsBAgQIECDQoQKxv2J+cMuhQ0cbp0HnS6EjXBxfDl2PpdBxKnPsi9h8xdj37dvToW+AYREgQIAAAQIE6icgSKzfnBsxAQIECBAgMM0C+f6KESgOD/84TT7wI69YzIPF/FCRae7GrN0u9iS8446BdObMmUYf4tCSgwd/5qCaWZsVDyZAgAABAgQITL+AIHH6Td2RAAECBAgQIJBVK0bVYpxcfLFgMZZEj58M3P6nQq9f/1AaHn66MetdXV3pmWf2ZBWZLgIECBAgQIAAgc4RECR2zlwaCQECBAgQIFBRgahYjNOgI1SMz/mJ0NHdxYsXp/e+d3G2x2JULsZy4HaqWIxqxKVLb5sg/41vPJYeeeSfKjobukWAAAECBAgQIHClAoLEK5XzewQIECBAgACBKxRoDhZ/8pOfpuPHX5twp6jka5dg8StfeTxt3/61Rv83bXokPf74V65Qxq8RIECAAAECBAhUWUCQWOXZ0TcCBAgQIECgFgJ5sLh379PZkuixsbEJ445KxXXr7suqFau0XDiWbq9cee+Evr7yystOaK7FW2uQBAgQIECAQB0FBIl1nHVjJkCAAAECBCotEAFdLIG+2MEtsbdifnjL2rVrZm0ZdCzT3rLlC9k+kPmlGrHSr5XOESBAgAABAgSuWkCQeNWEbkCAAAECBAgQmDmB5mXQUbE4OvrGhIfNxjLoCBE/+cmHJlROOqV55t4BdyZAgAABAgQIVEVAkFiVmdAPAgQIECBAgEAJgTjcJJY/R5jXfFJy/qtRrThTJ0JHqLljx84U+yI2XxEi7tz5raxS0kWAAAECBAgQINC5AoLEzp1bIyNAgAABAgRqIJAvg85PhG7eXzE/Ebq3tycL+SJgbD4R+vjxV9PixTdm3+vu7rrg5wcOHEzHjv13evXV19KhQ0ez8HLytXTprenrX/+qELEG75ohEiBAgAABAgQEid4BAgQIECBAgEAHCUTF4uHDR1Isg37hhRcvOBF6uoba1dWVNm/emH00h5PTdX/3IUCAAAECBAgQqJ6AILF6c6JHBAgQIECAAIFpE8j3WIzKxagojKBx8j6Ll/OwODl67dr7slOko8LRRYAAAQIECBAgUB8BQWJ95tpICRAgQIAAAQINgQgWR0ZGs3/nJy9PXrq8YMGCFJWHH/3ovSkOdYkPFwECBAgQIECAQH0FBIn1nXsjJ0CAAAECBAgQIECAAAECBAgQIFBaQJBYmkpDAgQIECBAgAABAgQIECBAgAABAvUVECTWd+6NnAABAgQIECBAgAABAgQIECBAgEBpAUFiaSoNCRAgQIAAAQIECBAgQIAAAQIECNRXQJBY37k3cgIECBAgQIAAAQIECBAgQIAAAQKlBQSJpak0JECAAAECBAgQIECAAAECBAgQIFBfAUFifefeyAkQIECAAAECBAgQIECAAAECBAiUFhAklqbSkAABAgQIECBAgAABAgQIECBAgEB9BQSJ9Z17IydAgAABAgQIECBAgAABAgQIECBQWkCQWJpKQwIECBAgQIAAAQIECBAgQIAAAQL1FRAk1nfujZwAAQIECBAgQIAAAQIECBAgQIBAaQFBYmkqDQkQIECAAAECBAgQIECAAAECBAjUV0CQWN+5N3ICBAgQIECAAAECBAgQIECAAAECpQUEiaWpNCRAgAABAgQIECBAgAABAgQIECBQXwFBYn3n3sgJECBAgAABAgQIECBAgAABAgQIlBYQJJam0pAAAQIECBAgQIAAAQIECBAgQIBAfQUEifWdeyMnQIAAAQIECBAgQIAAAQIECBAgUFpAkFiaSkMCBAgQIECAAAECBAgQIECAAAEC9RUQJNZ37o2cAAECBAgQIECAAAECBAgQIECAQGkBQWJpKg0JECBAgAABAgQIECBAgAABAgQI1FdAkFjfuTdyAgQIECBAgAABAgQIECBAgAABAqUFBImlqTQkQIAAAQIECBAgQIAAAQIECBAgUF8BQWJ9597ICRAgQIAAAQIECBAgQIAAAQIECJQWECSWptKQAAECBAgQIECAAAECBAgQIECAQH0FBIn1nXsjJ0CAAAECBAgQIECAAAECBAgQIFBaQJBYmkpDAgQIECBAgAABAgQIECBAgAABAvUVECTWd+6NnAABAgQIECBAgAABAgQIECBAgEBpAUFiaSoNCRAgQIAAAQIECBAgQIAAAQIECNRXQJBY37k3cgIECBAgQIAAAQIECBAgQIAAAQKlBQSJpak0JECAAAECBAgQIECAAAECBAgQIFBfAUFifefeyAkQIECAAAECBAgQIECAAAECBAiUFhAklqbSkAABAgQIECBAgAABAgQIECBAgEB9BQSJ9Z17IydAgAABAgQIECBAgAABAgQIECBQWkCQWJpKQwIECBAgQIAAAQIECBAgQIAAAQL1FRAk1nfujZwAAQIECBAgQIAAAQIECBAgQIBAaQFBYmkqDQkQIECAAAECBAgQIECAAAECBAjUV0CQWN+5N3ICBAgQIECAAAECBAgQIECAAAECpQUEiaWpNCRAgAABAgQIECBAgAABAgQIECBQXwFBYn3n3sgJECBAgAABAgQIECBAgAABAgQIlBYQJJam0pAAAQIECBAgQIAAAQIECBAgQIBAfQUEifWdeyMnQIAAAQIECBAgQIAAAQIECBAgUFpAkFiaSkMCBAgQIECAAAECBAgQIECAAAEC9RX4fzJ9q0eG0yOvAAAAAElFTkSuQmCC\",\n    \"cityStateZip\": \"Dallas, TX\",\n    \"marriedButSingle\": false,\n    \"married\": true,\n    \"single\": false,\n    \"homeAddress\": \"212342\",\n    \"ssn\": \"234-23-4242\",\n    \"lastName\": \"Tidwell\",\n    \"firstName\": \"Travis\",\n    \"h\": \"2\",\n    \"g\": \"3\",\n    \"f\": \"4\",\n    \"e\": \"5\",\n    \"d\": \"3\",\n    \"c\": \"4\",\n    \"b\": \"3\",\n    \"a\": \"4\",\n    \"submit\": true,\n    \"status\": \"married\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/{{ projectName }}/form/{{ pdfFormId }}/submission","urlObject":{"path":["{{ projectName }}","form","{{ pdfFormId }}","submission"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"5445159f-fcd0-4c93-8549-12a6eecf7ef7","name":"Create PDF Submission","originalRequest":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"data\": {\n    \"expectedReturn\": \"23\",\n    \"witholdings\": 23,\n    \"allowances\": 23,\n    \"officeCode\": \"234\",\n    \"employersName\": \"Form.io\",\n    \"date\": \"2018-02-23T06:00:00.000Z\",\n    \"signature\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABRIAAACWCAYAAACiuHTbAAAdfElEQVR4Xu3db4xWV50H8NMibMFlBrct1RpmXmxjUmCG3W5rpHRau/5ZqJDtZhPBdNomm92igi+LCaivFNO6UROL2fJGXTA79ZWE0VIT41paxLZ25V/XhJbtTNP6whfAbOhGInbzu+N9eGZguBeYeeY+z/3cZDLDzJl7z/mcO33x7e+cc82ZM797J7kIECBAgAABAgQIECBAgAABAgQIECBwCYFrBIneDwIECBAgQIAAAQIECBAgQIAAAQIEigQEiUVCfk6AAAECBAgQIECAAAECBAgQIECAQBIkegkIECBAgAABAgQIECBAgAABAgQIECgUECQWEmlAgAABAgQIECBAgAABAgQIECBAgIAg0TtAgAABAgQIECBAgAABAgQIECBAgEChgCCxkEgDAgQIECBAgAABAgQIECBAgAABAgQEid4BAgQIECBAgAABAgQIECBAgAABAgQKBQSJhUQaECBAgAABAgQIECBAgAABAgQIECAgSPQOECBAgAABAgQIECBAgAABAgQIECBQKCBILCTSgAABAgQIECBAgAABAgQIECBAgAABQaJ3gAABAgQIECBAgAABAgQIECBAgACBQgFBYiGRBgQIECBAgAABAgQIECBAgAABAgQICBK9AwQIECBAgAABAgQIECBAgAABAgQIFAoIEguJNCBAgAABAgQIECBAgAABAgQIECBAQJDoHSBAgAABAgQIECBAgAABAgQIECBAoFBAkFhIpAEBAgQIECBAgAABAgQIECBAgAABAoJE7wABAgQIECBAgAABAgQIECBAgAABAoUCgsRCIg0IECBAgAABAgQIECBAgAABAgQIEBAkegcIECBAgAABAgQIECBAgAABAgQIECgUECQWEmlAgAABAgQIECBAgAABAgQIECBAgIAg0TtAgAABAgQIECBAgAABAgQIECBAgEChgCCxkEgDAgQIECBAgAABAgQIECBAgAABAgQEid4BAgQIECBAgAABAgQIECBAgAABAgQKBQSJhUQaECBAgAABAgQIECBAgAABAgQIECAgSPQOECBAgAABAgQIECBAgAABAgQIECBQKCBILCTSgAABAgQIECBAgAABAgQIECBAgAABQaJ3gAABAgQIECBAgAABAgQIECBAgACBQgFBYiGRBgQIECBAgAABAgQIECBAgAABAgQICBK9AwQIECBAgAABAgQIECBAgAABAgQIFAoIEguJNCBAgAABAgQIECBAgAABAgQIECBAQJDoHSBAgAABAgQIECBAgAABAgQIECBAoFBAkFhIpAEBAgQIECBAgAABAgQIECBAgAABAoJE7wABAgQIECBAgAABAgQIECBAgAABAoUCgsRCIg0IECBAgAABAgQIECBAgAABAgQIEBAkegcIECBAgAABAgQIECBAgAABAgQIECgUECQWEmlAgAABAgQIECBAgAABAgQIECBAgIAg0TtAgAABAgQIECBAgAABAgQIECBAgEChgCCxkEgDAgQIECBAgAABAgQIECBAgAABAgQEid4BAgQIECBAgAABAgQIECBAgAABAgQKBQSJhUQaECBAgAABAgQIECBAgAABAgQIECAgSPQOECBAgAABAgQIECBAgAABAgQIECBQKCBILCTSgAABAgQIECBAgAABAgQIECBAgAABQaJ3gEDNBUZG3kinT5/OPlK6ZoLGnDnXpnPn/pj2738++/mhQ0ezz4cPH2206+7uTv39y1Nv75J0002L0wc/eHsaGLgzxfddBAgQIECAAAECBAgQIECAQOcICBI7Zy6NhEChQASC+/cfSM8++3waHR1NESLO1BXB4rp196XPfnZjFjK6CBAgQIAAAQIECBAgQIAAgfYWECS29/zpPYFLCkTl4PDw01lwGCHi1V5dXV1pxYrlF9wmKhXHxsamvP3g4Ia0desWgeLVToDfJ0CAAAECBAgQIECAAAECsyggSJxFfI8mMBMCe/f+OH3pS19Or78+ks6ePXvZj8jDwliuvGTJknTPPXdl94h/X+qKJc8RWEZ4mVc+NrePqsTHHvtyVqXoIkCAAAECBAgQIECAAAECBNpPQJDYfnOmxwQuKhBB3vr1D19W5WFPz5IsIDz/0TdtVYPRnyeeeDL7aK5W/Mxn/iV98Yuft4ei95gAAQIECBAgQIAAAQIECLSZgCCxzSZMdwlMJbB69d9n+x9e6urrW5buvntV6u/vSwMDq6YtNLzUM2MfxvXrH0xHjhxrNIuqxKhOtHei95kAAQIECBAgQIAAAQIECLSPgCCxfeZKTwlMKXDrrbel0dELD06ZM2dOWrPm49ly4nXr1sxaFWBUJz744D+nn/70PxtjiBBxaOjfC5dMm3YCBAgQIECAAAECBAgQIECgGgKCxGrMg14QuGKB2JNw5cp7L/j9WLa8b9+eylT95Uudt2//2oS+7tv3w6w60kWAAAECBAgQIECAAAECBAhUW0CQWO350TsChQJxsMnq1fdPaBcHpjzzzJ5KVvvFYTCPPPK5Cfsm/uIXP6tkXwvxNSBAgAABAgQIECBAgAABAjUSECTWaLINtXMFmpc2xz6ITz21qzKViBdTnxx+xmEvUZnY3d3duZNkZAQIECBAgAABAgQIECBAoM0FBIltPoG6TyAXiCXOcUUo1w5XVCZu2PBwo6tbtz6atm3b0g5d10cCBAgQIECAAAECBAgQIFBLAUFiLafdoAlUQ6D5pOl58+aln//8mbYJQqshqBcECBAgQIAAAQIECBAgQKB1AoLE1ll7EgECkwQmL3GO06WHhr7HiQABAgQIECBAgAABAgQIEKiggCCxgpOiSwTqJHDPPX+XXnrp5caQI0iMQNFFgAABAgQIECBAgAABAgQIVEtAkFit+dAbArUTiL0dV668tzHu2OMxTnF2ESBAgAABAgQIECBAgAABAtUSECRWaz70hkAtBdavfygNDz/dGLuqxFq+BgZNgAABAgQIECBAgAABAhUXECRWfIJ0j0AdBCZXJQ4MrEr79v2wDkM3RgIECBAgQIAAAQIECBAg0DYCgsS2mSodJdDZApOrEl955eXU27ukswdtdAQIECBAgAABAgQIECBAoI0EBIltNFm6SqCTBSaf4PzYY19Omzdv7OQhGxsBAgQIECBAgAABAgQIEGgrAUFiW02XzhLobIFbb70tjY6+kQ1yYODOtG/fns4esNERIECAAAECBAgQIECAAIE2EhAkttFk6SqBThd44okn0+c//4XGMM+c+V2nD9n4CBAgQIAAAQIECBAgQIBA2wgIEttmqnSUQOcLjIy8kZYuva0x0DhwJQ5ecREgQIAAAQIECBAgQIAAAQKzLyBInP050AMCBJoEPvShD6cjR45l39m69dG0bdsWPgQIECBAgAABAgQIECBAgEAFBASJFZgEXSBA4LxA8/Jm+yR6MwgQIECAAAECBAgQIECAQHUEBInVmQs9IUAgpTR5efNs75MY/RkdHU0pXZPNz+HDR9OiRV2pu7s7+8iv7u7x78XPzn9v/Odxj/yafK/Tp09nP4rPhw4dnfId6O1dknp7exrP6OnpST098b0l3hsCBAgQIECAAAECBAgQINASAUFiS5g9hACByxFYs+Yf0rPPPpf9ytDQ99K6dfddzq9fdtsI8cYDwzeyoHD848iEAPCyb5pSmjdvXjp79uyV/Grp31m8eHGaP//PUgSLixZ1p/7+5Vm4KGgsTaghAQIECBAgQIAAAQIECJQUECSWhNKMAIHWCezd++O0YcPD2QNnYp/E/fufT/v3H0jPPhufn5+xgU0OEru6urKwL668kjCvbGz+d/7zaBsB56lT56sW42d5lWR8f2zsf9PJk6fS2NjYRccR98/DxbvvXpX6+pZn/3YRIECAAAECBAgQIECAAIHLFRAkXq6Y9gQIzLhAhHurV9+fPeeBBzaknTu/ddXPjCrDHTueTHv3Pp0tI77U1de3rFHdlwdxeQCYL2eOz7FMOT7H/SYvdW4OC6+68yVukIeL8XlkZDQLSPMqy8m/Hn1dt25NimBx7do1E5Zol3iUJgQIECBAgAABAgQIECBQUwFBYk0n3rAJVFlgOoPEqG7csWPnJSsP41CXe+4ZSJ/4xOqOrNYLz9h/McLU+DqWcDdfUaE4OPipLFS052KV/zL0jQABAgQIECBAgAABArMrIEicXX9PJ0DgIgLNS5uXLHl/+sEPdl92wLd791Davv3xKfc5jINKtm3bklXmNR+aUocJiUrFCBTDOZZ3Ny+LjiAx9qSMSlBLoOvwNhgjAQIECBAgQIAAAQIEygsIEstbaUmAQIsEmisS45ER9EXoNzi4fsrQL37n8OFjWUAW4dhUy5fzAHFwcEOLRlP9x+ShYiz7bq5WDPdY/rxp08bU37+sdoFr9WdODwkQIECAAAECBAgQINBaAUFia709jQCBkgJ9fR9MJ078z4TWebVcXkH4ox/tyyoOT548WXjXOOgkwsjNmzcWtq1zg/CMSsXxYPZoI1j8wAduSTfddFNjX0XVinV+S4ydAAECBAgQIECAAIG6CggS6zrzxk2g4gIRYm3Zsi07XflqrggQIzyMj7otYb4at/x3Yx4iWDx48MX06quvNYLFCHUHBlZly6Bjb0UXAQIECBAgQIAAAQIECHS+gCCx8+fYCAm0tcATTzyZnbY8+YCQokFFuBXLlyPock2PQCwXj2Ax5qR5b8U8VAzvCBddBAgQIECAAAECBAgQINCZAoLEzpxXoyLQUQIRYMX+fVEZNzz89ISxzZ07N9144w3pttv+KjscJPb0E2a1Zvpj+fOuXUPZvOQHtkSouGnTp50A3ZopKPWUWK4ef0OnT49ln+PfixZ1ZZ+jSje+zqt1xz+/k97znkVp4cKuxv2jzcUuVb6lpkAjAgQIECBAgAABAh0jIEjsmKk0EAL1EohARIhRjTnPg97du/9jwlL0qAaNU7HvumtVioDRNf0CEQaOjo6mt976bfrDH/6QhYNRNToyMtoIDaf/qVPfMea5p6cnm+/e3p4s3O/rW27+WzkJnkWAAAECBAgQIEBgBgUEiTOI69YECBCom0C+9DmqFZuXo0eVaFSLPvDABqHSFbwU4XrkyNFsSXkeFk51MvkV3H7GfyVC/wgX4x1Yu/Y+p4DPuLgHECBAgAABAgQIEJgZAUHizLi6KwECBGovEEued+8emrCf4rx589L8+fOzSsWoWBwYuFNl6UXelAgJYxl/BIexrP9KQsO+vmVp0aLuRoXg+DLm8UAvv5qreuPr/Dn596PaMf+6qA8RcJ46FUuoxz/GKyOjYvKNC0Z4ww3Xp5tvfl9WtRghc7wH0S9VxrX/zwYAAgQIECBAgACBigsIEis+QbpHgACBdheIUCkCsahS/O53d6czZ96eMKR8b8s4IKfO+1seOHAw7dkznFlFCFd0xYnkK1Ysz5YPX3fddemOO/6msZy46Hdb+fOY/1OnxtLhw0eyccV78Oabb6UTJ16/oBsx//mYLIlv5Sx5FgECBAgQIECAAIFyAoLEck5aESBAgMA0CUSV2vh+ihEuHphw16hIi+WvddlbMSy+//2hzCO+vtTV07Mkc4mwLd9/cJqmZFZuk1ctRuVqjL35JPC8Q/n7kFctRmjqIkCAAAECBAgQIEBg9gQEibNn78kECBCovUAESBEoji/hPX/6c3OQFOFZf39fVnnX37+sI5a/xri//e0ns1Ovp1oyHBWH+SnksQy8DgfWRMViXpE5eZ/NeCcEi7X/TwYAAgQIECBAgACBWRYQJM7yBHg8AQIECJwXiCApAsX4OHLk2EVpxgPFOAl4fH+9dgkXyyxdjr0D16//xz/tH7mq9q9G87L4CBgnvxN1q2Ct/QsBgAABAgQIECBAYNYFBImzPgU6QIAAAQJTCeTVivF5qoM75s6dmxYsWNA4rCOq+OKKCr6enp5L4L6TBZL5NRMHfUQg+txzB7Jg9FJLl+M0682bN07oj7fiQoE8WIwDaC5WsRjzGdWbsd+mZdDeIAIECBAgQIAAAQLTLyBInH5TdyRAgACBGRKIMC4O7RgPFUezwzt+9av/Sm+//X/T8sQIE/MAKg8k49/jIeM72TOaTzGeM2dOOnfuj9ny5OjT+dOKx/t2qSv2PBwc3JAGBz9Vi2XL0zJBk24S5hHS5oHz2NhYo0UEyVGxmgeLM/F89yRAgAABAgQIECBQNwFBYt1m3HgJECDQgQJ5gHfo0NEsYMxDvRhqfN3d3ZVOnx5Lp06dTs1hUyspFi5cmN7//velj3zkw1l4qGJu+vXzUDEqFkdHzx9eE+Fv7LUpVJx+8+m4Y/73Gn+j8becn/Sd3ztC4ZjD+DuOz63YLzT+R0CrnjUdhu5BgAABAgQIEGiVgCCxVdKeQ4AAAQKVE8gDiwgfI2RsriqMn00+VbrsAOKglBUrxvdy7JRTlsuOvSrt8oNb4kTsyXsrRqAYwWIsgZ6JJe1VMahaP+Lva3h4fFn6Cy+8lE6ePJXOnj17Rd3Mw8V3v/vd6cYbb0h9fcuy++RVxVeyd2r06/DhY2nHjn9rbEUwNPS9LIB2ESBAgAABAgQIjAsIEr0JBAgQIECgQCBfSp03i9Axrnnz5qUFC+Y3Aow83ABaLYEIhaNKMSoW49CW5qrU5uXPrah0q5ZMa3oTfz/btz+edu8eas0D//SUmM+bb745nTt3Ln3sY387ITR+663fpl//+lC2NUGEzlOdnr5166Np27YtLe23hxEgQIAAAQIEqiwgSKzy7OgbAQIECBAgMO0CUy2BjuAplp0PDNyZVZK6rl7gq1/91/Sd7+xKb7751tXfbBbuoCJxFtA9kgABAgQIEKi0gCCx0tOjcwQIECBAgMBMCuRLoCcf2BJLZOPAnU2b4jTtZZZAX+YkRBXixo2fy5YxT3Vde+21af7869KcOe/KtgKIK19qPlV17+TKwd///mxWYXrLLX/ZeNaVbkmQ9zMOQoql7/YyvcxJ15wAAQIECBCohYAgsRbTbJAECBAgQIBAkUB+aE8sf46qxXxvxTxUzPe8jIpF19QC4bhy5b2NfQabW8Zehps3f/pPe4cumTHG/IT33/zmeDpx4kRauPDPGyepx9YEc+e+K506NZZuv/2vsxCyt7cnO8Slp2f8s4sAAQIECBAgQODiAoJEbwYBAgQIECBA4CICzXsrjoyMNoLFNWs+nq6//i9Sf39fdmCL4Ok8XpitXn1/I7TLfzJ//vz0zW8+ngYHN3jXCBAgQIAAAQIE2lhAkNjGk6frBAgQIECAQOsEIiTbtWsoHT/+avrlL19sBIsRJMaeirEU+q67VtU6WNyyZVvasWPnhEmJKsSnntpVa5fWvaWeRIAAAQIECBCYWQFB4sz6ujsBAgQIECDQoQKxv2J+cMuhQ0cbp0HnS6EjXBxfDl2PpdBxKnPsi9h8xdj37dvToW+AYREgQIAAAQIE6icgSKzfnBsxAQIECBAgMM0C+f6KESgOD/84TT7wI69YzIPF/FCRae7GrN0u9iS8446BdObMmUYf4tCSgwd/5qCaWZsVDyZAgAABAgQITL+AIHH6Td2RAAECBAgQIJBVK0bVYpxcfLFgMZZEj58M3P6nQq9f/1AaHn66MetdXV3pmWf2ZBWZLgIECBAgQIAAgc4RECR2zlwaCQECBAgQIFBRgahYjNOgI1SMz/mJ0NHdxYsXp/e+d3G2x2JULsZy4HaqWIxqxKVLb5sg/41vPJYeeeSfKjobukWAAAECBAgQIHClAoLEK5XzewQIECBAgACBKxRoDhZ/8pOfpuPHX5twp6jka5dg8StfeTxt3/61Rv83bXokPf74V65Qxq8RIECAAAECBAhUWUCQWOXZ0TcCBAgQIECgFgJ5sLh379PZkuixsbEJ445KxXXr7suqFau0XDiWbq9cee+Evr7yystOaK7FW2uQBAgQIECAQB0FBIl1nHVjJkCAAAECBCotEAFdLIG+2MEtsbdifnjL2rVrZm0ZdCzT3rLlC9k+kPmlGrHSr5XOESBAgAABAgSuWkCQeNWEbkCAAAECBAgQmDmB5mXQUbE4OvrGhIfNxjLoCBE/+cmHJlROOqV55t4BdyZAgAABAgQIVEVAkFiVmdAPAgQIECBAgEAJgTjcJJY/R5jXfFJy/qtRrThTJ0JHqLljx84U+yI2XxEi7tz5raxS0kWAAAECBAgQINC5AoLEzp1bIyNAgAABAgRqIJAvg85PhG7eXzE/Ebq3tycL+SJgbD4R+vjxV9PixTdm3+vu7rrg5wcOHEzHjv13evXV19KhQ0ez8HLytXTprenrX/+qELEG75ohEiBAgAABAgQEid4BAgQIECBAgEAHCUTF4uHDR1Isg37hhRcvOBF6uoba1dWVNm/emH00h5PTdX/3IUCAAAECBAgQqJ6AILF6c6JHBAgQIECAAIFpE8j3WIzKxagojKBx8j6Ll/OwODl67dr7slOko8LRRYAAAQIECBAgUB8BQWJ95tpICRAgQIAAAQINgQgWR0ZGs3/nJy9PXrq8YMGCFJWHH/3ovSkOdYkPFwECBAgQIECAQH0FBIn1nXsjJ0CAAAECBAgQIECAAAECBAgQIFBaQJBYmkpDAgQIECBAgAABAgQIECBAgAABAvUVECTWd+6NnAABAgQIECBAgAABAgQIECBAgEBpAUFiaSoNCRAgQIAAAQIECBAgQIAAAQIECNRXQJBY37k3cgIECBAgQIAAAQIECBAgQIAAAQKlBQSJpak0JECAAAECBAgQIECAAAECBAgQIFBfAUFifefeyAkQIECAAAECBAgQIECAAAECBAiUFhAklqbSkAABAgQIECBAgAABAgQIECBAgEB9BQSJ9Z17IydAgAABAgQIECBAgAABAgQIECBQWkCQWJpKQwIECBAgQIAAAQIECBAgQIAAAQL1FRAk1nfujZwAAQIECBAgQIAAAQIECBAgQIBAaQFBYmkqDQkQIECAAAECBAgQIECAAAECBAjUV0CQWN+5N3ICBAgQIECAAAECBAgQIECAAAECpQUEiaWpNCRAgAABAgQIECBAgAABAgQIECBQXwFBYn3n3sgJECBAgAABAgQIECBAgAABAgQIlBYQJJam0pAAAQIECBAgQIAAAQIECBAgQIBAfQUEifWdeyMnQIAAAQIECBAgQIAAAQIECBAgUFpAkFiaSkMCBAgQIECAAAECBAgQIECAAAEC9RUQJNZ37o2cAAECBAgQIECAAAECBAgQIECAQGkBQWJpKg0JECBAgAABAgQIECBAgAABAgQI1FdAkFjfuTdyAgQIECBAgAABAgQIECBAgAABAqUFBImlqTQkQIAAAQIECBAgQIAAAQIECBAgUF8BQWJ9597ICRAgQIAAAQIECBAgQIAAAQIECJQWECSWptKQAAECBAgQIECAAAECBAgQIECAQH0FBIn1nXsjJ0CAAAECBAgQIECAAAECBAgQIFBaQJBYmkpDAgQIECBAgAABAgQIECBAgAABAvUVECTWd+6NnAABAgQIECBAgAABAgQIECBAgEBpAUFiaSoNCRAgQIAAAQIECBAgQIAAAQIECNRXQJBY37k3cgIECBAgQIAAAQIECBAgQIAAAQKlBQSJpak0JECAAAECBAgQIECAAAECBAgQIFBfAUFifefeyAkQIECAAAECBAgQIECAAAECBAiUFhAklqbSkAABAgQIECBAgAABAgQIECBAgEB9BQSJ9Z17IydAgAABAgQIECBAgAABAgQIECBQWkCQWJpKQwIECBAgQIAAAQIECBAgQIAAAQL1FRAk1nfujZwAAQIECBAgQIAAAQIECBAgQIBAaQFBYmkqDQkQIECAAAECBAgQIECAAAECBAjUV0CQWN+5N3ICBAgQIECAAAECBAgQIECAAAECpQUEiaWpNCRAgAABAgQIECBAgAABAgQIECBQXwFBYn3n3sgJECBAgAABAgQIECBAgAABAgQIlBYQJJam0pAAAQIECBAgQIAAAQIECBAgQIBAfQUEifWdeyMnQIAAAQIECBAgQIAAAQIECBAgUFpAkFiaSkMCBAgQIECAAAECBAgQIECAAAEC9RX4fzJ9q0eG0yOvAAAAAElFTkSuQmCC\",\n    \"cityStateZip\": \"Dallas, TX\",\n    \"marriedButSingle\": false,\n    \"married\": true,\n    \"single\": false,\n    \"homeAddress\": \"212342\",\n    \"ssn\": \"234-23-4242\",\n    \"lastName\": \"Tidwell\",\n    \"firstName\": \"Travis\",\n    \"h\": \"2\",\n    \"g\": \"3\",\n    \"f\": \"4\",\n    \"e\": \"5\",\n    \"d\": \"3\",\n    \"c\": \"4\",\n    \"b\": \"3\",\n    \"a\": \"4\",\n    \"submit\": true,\n    \"status\": \"married\"\n  }\n}","options":{"raw":{"language":"json"}}},"url":"https://forms.example.com/example/form/69dd42ec040fa2cea257a2d0/submission"},"status":"Created","code":201,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:26:41 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"11158"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2b96-dWrkHX9iHC2lfwsyR/D+vNE+zL4\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"form\": \"69dd432a040fa2cea257a2f0\",\n    \"owner\": \"69d6813b040fa2cea257285a\",\n    \"roles\": [],\n    \"access\": [],\n    \"metadata\": {\n        \"headers\": {\n            \"host\": \"forms.example.com\",\n            \"x-real-ip\": \"172.19.0.1\",\n            \"x-forwarded-for\": \"172.19.0.1\",\n            \"x-forwarded-proto\": \"https\",\n            \"connection\": \"close\",\n            \"content-length\": \"10692\",\n            \"content-type\": \"application/json\",\n            \"user-agent\": \"PostmanRuntime/7.53.0\",\n            \"accept\": \"*/*\",\n            \"cache-control\": \"no-cache\",\n            \"accept-encoding\": \"gzip, deflate, br\"\n        }\n    },\n    \"data\": {\n        \"expectedReturn\": \"23\",\n        \"witholdings\": 23,\n        \"allowances\": 23,\n        \"officeCode\": \"234\",\n        \"employersName\": \"Form.io\",\n        \"date\": \"2018-02-23T06:00:00.000Z\",\n        \"signature\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABRIAAACWCAYAAACiuHTbAAAdfElEQVR4Xu3db4xWV50H8NMibMFlBrct1RpmXmxjUmCG3W5rpHRau/5ZqJDtZhPBdNomm92igi+LCaivFNO6UROL2fJGXTA79ZWE0VIT41paxLZ25V/XhJbtTNP6whfAbOhGInbzu+N9eGZguBeYeeY+z/3cZDLDzJl7z/mcO33x7e+cc82ZM797J7kIECBAgAABAgQIECBAgAABAgQIECBwCYFrBIneDwIECBAgQIAAAQIECBAgQIAAAQIEigQEiUVCfk6AAAECBAgQIECAAAECBAgQIECAQBIkegkIECBAgAABAgQIECBAgAABAgQIECgUECQWEmlAgAABAgQIECBAgAABAgQIECBAgIAg0TtAgAABAgQIECBAgAABAgQIECBAgEChgCCxkEgDAgQIECBAgAABAgQIECBAgAABAgQEid4BAgQIECBAgAABAgQIECBAgAABAgQKBQSJhUQaECBAgAABAgQIECBAgAABAgQIECAgSPQOECBAgAABAgQIECBAgAABAgQIECBQKCBILCTSgAABAgQIECBAgAABAgQIECBAgAABQaJ3gAABAgQIECBAgAABAgQIECBAgACBQgFBYiGRBgQIECBAgAABAgQIECBAgAABAgQICBK9AwQIECBAgAABAgQIECBAgAABAgQIFAoIEguJNCBAgAABAgQIECBAgAABAgQIECBAQJDoHSBAgAABAgQIECBAgAABAgQIECBAoFBAkFhIpAEBAgQIECBAgAABAgQIECBAgAABAoJE7wABAgQIECBAgAABAgQIECBAgAABAoUCgsRCIg0IECBAgAABAgQIECBAgAABAgQIEBAkegcIECBAgAABAgQIECBAgAABAgQIECgUECQWEmlAgAABAgQIECBAgAABAgQIECBAgIAg0TtAgAABAgQIECBAgAABAgQIECBAgEChgCCxkEgDAgQIECBAgAABAgQIECBAgAABAgQEid4BAgQIECBAgAABAgQIECBAgAABAgQKBQSJhUQaECBAgAABAgQIECBAgAABAgQIECAgSPQOECBAgAABAgQIECBAgAABAgQIECBQKCBILCTSgAABAgQIECBAgAABAgQIECBAgAABQaJ3gAABAgQIECBAgAABAgQIECBAgACBQgFBYiGRBgQIECBAgAABAgQIECBAgAABAgQICBK9AwQIECBAgAABAgQIECBAgAABAgQIFAoIEguJNCBAgAABAgQIECBAgAABAgQIECBAQJDoHSBAgAABAgQIECBAgAABAgQIECBAoFBAkFhIpAEBAgQIECBAgAABAgQIECBAgAABAoJE7wABAgQIECBAgAABAgQIECBAgAABAoUCgsRCIg0IECBAgAABAgQIECBAgAABAgQIEBAkegcIECBAgAABAgQIECBAgAABAgQIECgUECQWEmlAgAABAgQIECBAgAABAgQIECBAgIAg0TtAgAABAgQIECBAgAABAgQIECBAgEChgCCxkEgDAgQIECBAgAABAgQIECBAgAABAgQEid4BAgQIECBAgAABAgQIECBAgAABAgQKBQSJhUQaECBAgAABAgQIECBAgAABAgQIECAgSPQOECBAgAABAgQIECBAgAABAgQIECBQKCBILCTSgAABAgQIECBAgAABAgQIECBAgAABQaJ3gEDNBUZG3kinT5/OPlK6ZoLGnDnXpnPn/pj2738++/mhQ0ezz4cPH2206+7uTv39y1Nv75J0002L0wc/eHsaGLgzxfddBAgQIECAAAECBAgQIECAQOcICBI7Zy6NhEChQASC+/cfSM8++3waHR1NESLO1BXB4rp196XPfnZjFjK6CBAgQIAAAQIECBAgQIAAgfYWECS29/zpPYFLCkTl4PDw01lwGCHi1V5dXV1pxYrlF9wmKhXHxsamvP3g4Ia0desWgeLVToDfJ0CAAAECBAgQIECAAAECsyggSJxFfI8mMBMCe/f+OH3pS19Or78+ks6ePXvZj8jDwliuvGTJknTPPXdl94h/X+qKJc8RWEZ4mVc+NrePqsTHHvtyVqXoIkCAAAECBAgQIECAAAECBNpPQJDYfnOmxwQuKhBB3vr1D19W5WFPz5IsIDz/0TdtVYPRnyeeeDL7aK5W/Mxn/iV98Yuft4ei95gAAQIECBAgQIAAAQIECLSZgCCxzSZMdwlMJbB69d9n+x9e6urrW5buvntV6u/vSwMDq6YtNLzUM2MfxvXrH0xHjhxrNIuqxKhOtHei95kAAQIECBAgQIAAAQIECLSPgCCxfeZKTwlMKXDrrbel0dELD06ZM2dOWrPm49ly4nXr1sxaFWBUJz744D+nn/70PxtjiBBxaOjfC5dMm3YCBAgQIECAAAECBAgQIECgGgKCxGrMg14QuGKB2JNw5cp7L/j9WLa8b9+eylT95Uudt2//2oS+7tv3w6w60kWAAAECBAgQIECAAAECBAhUW0CQWO350TsChQJxsMnq1fdPaBcHpjzzzJ5KVvvFYTCPPPK5Cfsm/uIXP6tkXwvxNSBAgAABAgQIECBAgAABAjUSECTWaLINtXMFmpc2xz6ITz21qzKViBdTnxx+xmEvUZnY3d3duZNkZAQIECBAgAABAgQIECBAoM0FBIltPoG6TyAXiCXOcUUo1w5XVCZu2PBwo6tbtz6atm3b0g5d10cCBAgQIECAAAECBAgQIFBLAUFiLafdoAlUQ6D5pOl58+aln//8mbYJQqshqBcECBAgQIAAAQIECBAgQKB1AoLE1ll7EgECkwQmL3GO06WHhr7HiQABAgQIECBAgAABAgQIEKiggCCxgpOiSwTqJHDPPX+XXnrp5caQI0iMQNFFgAABAgQIECBAgAABAgQIVEtAkFit+dAbArUTiL0dV668tzHu2OMxTnF2ESBAgAABAgQIECBAgAABAtUSECRWaz70hkAtBdavfygNDz/dGLuqxFq+BgZNgAABAgQIECBAgAABAhUXECRWfIJ0j0AdBCZXJQ4MrEr79v2wDkM3RgIECBAgQIAAAQIECBAg0DYCgsS2mSodJdDZApOrEl955eXU27ukswdtdAQIECBAgAABAgQIECBAoI0EBIltNFm6SqCTBSaf4PzYY19Omzdv7OQhGxsBAgQIECBAgAABAgQIEGgrAUFiW02XzhLobIFbb70tjY6+kQ1yYODOtG/fns4esNERIECAAAECBAgQIECAAIE2EhAkttFk6SqBThd44okn0+c//4XGMM+c+V2nD9n4CBAgQIAAAQIECBAgQIBA2wgIEttmqnSUQOcLjIy8kZYuva0x0DhwJQ5ecREgQIAAAQIECBAgQIAAAQKzLyBInP050AMCBJoEPvShD6cjR45l39m69dG0bdsWPgQIECBAgAABAgQIECBAgEAFBASJFZgEXSBA4LxA8/Jm+yR6MwgQIECAAAECBAgQIECAQHUEBInVmQs9IUAgpTR5efNs75MY/RkdHU0pXZPNz+HDR9OiRV2pu7s7+8iv7u7x78XPzn9v/Odxj/yafK/Tp09nP4rPhw4dnfId6O1dknp7exrP6OnpST098b0l3hsCBAgQIECAAAECBAgQINASAUFiS5g9hACByxFYs+Yf0rPPPpf9ytDQ99K6dfddzq9fdtsI8cYDwzeyoHD848iEAPCyb5pSmjdvXjp79uyV/Grp31m8eHGaP//PUgSLixZ1p/7+5Vm4KGgsTaghAQIECBAgQIAAAQIECJQUECSWhNKMAIHWCezd++O0YcPD2QNnYp/E/fufT/v3H0jPPhufn5+xgU0OEru6urKwL668kjCvbGz+d/7zaBsB56lT56sW42d5lWR8f2zsf9PJk6fS2NjYRccR98/DxbvvXpX6+pZn/3YRIECAAAECBAgQIECAAIHLFRAkXq6Y9gQIzLhAhHurV9+fPeeBBzaknTu/ddXPjCrDHTueTHv3Pp0tI77U1de3rFHdlwdxeQCYL2eOz7FMOT7H/SYvdW4OC6+68yVukIeL8XlkZDQLSPMqy8m/Hn1dt25NimBx7do1E5Zol3iUJgQIECBAgAABAgQIECBQUwFBYk0n3rAJVFlgOoPEqG7csWPnJSsP41CXe+4ZSJ/4xOqOrNYLz9h/McLU+DqWcDdfUaE4OPipLFS052KV/zL0jQABAgQIECBAgAABArMrIEicXX9PJ0DgIgLNS5uXLHl/+sEPdl92wLd791Davv3xKfc5jINKtm3bklXmNR+aUocJiUrFCBTDOZZ3Ny+LjiAx9qSMSlBLoOvwNhgjAQIECBAgQIAAAQIEygsIEstbaUmAQIsEmisS45ER9EXoNzi4fsrQL37n8OFjWUAW4dhUy5fzAHFwcEOLRlP9x+ShYiz7bq5WDPdY/rxp08bU37+sdoFr9WdODwkQIECAAAECBAgQINBaAUFia709jQCBkgJ9fR9MJ078z4TWebVcXkH4ox/tyyoOT548WXjXOOgkwsjNmzcWtq1zg/CMSsXxYPZoI1j8wAduSTfddFNjX0XVinV+S4ydAAECBAgQIECAAIG6CggS6zrzxk2g4gIRYm3Zsi07XflqrggQIzyMj7otYb4at/x3Yx4iWDx48MX06quvNYLFCHUHBlZly6Bjb0UXAQIECBAgQIAAAQIECHS+gCCx8+fYCAm0tcATTzyZnbY8+YCQokFFuBXLlyPock2PQCwXj2Ax5qR5b8U8VAzvCBddBAgQIECAAAECBAgQINCZAoLEzpxXoyLQUQIRYMX+fVEZNzz89ISxzZ07N9144w3pttv+KjscJPb0E2a1Zvpj+fOuXUPZvOQHtkSouGnTp50A3ZopKPWUWK4ef0OnT49ln+PfixZ1ZZ+jSje+zqt1xz+/k97znkVp4cKuxv2jzcUuVb6lpkAjAgQIECBAgAABAh0jIEjsmKk0EAL1EohARIhRjTnPg97du/9jwlL0qAaNU7HvumtVioDRNf0CEQaOjo6mt976bfrDH/6QhYNRNToyMtoIDaf/qVPfMea5p6cnm+/e3p4s3O/rW27+WzkJnkWAAAECBAgQIEBgBgUEiTOI69YECBCom0C+9DmqFZuXo0eVaFSLPvDABqHSFbwU4XrkyNFsSXkeFk51MvkV3H7GfyVC/wgX4x1Yu/Y+p4DPuLgHECBAgAABAgQIEJgZAUHizLi6KwECBGovEEued+8emrCf4rx589L8+fOzSsWoWBwYuFNl6UXelAgJYxl/BIexrP9KQsO+vmVp0aLuRoXg+DLm8UAvv5qreuPr/Dn596PaMf+6qA8RcJ46FUuoxz/GKyOjYvKNC0Z4ww3Xp5tvfl9WtRghc7wH0S9VxrX/zwYAAgQIECBAgACBigsIEis+QbpHgACBdheIUCkCsahS/O53d6czZ96eMKR8b8s4IKfO+1seOHAw7dkznFlFCFd0xYnkK1Ysz5YPX3fddemOO/6msZy46Hdb+fOY/1OnxtLhw0eyccV78Oabb6UTJ16/oBsx//mYLIlv5Sx5FgECBAgQIECAAIFyAoLEck5aESBAgMA0CUSV2vh+ihEuHphw16hIi+WvddlbMSy+//2hzCO+vtTV07Mkc4mwLd9/cJqmZFZuk1ctRuVqjL35JPC8Q/n7kFctRmjqIkCAAAECBAgQIEBg9gQEibNn78kECBCovUAESBEoji/hPX/6c3OQFOFZf39fVnnX37+sI5a/xri//e0ns1Ovp1oyHBWH+SnksQy8DgfWRMViXpE5eZ/NeCcEi7X/TwYAAgQIECBAgACBWRYQJM7yBHg8AQIECJwXiCApAsX4OHLk2EVpxgPFOAl4fH+9dgkXyyxdjr0D16//xz/tH7mq9q9G87L4CBgnvxN1q2Ct/QsBgAABAgQIECBAYNYFBImzPgU6QIAAAQJTCeTVivF5qoM75s6dmxYsWNA4rCOq+OKKCr6enp5L4L6TBZL5NRMHfUQg+txzB7Jg9FJLl+M0682bN07oj7fiQoE8WIwDaC5WsRjzGdWbsd+mZdDeIAIECBAgQIAAAQLTLyBInH5TdyRAgACBGRKIMC4O7RgPFUezwzt+9av/Sm+//X/T8sQIE/MAKg8k49/jIeM72TOaTzGeM2dOOnfuj9ny5OjT+dOKx/t2qSv2PBwc3JAGBz9Vi2XL0zJBk24S5hHS5oHz2NhYo0UEyVGxmgeLM/F89yRAgAABAgQIECBQNwFBYt1m3HgJECDQgQJ5gHfo0NEsYMxDvRhqfN3d3ZVOnx5Lp06dTs1hUyspFi5cmN7//velj3zkw1l4qGJu+vXzUDEqFkdHzx9eE+Fv7LUpVJx+8+m4Y/73Gn+j8becn/Sd3ztC4ZjD+DuOz63YLzT+R0CrnjUdhu5BgAABAgQIEGiVgCCxVdKeQ4AAAQKVE8gDiwgfI2RsriqMn00+VbrsAOKglBUrxvdy7JRTlsuOvSrt8oNb4kTsyXsrRqAYwWIsgZ6JJe1VMahaP+Lva3h4fFn6Cy+8lE6ePJXOnj17Rd3Mw8V3v/vd6cYbb0h9fcuy++RVxVeyd2r06/DhY2nHjn9rbEUwNPS9LIB2ESBAgAABAgQIjAsIEr0JBAgQIECgQCBfSp03i9Axrnnz5qUFC+Y3Aow83ABaLYEIhaNKMSoW49CW5qrU5uXPrah0q5ZMa3oTfz/btz+edu8eas0D//SUmM+bb745nTt3Ln3sY387ITR+663fpl//+lC2NUGEzlOdnr5166Np27YtLe23hxEgQIAAAQIEqiwgSKzy7OgbAQIECBAgMO0CUy2BjuAplp0PDNyZVZK6rl7gq1/91/Sd7+xKb7751tXfbBbuoCJxFtA9kgABAgQIEKi0gCCx0tOjcwQIECBAgMBMCuRLoCcf2BJLZOPAnU2b4jTtZZZAX+YkRBXixo2fy5YxT3Vde+21af7869KcOe/KtgKIK19qPlV17+TKwd///mxWYXrLLX/ZeNaVbkmQ9zMOQoql7/YyvcxJ15wAAQIECBCohYAgsRbTbJAECBAgQIBAkUB+aE8sf46qxXxvxTxUzPe8jIpF19QC4bhy5b2NfQabW8Zehps3f/pPe4cumTHG/IT33/zmeDpx4kRauPDPGyepx9YEc+e+K506NZZuv/2vsxCyt7cnO8Slp2f8s4sAAQIECBAgQODiAoJEbwYBAgQIECBA4CICzXsrjoyMNoLFNWs+nq6//i9Sf39fdmCL4Ok8XpitXn1/I7TLfzJ//vz0zW8+ngYHN3jXCBAgQIAAAQIE2lhAkNjGk6frBAgQIECAQOsEIiTbtWsoHT/+avrlL19sBIsRJMaeirEU+q67VtU6WNyyZVvasWPnhEmJKsSnntpVa5fWvaWeRIAAAQIECBCYWQFB4sz6ujsBAgQIECDQoQKxv2J+cMuhQ0cbp0HnS6EjXBxfDl2PpdBxKnPsi9h8xdj37dvToW+AYREgQIAAAQIE6icgSKzfnBsxAQIECBAgMM0C+f6KESgOD/84TT7wI69YzIPF/FCRae7GrN0u9iS8446BdObMmUYf4tCSgwd/5qCaWZsVDyZAgAABAgQITL+AIHH6Td2RAAECBAgQIJBVK0bVYpxcfLFgMZZEj58M3P6nQq9f/1AaHn66MetdXV3pmWf2ZBWZLgIECBAgQIAAgc4RECR2zlwaCQECBAgQIFBRgahYjNOgI1SMz/mJ0NHdxYsXp/e+d3G2x2JULsZy4HaqWIxqxKVLb5sg/41vPJYeeeSfKjobukWAAAECBAgQIHClAoLEK5XzewQIECBAgACBKxRoDhZ/8pOfpuPHX5twp6jka5dg8StfeTxt3/61Rv83bXokPf74V65Qxq8RIECAAAECBAhUWUCQWOXZ0TcCBAgQIECgFgJ5sLh379PZkuixsbEJ445KxXXr7suqFau0XDiWbq9cee+Evr7yystOaK7FW2uQBAgQIECAQB0FBIl1nHVjJkCAAAECBCotEAFdLIG+2MEtsbdifnjL2rVrZm0ZdCzT3rLlC9k+kPmlGrHSr5XOESBAgAABAgSuWkCQeNWEbkCAAAECBAgQmDmB5mXQUbE4OvrGhIfNxjLoCBE/+cmHJlROOqV55t4BdyZAgAABAgQIVEVAkFiVmdAPAgQIECBAgEAJgTjcJJY/R5jXfFJy/qtRrThTJ0JHqLljx84U+yI2XxEi7tz5raxS0kWAAAECBAgQINC5AoLEzp1bIyNAgAABAgRqIJAvg85PhG7eXzE/Ebq3tycL+SJgbD4R+vjxV9PixTdm3+vu7rrg5wcOHEzHjv13evXV19KhQ0ez8HLytXTprenrX/+qELEG75ohEiBAgAABAgQEid4BAgQIECBAgEAHCUTF4uHDR1Isg37hhRcvOBF6uoba1dWVNm/emH00h5PTdX/3IUCAAAECBAgQqJ6AILF6c6JHBAgQIECAAIFpE8j3WIzKxagojKBx8j6Ll/OwODl67dr7slOko8LRRYAAAQIECBAgUB8BQWJ95tpICRAgQIAAAQINgQgWR0ZGs3/nJy9PXrq8YMGCFJWHH/3ovSkOdYkPFwECBAgQIECAQH0FBIn1nXsjJ0CAAAECBAgQIECAAAECBAgQIFBaQJBYmkpDAgQIECBAgAABAgQIECBAgAABAvUVECTWd+6NnAABAgQIECBAgAABAgQIECBAgEBpAUFiaSoNCRAgQIAAAQIECBAgQIAAAQIECNRXQJBY37k3cgIECBAgQIAAAQIECBAgQIAAAQKlBQSJpak0JECAAAECBAgQIECAAAECBAgQIFBfAUFifefeyAkQIECAAAECBAgQIECAAAECBAiUFhAklqbSkAABAgQIECBAgAABAgQIECBAgEB9BQSJ9Z17IydAgAABAgQIECBAgAABAgQIECBQWkCQWJpKQwIECBAgQIAAAQIECBAgQIAAAQL1FRAk1nfujZwAAQIECBAgQIAAAQIECBAgQIBAaQFBYmkqDQkQIECAAAECBAgQIECAAAECBAjUV0CQWN+5N3ICBAgQIECAAAECBAgQIECAAAECpQUEiaWpNCRAgAABAgQIECBAgAABAgQIECBQXwFBYn3n3sgJECBAgAABAgQIECBAgAABAgQIlBYQJJam0pAAAQIECBAgQIAAAQIECBAgQIBAfQUEifWdeyMnQIAAAQIECBAgQIAAAQIECBAgUFpAkFiaSkMCBAgQIECAAAECBAgQIECAAAEC9RUQJNZ37o2cAAECBAgQIECAAAECBAgQIECAQGkBQWJpKg0JECBAgAABAgQIECBAgAABAgQI1FdAkFjfuTdyAgQIECBAgAABAgQIECBAgAABAqUFBImlqTQkQIAAAQIECBAgQIAAAQIECBAgUF8BQWJ9597ICRAgQIAAAQIECBAgQIAAAQIECJQWECSWptKQAAECBAgQIECAAAECBAgQIECAQH0FBIn1nXsjJ0CAAAECBAgQIECAAAECBAgQIFBaQJBYmkpDAgQIECBAgAABAgQIECBAgAABAvUVECTWd+6NnAABAgQIECBAgAABAgQIECBAgEBpAUFiaSoNCRAgQIAAAQIECBAgQIAAAQIECNRXQJBY37k3cgIECBAgQIAAAQIECBAgQIAAAQKlBQSJpak0JECAAAECBAgQIECAAAECBAgQIFBfAUFifefeyAkQIECAAAECBAgQIECAAAECBAiUFhAklqbSkAABAgQIECBAgAABAgQIECBAgEB9BQSJ9Z17IydAgAABAgQIECBAgAABAgQIECBQWkCQWJpKQwIECBAgQIAAAQIECBAgQIAAAQL1FRAk1nfujZwAAQIECBAgQIAAAQIECBAgQIBAaQFBYmkqDQkQIECAAAECBAgQIECAAAECBAjUV0CQWN+5N3ICBAgQIECAAAECBAgQIECAAAECpQUEiaWpNCRAgAABAgQIECBAgAABAgQIECBQXwFBYn3n3sgJECBAgAABAgQIECBAgAABAgQIlBYQJJam0pAAAQIECBAgQIAAAQIECBAgQIBAfQUEifWdeyMnQIAAAQIECBAgQIAAAQIECBAgUFpAkFiaSkMCBAgQIECAAAECBAgQIECAAAEC9RX4fzJ9q0eG0yOvAAAAAElFTkSuQmCC\",\n        \"cityStateZip\": \"Dallas, TX\",\n        \"status\": \"married\",\n        \"homeAddress\": \"212342\",\n        \"ssn\": \"234-23-4242\",\n        \"lastName\": \"Tidwell\",\n        \"firstName\": \"Travis\",\n        \"h\": \"2\",\n        \"g\": \"3\",\n        \"f\": \"4\",\n        \"e\": \"5\",\n        \"d\": \"3\",\n        \"c\": \"4\",\n        \"b\": \"3\",\n        \"a\": \"4\",\n        \"submit\": true\n    },\n    \"_id\": \"69dd4371040fa2cea257a313\",\n    \"_fvid\": 0,\n    \"project\": \"69d65f4e040fa2cea257224d\",\n    \"state\": \"submitted\",\n    \"eSignatures\": [],\n    \"externalIds\": [],\n    \"created\": \"2026-04-13T19:26:41.269Z\",\n    \"modified\": \"2026-04-13T19:26:41.270Z\"\n}"}],"_postman_id":"608aa65c-8fe8-4ee0-ace1-aa22a6503adc"},{"name":"Create PDF Form with Submission","id":"81856c54-4697-4822-a3d8-fab153c5bbc9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"raw","raw":"{\n  \"form\": {\n    \"title\": \"My custom form\",\n    \"components\": [\n      {\n        \"type\": \"textfield\",\n        \"key\": \"firstName\",\n        \"label\": \"First Name\",\n        \"input\": true\n      },\n      {\n        \"type\": \"textfield\",\n        \"key\": \"lastName\",\n        \"label\": \"Last Name\",\n        \"input\": true\n      }\n    ]\n  },\n  \"submission\": {\n    \"data\": {\n      \"firstName\": \"Joe\",\n      \"lastName\": \"Smith\"\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ baseUrl }}/pdf-proxy/pdf/{{ projectId }}/download","description":"<p>This request allows you to provide both the Form JSON and the Submission JSON to the PDF Server, which ultimately allows you to create a PDF of any form populated with any submission.</p>\n","urlObject":{"path":["pdf-proxy","pdf","{{ projectId }}","download"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"81856c54-4697-4822-a3d8-fab153c5bbc9"},{"name":"Get a temporary download token","event":[{"listen":"test","script":{"id":"0d2975d9-3abf-40ba-9cdc-f5d5f9240a15","exec":["pm.environment.set(\" downloadToken \", pm.response.json().key);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"842e0c6d-76f6-4eb0-b22d-de8fded1fc70","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-allow","value":"GET:/project/{{ projectId }}/form/{{ pdfFormId }}/submission/{{ pdfSubmissionId }}/download"},{"key":"x-expire","value":"3600"},{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"{{ baseUrl }}/{{ projectName }}/token","urlObject":{"path":["{{ projectName }}","token"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"c5c05666-f517-478e-9940-56fe0e632371","name":"Get a temporary download token","originalRequest":{"method":"GET","header":[{"key":"x-allow","value":"GET:/project/69dfb6dcbb04c38a91029771/form/69dd42ec040fa2cea257a2d0/submission/69dd4371040fa2cea257a313/download"},{"key":"x-expire","value":"3600"},{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"url":"https://forms.example.com/example/token"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:31:20 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"731"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src * forms.example.com https://forms.example.com;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2db-QdPeqRvUFBMoKMPbiZ9Kby8pq+c\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7Il9pZCI6IjY5ZDY4MTNiMDQwZmEyY2VhMjU3Mjg1YSJ9LCJpc3MiOiJodHRwOi8vZm9ybS5sb2NhbCIsInN1YiI6IjY5ZDY4MTNiMDQwZmEyY2VhMjU3Mjg1YSIsImp0aSI6IjY5ZDY4MmY2MDQwZmEyY2VhMjU3MjkyYiIsImlhdCI6MTc3NTY2NTkxMCwiZm9ybSI6eyJfaWQiOiI2OWQ2NWY0ZTA0MGZhMmNlYTI1NzIyNjciLCJwcm9qZWN0IjoiNjlkNjVmNGUwNDBmYTJjZWEyNTcyMjRkIn0sInByb2plY3QiOnsiX2lkIjoiNjlkNjVmNGUwNDBmYTJjZWEyNTcyMjRkIn0sImFsbG93IjoiR0VUOi9wcm9qZWN0LzY5ZDY1ZjRlMDQwZmEyY2VhMjU3MjI0ZC9mb3JtLzY5ZGQ0MzJhMDQwZmEyY2VhMjU3YTJmMC9zdWJtaXNzaW9uLzY5ZGQ0NDZkMDQwZmEyY2VhMjU3YTM2Yi9kb3dubG9hZCIsInRlbXBUb2tlbiI6dHJ1ZSwiaXNBZG1pbiI6ZmFsc2UsImV4cCI6MTc3NTY2OTUxMH0.QT9wrvxR-lc7bgCo-ioEBcDr5nQM_O6yrLi9cgD31IM\",\n    \"key\": \"mkLgP59B8OemqgCivVCCufDP7TOIRz\"\n}"}],"_postman_id":"842e0c6d-76f6-4eb0-b22d-de8fded1fc70"},{"name":"Download a Submission as a PDF","id":"0b370369-c0f9-4974-a74c-b14632a14db4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{ baseUrl }}/{{ projectName }}/form/{{ pdfFormId }}/submission/{{ pdfSubmissionId }}/download?token={{ downloadToken }}","urlObject":{"path":["{{ projectName }}","form","{{ pdfFormId }}","submission","{{ pdfSubmissionId }}","download"],"host":["{{ baseUrl }}"],"query":[{"key":"token","value":"{{ downloadToken }}"}],"variable":[]}},"response":[],"_postman_id":"0b370369-c0f9-4974-a74c-b14632a14db4"},{"name":"Delete a specific PDF upload","id":"227335d7-411f-4407-b614-1fc31e0cdac8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"formdata","formdata":[]},"url":"{{ baseUrl }}/pdf-proxy/pdf/{{ projectId }}/file/{{ pdfFileName }}","urlObject":{"path":["pdf-proxy","pdf","{{ projectId }}","file","{{ pdfFileName }}"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"58db8c99-e42c-4e4e-838d-a5de820d2a4a","name":"Delete a specific PDF upload","originalRequest":{"method":"DELETE","header":[{"key":"x-jwt-token","value":"{{ projectAdminJWT }}"}],"body":{"mode":"formdata","formdata":[]},"url":"https://forms.example.com/pdf-proxy/pdf/69dfb6dcbb04c38a91029771/file/7b45f38b-dc26-5b1d-aa33-947522157c57"},"status":"No Content","code":204,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:33:39 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src * blob: data:;script-src * 'unsafe-inline' 'unsafe-eval' data:;style-src * 'unsafe-inline' data:;font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=15552000; includeSubDomains"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"Access-Control-Expose-Headers","value":"x-jwt-token"},{"key":"x-jwt-token","value":"--- JWT TOKEN ---"},{"key":"access-control-allow-headers","value":"*"},{"key":"access-control-allow-origin","value":"*"},{"key":"etag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""},{"key":"x-powered-by","value":"Express"},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"227335d7-411f-4407-b614-1fc31e0cdac8"}],"id":"8d33e439-01e8-4db1-8b3e-8f4fce2c7548","description":"<p><em><strong>NOTE: This section covers client-to-server requests. If you want to perform server-to-server requests, see PDF server direct API section</strong></em></p>\n<p>The Form.io platform also provides a robust PDF generation platform and a complete API to generate new PDF documents, or upload existing PDF's.</p>\n","event":[{"listen":"prerequest","script":{"id":"3adf4c0a-1c94-4d64-a360-9a505677bf64","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"077b62f7-9b05-4931-bbf2-172ee9d3237d","type":"text/javascript","exec":[""]}}],"_postman_id":"8d33e439-01e8-4db1-8b3e-8f4fce2c7548"},{"name":"PDF server direct API","item":[{"name":"Upload PDF file to server","event":[{"listen":"test","script":{"id":"b37e6335-d1ca-4d13-8622-183fb7dc0680","exec":["pm.environment.set(\" pdfFileName \", pm.response.json().file);","pm.environment.set(\" pdfFilePath \", pm.response.json().path);"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"fc84afc9-d7af-4621-bb97-288a64978107","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-admin-key","value":"{{ pdfAdminKey }}"}],"body":{"mode":"formdata","formdata":[{"key":"file","type":"file","src":"postman-cloud:///1ef00ed5-6f96-49d0-a3f8-04ca12095b82"}]},"url":"{{ pdfServer }}/pdf/{{ projectId }}/file","description":"<p>This request is able to upload a PDF file to the files server and store it in the database.</p>\n","urlObject":{"path":["pdf","{{ projectId }}","file"],"host":["{{ pdfServer }}"],"query":[],"variable":[]}},"response":[{"id":"04b97a05-8d10-4834-a1bf-99e520720280","name":"Upload PDF file to server","originalRequest":{"method":"POST","header":[{"key":"x-admin-key","value":"{{ pdfAdminKey }}"}],"body":{"mode":"formdata","formdata":[{"key":"file","type":"file","src":"postman-cloud:///1ef00ed5-6f96-49d0-a3f8-04ca12095b82"}]},"url":"{{ pdfServer }}/pdf/69dfb6dcbb04c38a91029771/file"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:43:21 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"5305"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"14b9-yNFd+eAo/j2haIk7Gav6msZlr14\""}],"cookie":[],"responseTime":null,"body":"{\n    \"path\": \"/pdf/69d65f4e040fa2cea257224d/file/3bb1193e-3009-57f2-bd93-f11b175add6e\",\n    \"file\": \"3bb1193e-3009-57f2-bd93-f11b175add6e\",\n    \"formfields\": {\n        \"components\": [\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1010\",\n                \"label\": \"f1_01[0]\",\n                \"overlay\": {\n                    \"width\": 317.2850000000001,\n                    \"height\": 24.921779999999856,\n                    \"top\": 167.31822000000017,\n                    \"left\": 168.388,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1020\",\n                \"label\": \"f1_02[0]\",\n                \"overlay\": {\n                    \"width\": 355.73299999999995,\n                    \"height\": 24.921779999999856,\n                    \"top\": 167.31822000000017,\n                    \"left\": 488.78800000000007,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1030\",\n                \"label\": \"f1_03[0]\",\n                \"overlay\": {\n                    \"width\": 676.133,\n                    \"height\": 24.921780000000187,\n                    \"top\": 210.04000000000008,\n                    \"left\": 168.388,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1040\",\n                \"label\": \"f1_04[0]\",\n                \"overlay\": {\n                    \"width\": 676.133,\n                    \"height\": 24.92178000000001,\n                    \"top\": 252.76178000000016,\n                    \"left\": 168.388,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1050\",\n                \"label\": \"f1_05[0]\",\n                \"overlay\": {\n                    \"width\": 177.64400000000012,\n                    \"height\": 24.921779999999856,\n                    \"top\": 167.31822000000017,\n                    \"left\": 847.6359999999999,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"value\": \"1\",\n                \"type\": \"checkbox\",\n                \"key\": \"c110\",\n                \"label\": \"c1_1[0]\",\n                \"overlay\": {\n                    \"width\": 14.24,\n                    \"height\": 14.239999999999899,\n                    \"top\": 281.23643999999996,\n                    \"left\": 205.056,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"value\": \"2\",\n                \"type\": \"checkbox\",\n                \"key\": \"c111\",\n                \"label\": \"c1_1[1]\",\n                \"overlay\": {\n                    \"width\": 14.24,\n                    \"height\": 14.239999999999899,\n                    \"top\": 302.6000000000001,\n                    \"left\": 205.056,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"value\": \"3\",\n                \"type\": \"checkbox\",\n                \"key\": \"c112\",\n                \"label\": \"c1_1[2]\",\n                \"overlay\": {\n                    \"width\": 14.24,\n                    \"height\": 14.239999999999899,\n                    \"top\": 323.51321999999993,\n                    \"left\": 205.056,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"value\": \"1\",\n                \"type\": \"checkbox\",\n                \"key\": \"c120\",\n                \"label\": \"c1_2[0]\",\n                \"overlay\": {\n                    \"width\": 14.24,\n                    \"height\": 14.239999999999899,\n                    \"top\": 591.8500000000001,\n                    \"left\": 1003.92,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1060\",\n                \"label\": \"f1_06[0]\",\n                \"overlay\": {\n                    \"width\": 113.9200000000001,\n                    \"height\": 21.358219999999942,\n                    \"top\": 715.5617800000001,\n                    \"left\": 731.9359999999999,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1070\",\n                \"label\": \"f1_07[0]\",\n                \"overlay\": {\n                    \"width\": 113.9200000000001,\n                    \"height\": 21.358220000000145,\n                    \"top\": 747.60178,\n                    \"left\": 731.9359999999999,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1090\",\n                \"label\": \"f1_09[0]\",\n                \"overlay\": {\n                    \"width\": 113.92,\n                    \"height\": 21.35821999999974,\n                    \"top\": 801.0000000000001,\n                    \"left\": 911.36,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1100\",\n                \"label\": \"f1_10[0]\",\n                \"overlay\": {\n                    \"width\": 113.92,\n                    \"height\": 21.358219999999942,\n                    \"top\": 865.08,\n                    \"left\": 911.36,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1110\",\n                \"label\": \"f1_11[0]\",\n                \"overlay\": {\n                    \"width\": 113.92,\n                    \"height\": 21.35821999999984,\n                    \"top\": 939.84178,\n                    \"left\": 911.36,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1120\",\n                \"label\": \"f1_12[0]\",\n                \"overlay\": {\n                    \"width\": 113.92,\n                    \"height\": 21.35821999999984,\n                    \"top\": 982.55822,\n                    \"left\": 911.36,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textarea\",\n                \"key\": \"f1130\",\n                \"label\": \"f1_13[0]\",\n                \"overlay\": {\n                    \"width\": 522.3410000000001,\n                    \"height\": 58.73822000000004,\n                    \"top\": 1180.1399999999999,\n                    \"left\": 168.388,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1140\",\n                \"label\": \"f1_14[0]\",\n                \"overlay\": {\n                    \"width\": 137.861,\n                    \"height\": 24.91821999999984,\n                    \"top\": 1213.96,\n                    \"left\": 693.844,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f1150\",\n                \"label\": \"f1_15[0]\",\n                \"overlay\": {\n                    \"width\": 190.46,\n                    \"height\": 24.91821999999984,\n                    \"top\": 1213.96,\n                    \"left\": 834.82,\n                    \"page\": 1,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3010\",\n                \"label\": \"f3_01[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.35821999999979,\n                    \"top\": 309.71822000000003,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3020\",\n                \"label\": \"f3_02[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000195,\n                    \"top\": 448.55999999999995,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3030\",\n                \"label\": \"f3_03[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358219999999942,\n                    \"top\": 544.6800000000001,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3040\",\n                \"label\": \"f3_04[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.35821999999984,\n                    \"top\": 576.7200000000001,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3050\",\n                \"label\": \"f3_05[0]\",\n                \"overlay\": {\n                    \"width\": 128.16,\n                    \"height\": 21.358219999999942,\n                    \"top\": 630.1182200000001,\n                    \"left\": 897.12,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3060\",\n                \"label\": \"f3_06[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000042,\n                    \"top\": 704.88,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3070\",\n                \"label\": \"f3_07[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000042,\n                    \"top\": 833.04,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3080\",\n                \"label\": \"f3_08[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358219999999942,\n                    \"top\": 886.43822,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3090\",\n                \"label\": \"f3_09[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000244,\n                    \"top\": 961.1999999999998,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3100\",\n                \"label\": \"f3_10[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000244,\n                    \"top\": 1014.5982199999999,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            },\n            {\n                \"type\": \"textfield\",\n                \"key\": \"f3110\",\n                \"label\": \"f3_11[0]\",\n                \"overlay\": {\n                    \"width\": 115.34400000000012,\n                    \"height\": 21.358220000000244,\n                    \"top\": 1046.6382199999998,\n                    \"left\": 909.9359999999999,\n                    \"page\": 3,\n                    \"style\": \"\"\n                }\n            }\n        ]\n    }\n}"}],"_postman_id":"fc84afc9-d7af-4621-bb97-288a64978107"},{"name":"Get a list of all uploaded PDF's","id":"a3878071-dea8-41f8-9ee9-e5ef8b1d67c0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-admin-key","value":"{{ pdfAdminKey }}"}],"url":"{{ pdfServer }}/pdf/{{ projectId }}/file","urlObject":{"path":["pdf","{{ projectId }}","file"],"host":["{{ pdfServer }}"],"query":[],"variable":[]}},"response":[{"id":"ede53709-b46b-4d50-b4da-8969e6773958","name":"Get a list of all uploaded PDF's","originalRequest":{"method":"GET","header":[{"key":"x-admin-key","value":"{{ pdfAdminKey }}"}],"url":"{{ pdfServer }}/pdf/69dfb6dcbb04c38a91029771/file"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:44:03 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"418"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"1a2-ZTuHXIqt2tvXnEmctGhdQZ36Jc0\""}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"_id\": \"69dd4759b3be64b49b9030b7\",\n        \"form\": \"650a5e1cdc01b795146a6def\",\n        \"project\": \"650a5bfbb9ac8160c0968d80\",\n        \"owner\": \"650a5bfdb9ac8160c0968e59\",\n        \"access\": [],\n        \"created\": \"2026-04-13T19:43:21.324Z\",\n        \"modified\": \"2026-04-13T19:43:21.324Z\",\n        \"data\": {\n            \"project\": \"69d65f4e040fa2cea257224d\",\n            \"id\": \"3bb1193e-3009-57f2-bd93-f11b175add6e\",\n            \"path\": \"/pdf/69d65f4e040fa2cea257224d/file/3bb1193e-3009-57f2-bd93-f11b175add6e\",\n            \"status\": \"active\"\n        }\n    }\n]"}],"_postman_id":"a3878071-dea8-41f8-9ee9-e5ef8b1d67c0"},{"name":"Get a specific uploaded PDF HTML","id":"324b5745-d3be-4ce6-a0de-82a2c744f6c2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-admin-key","value":"{{ pdfAdminKey }}"}],"url":"{{ pdfServer }}/pdf/{{ projectId }}/file/{{ pdfFileName }}.html","urlObject":{"path":["pdf","{{ projectId }}","file","{{ pdfFileName }}.html"],"host":["{{ pdfServer }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"324b5745-d3be-4ce6-a0de-82a2c744f6c2"},{"name":"Get a specific PDF file download","id":"0f6b15a4-d379-4f63-9e5c-f8b4d985a202","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"x-admin-key","value":"{{ pdfAdminKey }}"}],"url":"{{ pdfServer }}/pdf/{{ projectId }}/file/{{ pdfFileName }}.pdf","urlObject":{"path":["pdf","{{ projectId }}","file","{{ pdfFileName }}.pdf"],"host":["{{ pdfServer }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"0f6b15a4-d379-4f63-9e5c-f8b4d985a202"},{"name":"Create PDF Form with Submission","id":"2309a9d7-6945-4bf8-98c0-5fdad050d6c9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"x-admin-key","value":"{{ pdfAdminKey }}"}],"body":{"mode":"raw","raw":"{\n  \"form\": {\n    \"title\": \"My custom form\",\n    \"components\": [\n      {\n        \"type\": \"textfield\",\n        \"key\": \"firstName\",\n        \"label\": \"First Name\",\n        \"input\": true\n      },\n      {\n        \"type\": \"textfield\",\n        \"key\": \"lastName\",\n        \"label\": \"Last Name\",\n        \"input\": true\n      }\n    ]\n  },\n  \"submission\": {\n    \"data\": {\n      \"firstName\": \"Joe\",\n      \"lastName\": \"Smith\"\n    }\n  }\n}","options":{"raw":{"language":"json"}}},"url":"{{ pdfServer }}/pdf/{{ projectId }}/download","description":"<p>This request allows you to provide both the Form JSON and the Submission JSON to the PDF Server, which ultimately allows you to create a PDF of any form populated with any submission.</p>\n<p><em><strong>NOTE: You may need to have x-jwt-token header if your form depends on other forms/submissions</strong></em></p>\n","urlObject":{"path":["pdf","{{ projectId }}","download"],"host":["{{ pdfServer }}"],"query":[],"variable":[]}},"response":[],"_postman_id":"2309a9d7-6945-4bf8-98c0-5fdad050d6c9"},{"name":"Delete a specific PDF upload","id":"af64e32d-e53d-4a36-bddb-1f68b4b7d24e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"x-admin-key","value":"{{ pdfAdminKey }}"}],"body":{"mode":"formdata","formdata":[]},"url":"{{ pdfServer }}/pdf/{{ projectId }}/file/{{ pdfFileName }}","urlObject":{"path":["pdf","{{ projectId }}","file","{{ pdfFileName }}"],"host":["{{ pdfServer }}"],"query":[],"variable":[]}},"response":[{"id":"e1f51ff1-5111-49d9-ab20-3ea0b7609af9","name":"Delete a specific PDF upload","originalRequest":{"method":"DELETE","header":[{"key":"x-admin-key","value":"{{ pdfAdminKey }}"}],"body":{"mode":"formdata","formdata":[]},"url":"{{ pdfServer }}/pdf/69dfb6dcbb04c38a91029771/file/3bb1193e-3009-57f2-bd93-f11b175add6e"},"status":"No Content","code":204,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:46:15 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Express"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"af64e32d-e53d-4a36-bddb-1f68b4b7d24e"}],"id":"883b3f43-af19-4166-80eb-b42ef77c76bf","description":"<p><em><strong>NOTE: This section covers server-to-server requests. If you want to perform client-to-server requests, see PDF API section</strong></em></p>\n<p>For server-to-server requests you need to set <strong>FORMIO_PDF_ADMINKEY</strong> environment variable to PDF server. You will use <strong>x-admin-key</strong> header with value equal to environment variable value to perform authorized requests.</p>\n<p>For these APIs it is important to use the following token variables.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Token</strong></th>\n<th><strong>Description</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>{{ pdfServer }}</code></td>\n<td>The API endpoint for the PDF server deployment. i.e. <code>https://forms.mysite.com/pdf</code></td>\n</tr>\n<tr>\n<td><code>{{ pdfAdminKey }}</code></td>\n<td>The value of the FORMIO_PDF_ADMINKEY environment variable.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"883b3f43-af19-4166-80eb-b42ef77c76bf"},{"name":"Server API","item":[{"name":"Health","id":"9f2d49f4-f5e6-4185-9d86-6e93a12e5ea1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{ baseUrl }}/health","description":"<p>This API will fetch the information about server's health.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{{appUrl}}/health\n</code></pre><p>If the server's environment has the VERBOSE_HEALTH flag as true then you'll get a response like this: </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"agregatedStatus\": \"UP\",\n  \"requestCount\": {\n    \"1min\": {\n      \"GET\": {\n        \"2xx\": 1,\n      }\n    },\n    \"5min\": {\n      \"GET\": {\n        \"2xx\": 1,\n      }\n    },\n    \"15min\": {\n      \"GET\": {\n        \"2xx\": 1,\n        \"3xx\": 1\n      }\n    }\n  },\n  \"mongodbConnectionState\": \"connected\",\n  \"license\": true\n}\n</code></pre><div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Properties</th>\n<th>Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>agregatedStatus</strong></td>\n<td>\"UP\" / \"DOWN\"</td>\n<td>Server's agregated status</td>\n</tr>\n<tr>\n<td><strong>requestCount</strong></td>\n<td>1min / 5min\" / 15min</td>\n<td>Includes count of requests by code 2xx, 3xx, 4xx, 5xx</td>\n</tr>\n<tr>\n<td><strong>mongodbConnectionState</strong></td>\n<td>\"disconnected\" / \"connected\" / \"connecting\" / \"disconnecting\"</td>\n<td>MongoDB Connection Status</td>\n</tr>\n<tr>\n<td><strong>license</strong></td>\n<td>true / false</td>\n<td>Is license available</td>\n</tr>\n</tbody>\n</table>\n</div><p>If the server's environment hasn't the VERBOSE_HEALTH flag as true then you'll get a response with human-readable diagnostic information like \"OK\"</p>\n","urlObject":{"path":["health"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"aa771252-ca0d-4d72-a611-38809597d4c9","name":"Health","originalRequest":{"method":"GET","header":[],"url":"https://forms.example.com/health"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:35:20 GMT"},{"key":"Content-Type","value":"text/plain; charset=utf-8"},{"key":"Content-Length","value":"2"},{"key":"Connection","value":"keep-alive"},{"key":"Origin-Agent-Cluster","value":"?1"},{"key":"Vary","value":"Origin"},{"key":"Content-Security-Policy","value":"default-src *;frame-src *;child-src * blob: data:;worker-src * blob: data:;img-src * blob: data:;media-src *;script-src * 'unsafe-inline' 'unsafe-eval';style-src * 'unsafe-inline';font-src * blob: data:;connect-src *;base-uri 'self';block-all-mixed-content;form-action 'self';frame-ancestors 'self';object-src 'none';script-src-attr 'none'"},{"key":"X-DNS-Prefetch-Control","value":"off"},{"key":"Expect-CT","value":"max-age=0"},{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains; preload"},{"key":"X-Download-Options","value":"noopen"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-Permitted-Cross-Domain-Policies","value":"none"},{"key":"Referrer-Policy","value":"origin,same-origin"},{"key":"X-XSS-Protection","value":"0"},{"key":"ETag","value":"W/\"2-nOO9QiTIwXgNtWtBJezz8kv3SLc\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"OK"}],"_postman_id":"9f2d49f4-f5e6-4185-9d86-6e93a12e5ea1"},{"name":"Status","id":"28c3f3f5-3083-4883-8b05-baa6f46e3976","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"{{ baseUrl }}/status","description":"<p>This API will fetch the version, schema, and environment id of the API Server</p>\n","urlObject":{"path":["status"],"host":["{{ baseUrl }}"],"query":[],"variable":[]}},"response":[{"id":"0c86d249-0d22-4f5e-839a-3b5c72a54b9a","name":"Status","originalRequest":{"method":"GET","header":[],"url":"https://forms.example.com/status"},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Server","value":"nginx/1.29.5"},{"key":"Date","value":"Mon, 13 Apr 2026 19:35:43 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"80"},{"key":"Connection","value":"keep-alive"},{"key":"X-Powered-By","value":"Express"},{"key":"Origin-Agent-Cluster","value":"?0"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"ETag","value":"W/\"50-0RlB7vEzCfIzUZVLfsd3SAPUyEg\""},{"key":"Cache-Control","value":"no-cache,max-age=0"}],"cookie":[],"responseTime":null,"body":"{\n    \"version\": \"9.7.1\",\n    \"schema\": \"3.3.21\",\n    \"environmentId\": \"64d7b40e81d6ad28758b767e\"\n}"}],"_postman_id":"28c3f3f5-3083-4883-8b05-baa6f46e3976"}],"id":"25f81582-0d1a-4ec6-a79c-a481b2fc2f97","_postman_id":"25f81582-0d1a-4ec6-a79c-a481b2fc2f97","description":""}],"event":[{"listen":"prerequest","script":{"id":"d2bb92ec-cdbd-4cb6-b8d0-d5d498581019","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"4dd8f42b-a2f3-447a-a338-e5a25d27de62","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}]}