Simplio3D

Contact Forms

Build contact/quote request forms with configurable fields. Supports name, email, phone, text, dropdowns, country pickers, legal acceptance, custom headers, and confirmation screens.

List Form Fields

GET/projects/:id/form-fields
const response = await fetch(BASE_URL + '/projects/proj_123/form-fields', {
  headers: { 'Authorization': 'Bearer ' + accessToken }
});

const data = await response.json();
// {
//   "success": true,
//   "fields": [
//     { "id": "ff_1", "type": "header-title", "label": "Header",
//       "headerText": "Request a Quote", "headerSubtext": "Fill in the details below.",
//       "headerAlignment": "center", "enabled": true, "required": false, "width": "full" },
//     { "id": "ff_2", "type": "name", "label": "Full Name", "placeholder": "Enter your name",
//       "required": true, "enabled": true, "width": "full" },
//     { "id": "ff_3", "type": "email", "label": "Email", "placeholder": "[email protected]",
//       "required": true, "enabled": true, "width": "half",
//       "validationPattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]+
quot; }, // { "id": "ff_4", "type": "telephone", "label": "Phone", "width": "half", // "required": false, "enabled": true }, // { "id": "ff_5", "type": "dropdown", "label": "Industry", "width": "full", // "options": [ // { "id": "1", "label": "Architecture", "value": "architecture" }, // { "id": "2", "label": "Retail", "value": "retail" }, // { "id": "3", "label": "Manufacturing", "value": "manufacturing" } // ] }, // { "id": "ff_6", "type": "country-state-city", "label": "Location", // "includeState": true, "includeCity": true }, // { "id": "ff_7", "type": "text", "label": "Additional Notes", // "multiline": true, "rows": 4, "maxLength": 500 }, // { "id": "ff_8", "type": "acceptance", "label": "I agree to the Terms", // "acceptanceText": "By submitting this form...", "required": true }, // { "id": "ff_9", "type": "submit", "label": "Submit", // "submitLabel": "Submit Your Request", "submitStyle": "gradient" }, // { "id": "ff_10", "type": "confirmation", "label": "Confirmation", // "confirmationTitle": "Thank You!", // "confirmationMessage": "We will get back to you within 24-48 hours.", // "confirmationShowSummary": true, "confirmationShowBackButton": true } // ] // }

Create Form Field

POST/projects/:id/form-fields
// Add a dropdown field for "Budget Range"
const response = await fetch(BASE_URL + '/projects/proj_123/form-fields', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    type: 'dropdown',
    label: 'Budget Range',
    required: true,
    width: 'half',
    options: [
      { id: '1', label: 'Under $1,000', value: 'under-1000' },
      { id: '2', label: '$1,000 - $5,000', value: '1000-5000' },
      { id: '3', label: '$5,000 - $10,000', value: '5000-10000' },
      { id: '4', label: 'Over $10,000', value: 'over-10000' }
    ],
    allowOther: true
  })
});

Update Form Field

PUT/projects/:id/form-fields/:fieldId
const response = await fetch(BASE_URL + '/projects/proj_123/form-fields/ff_2', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    label: 'Your Full Name',
    placeholder: 'First and Last name',
    width: 'half'
  })
});

Delete Form Field

DELETE/projects/:id/form-fields/:fieldId
const response = await fetch(BASE_URL + '/projects/proj_123/form-fields/ff_5', {
  method: 'DELETE',
  headers: { 'Authorization': 'Bearer ' + accessToken }
});

Reorder Form Fields

POST/projects/:id/form-fields/reorder
const response = await fetch(BASE_URL + '/projects/proj_123/form-fields/reorder', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + accessToken,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    fieldIds: ['ff_1', 'ff_2', 'ff_3', 'ff_4', 'ff_7', 'ff_5', 'ff_8', 'ff_9', 'ff_10']
  })
});

Continue reading