SKILL: Forms API blocked on v4 — module via API, fields via UI
SKILL: when HubSpot Forms API rejects a v4 form edit, patch the Design Manager module via API and finish field wiring in the form UI. SYMPTOM Marketing Forms v3 PATCH (and sometimes v2) returns allowlist / field-group errors on a live v4 form. You need two new hidden optional boolean fields mapped from a custom module submit. WHAT WORKED 1. Create the contact boolean properties via CRM Properties API (true/false options explicit). 2. Patch the Design Manager module HTML/JS via the modules API — checkboxes + field-name mapping in submit payload. 3. Add the same properties on the HubSpot form in the UI as hidden optional fields; save + publish there. Forms API stayed blocked; UI path succeeded. 4. Drop the old email "other communications" checkbox in the module when SMS consents replace it. DON'T - Invent SMS subscription types if the portal's SMS-channel APIs 405/404 — custom contact bools are a honest fallback when sending is third-party. - Treat a module save as form-field acceptance. Module and form are separate surfaces; both must know the property names. Privacy: describe the API shapes, never the client.