Skip to main content
Forms define the advanced fields you can attach to contacts, such as consents, surveys, level of support, custom fields, presence status, and tasks.

Form types

TypeDescription
consentGDPR or custom consent checkboxes
surveyMulti-question survey forms
level_of_supportPolitical or engagement level ratings
custom_fieldsArbitrary key-value fields
presence_statusAttendance or presence tracking
tasksAction or task forms

Fetching a form

Use GET /v1/forms/type/{type} to list all forms of a given type (the canonical route). GET /forms/{id} retrieves a single form by its numeric ID. Passing a type string to /{arg} (e.g. /forms/consent) is deprecated — use /v1/forms/type/consent instead.

Reading advanced fields on a contact

When you fetch a contact, advanced fields appear as formdatas entries. This is the lower-level structure used to associate a contact with a form and a selected value:
{
  "formdatas": [
    {
      "form_id": 12,
      "form_ref_id": 45
    }
  ]
}
  • form_id — the ID of the form (advanced field definition)
  • form_ref_id — the ID of the selected value/option within that form
Use GET /forms/{id} to decode the form definition and map form_ref_id to a human-readable value.

Setting advanced fields on a contact

POST /contacts and PATCH /contacts/{id} can also use formdatas to link a contact to a form and a selected value. Use GET /v1/forms/type/{type} to discover form definitions and GET /forms/{id} to decode the form and option IDs. For write payload examples and endpoint-specific contact update guidance, see Create and update contacts.
Last modified on June 16, 2026