> ## Documentation Index
> Fetch the complete documentation index at: https://docs.morf.health/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Form Answer Group

> Event payload details and trigger documentation for Form Answer Group data from Healthie

<img src="https://mintcdn.com/morfhealth/EU2WCxuXGIUQcziR/images/healthie.svg?fit=max&auto=format&n=EU2WCxuXGIUQcziR&q=85&s=d168a24dbae69f2202ca63dd7aa2e1f3" alt="images/healthie.svg" width="40" height="40" data-path="images/healthie.svg" />

# Events

## Triggering Webhook Types

The following event types are associated with the Form Answer Group event payload from Healthie.

* `Healthie Form Answer Group Created`
* `Healthie Form Answer Group Locked`
* `Healthie Form Answer Group Signed`

<RequestExample>
  ```json Example theme={null}
  {
    "associated_appointment_id": "597220",
    "autoscored_sections": [
      {
        "section_key": "results",
        "section_title": "Results",
        "value": 42
      }
    ],
    "charting_note_addenda": [
      {
        "content": "Extra data for the charting note",
        "created_at": "2025-11-04T11:31:16Z",
        "id": "604888"
      }
    ],
    "custom_module_form_id": "1380649",
    "deleted_at": "2024-07-04T10:35:45+00:00",
    "dietician_organization_id": "123450",
    "dietitian_email_address": "drfleming@example.com",
    "dietitian_first_name": "Alexander",
    "dietitian_id": "100070",
    "dietitian_last_name": "Fleming",
    "dietitian_organization_id": "123450",
    "filler_email": "patient0@example.com",
    "filler_id": "2718281",
    "filler_is_patient": true,
    "finished": true,
    "form_answer_group_id": "4231415",
    "form_answer_group_name": "PHQ-8 Form",
    "form_answers": {
      "1313912": {
        "answer": "Poorly",
        "created_at": "2024-07-04T10:32:12+00:00",
        "custom_module_id": "1313912",
        "id": "301412",
        "label": "How are you feeling?"
      },
      "1313913": {
        "answer": "Aches and pains",
        "created_at": "2024-07-04T10:32:17+00:00",
        "custom_module_id": "1313913",
        "id": "301414",
        "label": "What's the worst symptom?"
      }
    },
    "locked_at": "2024-07-04T10:35:44+00:00",
    "locked_by_email": "drfleming@example.com",
    "locked_by_id": "100070",
    "ordered_answers": [
      {
        "answer": "Happy",
        "created_at": "2024-07-04T09:39:18+00:00",
        "custom_module_id": "90129",
        "id": "672131",
        "label": "How are you feeling today?",
        "matrix_answers": [
          {
            "cpt_code": "99215",
            "modifiers": "95",
            "units": "1"
          },
          {
            "cpt_code": "G2017",
            "units": "2"
          }
        ],
        "read_only": false
      }
    ],
    "signings": [
      {
        "created_at": "2024-07-05T13:37:19+00:00",
        "first_name": "Brian",
        "id": "2401221",
        "last_name": "Hippocrates",
        "npi": "1000321231",
        "qualifications": "MD",
        "user_id": "2718281"
      }
    ],
    "timing": {
      "created_at": "2022-07-01T00:01:00+00:00",
      "updated_at": "2022-07-01T00:01:00+00:00"
    },
    "use_for_charting": false,
    "user_id": "2718281"
  }
  ```
</RequestExample>

<ResponseExample>
  ```json Description theme={null}
  {
    "associated_appointment_id": "ID of the Appointment associated with the Form Answer Group (optional)",
    "autoscored_sections": {
      "section_key": "Section key",
      "section_title": "Section title",
      "value": "Value of the auto-scored section"
    },
    "charting_note_addenda": {
      "content": "Content string for the addendum",
      "created_at": "Timestamp for the creation of the addendum",
      "id": "Unique charting note addendum ID"
    },
    "custom_module_form_id": "ID of the form (Custom Module Form) for the form response (Form Answer Group)",
    "deleted_at": "Time the form response (Form Answer Group) was deleted, if it was deleted",
    "dietician_organization_id": "Organization ID for the User's (Patient's) registered dietitian",
    "dietitian_email_address": "Email address of the User's (Patient's) registered dietitian",
    "dietitian_first_name": "First name of the User's (Patient's) registered dietitian",
    "dietitian_id": "ID of the User's (Patient's) registered dietitian",
    "dietitian_last_name": "Last name of the User's (Patient's) registered dietitian",
    "dietitian_organization_id": "Organization ID for the User's (Patient's) registered dietitian",
    "filler_email": "Email of the User who completed the form response (Form Answer Group)",
    "filler_id": "ID of the User (Patient or Provider) who filled out the form response (Form Answer Group)",
    "filler_is_patient": "Whether or not the User who filled out the form is a Patient",
    "finished": "Is the form response (Form Answer Group) completed",
    "form_answer_group_id": "ID of the form response (Form Answer Group)",
    "form_answer_group_name": "Name of the form for the (Form Answer Group), i.e. the Custom Module Form name",
    "form_answers": {
      "key": null,
      "value": {
        "answer": "Answer to the form question (Custom Module)",
        "created_at": "Time the form answer was registered",
        "custom_module_id": "ID of the form question (Custom Module)",
        "id": "ID for the form response (Form Answer Group) individual question answer (Form Answer)",
        "label": "Form question (Custom Module) text",
        "matrix_answers": "Matrix answers (a map of column name -> value effectively), only populated if the CustomModule type is \"matrix\"",
        "read_only": "Is this Answer a read-only value (from the Custom Module)"
      }
    },
    "locked_at": "Time the form response (Form Answer Group) was locked, if it was locked",
    "locked_by_email": "Email of the User (Provider) who locked the form response (Form Answer Group), if it was locked",
    "locked_by_id": "ID of the User (Provider) who locked the form response (Form Answer Group), if it was locked",
    "ordered_answers": {
      "answer": "Answer to the form question (Custom Module)",
      "created_at": "Time the form answer was registered",
      "custom_module_id": "ID of the form question (Custom Module)",
      "id": "ID for the form response (Form Answer Group) individual question answer (Form Answer)",
      "label": "Form question (Custom Module) text",
      "matrix_answers": "Matrix answers (a map of column name -> value effectively), only populated if the CustomModule type is \"matrix\"",
      "read_only": "Is this Answer a read-only value (from the Custom Module)"
    },
    "signings": {
      "created_at": "Time the form response (Form Answer Group) signing was performed",
      "first_name": "First name of the provider",
      "id": "ID for the form response (Form Answer Group) signing event",
      "last_name": "Last name of the provider",
      "npi": "The User (Provider) who signed the form response's NPI",
      "qualifications": "Qualifications of the provider",
      "user_id": "ID of the User (Provider) who signed the form response (Form Answer Group)"
    },
    "timing": {
      "created_at": "Time the object was created",
      "updated_at": "Time the object was updated"
    },
    "use_for_charting": "Is the form (Custom Module Form) for this form response (Form Answer Group) used for charting",
    "user_id": "ID of the User (Patient) for whom the form response (Form Answer Group) pertains to"
  }
  ```
</ResponseExample>

### Payload Field Details

<ResponseField name="Form Answer Group" type="Event Payload">
  <Expandable title="fields" defaultOpen="true">
    <ResponseField name="form_answer_group_id" type="string" required>
      ID of the form response (Form Answer Group)

      ```json CEL theme={null}
      form_answer_group_id
      ```

      ```json Example theme={null}
      "4231415"
      ```
    </ResponseField>

    <ResponseField name="user_id" type="string" required>
      `ID` ID of the User (Patient) for whom the form response (Form Answer Group) pertains to

      ```json CEL theme={null}
      user_id
      ```

      ```json Example theme={null}
      "2718281"
      ```
    </ResponseField>

    <ResponseField name="custom_module_form_id" type="string" required>
      ID of the form (Custom Module Form) for the form response (Form Answer Group)

      ```json CEL theme={null}
      custom_module_form_id
      ```

      ```json Example theme={null}
      "1380649"
      ```
    </ResponseField>

    <ResponseField name="filler_id" type="string">
      `ID` ID of the User (Patient or Provider) who filled out the form response (Form Answer Group)

      ```json CEL theme={null}
      filler_id
      ```

      ```json Example theme={null}
      "2718281"
      ```
    </ResponseField>

    <ResponseField name="filler_is_patient" type="bool">
      `HI` Whether or not the User who filled out the form is a Patient

      ```json CEL theme={null}
      filler_is_patient
      ```

      ```json Example theme={null}
      true
      ```
    </ResponseField>

    <ResponseField name="filler_email" type="string">
      `PII` Email of the User who completed the form response (Form Answer Group)

      ```json CEL theme={null}
      filler_email
      ```

      ```json Example theme={null}
      "patient0@example.com"
      ```
    </ResponseField>

    <ResponseField name="finished" type="bool" required>
      Is the form response (Form Answer Group) completed

      ```json CEL theme={null}
      finished
      ```

      ```json Example theme={null}
      true
      ```
    </ResponseField>

    <ResponseField name="timing" type="object" required>
      Create and update times

      ```json CEL theme={null}
      timing
      ```

      ```json Example theme={null}
      {
      "created_at": "2022-07-01T00:01:00+00:00",
      "updated_at": "2022-07-01T00:01:00+00:00"
      }
      ```
    </ResponseField>

    <ResponseField name="timing.created_at" type="timing.v1.Timestamp" required>
      Time the object was created

      ```json CEL theme={null}
      timing.created_at
      ```

      ```json Example theme={null}
      "2022-07-01T00:01:00+00:00"
      ```
    </ResponseField>

    <ResponseField name="timing.updated_at" type="timing.v1.Timestamp" required>
      Time the object was updated

      ```json CEL theme={null}
      timing.updated_at
      ```

      ```json Example theme={null}
      "2022-07-01T00:01:00+00:00"
      ```
    </ResponseField>

    <ResponseField name="locked_at" type="timing.v1.Timestamp">
      Time the form response (Form Answer Group) was locked, if it was locked

      ```json CEL theme={null}
      locked_at
      ```

      ```json Example theme={null}
      "2024-07-04T10:35:44+00:00"
      ```
    </ResponseField>

    <ResponseField name="locked_by_id" type="string">
      ID of the User (Provider) who locked the form response (Form Answer Group), if it was locked

      ```json CEL theme={null}
      locked_by_id
      ```

      ```json Example theme={null}
      "100070"
      ```
    </ResponseField>

    <ResponseField name="locked_by_email" type="string">
      Email of the User (Provider) who locked the form response (Form Answer Group), if it was locked

      ```json CEL theme={null}
      locked_by_email
      ```

      ```json Example theme={null}
      "drfleming@example.com"
      ```
    </ResponseField>

    <ResponseField name="deleted_at" type="timing.v1.Timestamp">
      Time the form response (Form Answer Group) was deleted, if it was deleted

      ```json CEL theme={null}
      deleted_at
      ```

      ```json Example theme={null}
      "2024-07-04T10:35:45+00:00"
      ```
    </ResponseField>

    <ResponseField name="form_answers" type="Map<string,dynamic (any)>" required>
      `HI` `PII` Question ID (Custom Module ID) to answer (Form Answer) map (dictionary)

      ```json CEL theme={null}
      form_answers
      ```

      ```json Example theme={null}
      {
      "1313912": {
      "answer": "Poorly",
      "created_at": "2024-07-04T10:32:12+00:00",
      "custom_module_id": "1313912",
      "id": "301412",
      "label": "How are you feeling?"
      },
      "1313913": {
      "answer": "Aches and pains",
      "created_at": "2024-07-04T10:32:17+00:00",
      "custom_module_id": "1313913",
      "id": "301414",
      "label": "What's the worst symptom?"
      }
      }
      ```
    </ResponseField>

    <ResponseField name="form_answer_group_name" type="string">
      Name of the form for the (Form Answer Group), i.e. the Custom Module Form name

      ```json CEL theme={null}
      form_answer_group_name
      ```

      ```json Example theme={null}
      "PHQ-8 Form"
      ```
    </ResponseField>

    <ResponseField name="dietician_organization_id" type="string">
      Organization ID for the User's (Patient's) registered dietitian

      ```json CEL theme={null}
      dietician_organization_id
      ```

      ```json Example theme={null}
      "123450"
      ```
    </ResponseField>

    <ResponseField name="dietitian_organization_id" type="string">
      Organization ID for the User's (Patient's) registered dietitian

      ```json CEL theme={null}
      dietitian_organization_id
      ```

      ```json Example theme={null}
      "123450"
      ```
    </ResponseField>

    <ResponseField name="dietitian_first_name" type="string">
      First name of the User's (Patient's) registered dietitian

      ```json CEL theme={null}
      dietitian_first_name
      ```

      ```json Example theme={null}
      "Alexander"
      ```
    </ResponseField>

    <ResponseField name="dietitian_last_name" type="string">
      Last name of the User's (Patient's) registered dietitian

      ```json CEL theme={null}
      dietitian_last_name
      ```

      ```json Example theme={null}
      "Fleming"
      ```
    </ResponseField>

    <ResponseField name="dietitian_email_address" type="string">
      Email address of the User's (Patient's) registered dietitian

      ```json CEL theme={null}
      dietitian_email_address
      ```

      ```json Example theme={null}
      "drfleming@example.com"
      ```
    </ResponseField>

    <ResponseField name="dietitian_id" type="string">
      ID of the User's (Patient's) registered dietitian

      ```json CEL theme={null}
      dietitian_id
      ```

      ```json Example theme={null}
      "100070"
      ```
    </ResponseField>

    <ResponseField name="signings" type="[]object" required>
      `ID` Signings for this form response (Form Answer Group)

      ```json CEL theme={null}
      signings
      ```

      ```json Example theme={null}
      [
      {
      "created_at": "2024-07-05T13:37:19+00:00",
      "first_name": "Brian",
      "id": "2401221",
      "last_name": "Hippocrates",
      "npi": "1000321231",
      "qualifications": "MD",
      "user_id": "2718281"
      }
      ]
      ```
    </ResponseField>

    <ResponseField name="signings.map(x, x.id)" type="[]string" required>
      Mapped array of: ID for the form response (Form Answer Group) signing event

      ```json CEL theme={null}
      signings.map(x, x.id)
      ```

      ```json Example theme={null}
      [
      "2401221"
      ]
      ```
    </ResponseField>

    <ResponseField name="signings.map(x, x.created_at)" type="[]timing.v1.Timestamp" required>
      Mapped array of: Time the form response (Form Answer Group) signing was performed

      ```json CEL theme={null}
      signings.map(x, x.created_at)
      ```

      ```json Example theme={null}
      [
      "2024-07-05T13:37:19+00:00"
      ]
      ```
    </ResponseField>

    <ResponseField name="signings.map(x, x.user_id)" type="[]string" required>
      `ID` Mapped array of: ID of the User (Provider) who signed the form response (Form Answer Group)

      ```json CEL theme={null}
      signings.map(x, x.user_id)
      ```

      ```json Example theme={null}
      [
      "2718281"
      ]
      ```
    </ResponseField>

    <ResponseField name="signings.map(x, x.npi)" type="[]string" required>
      Mapped array of: The User (Provider) who signed the form response's NPI

      ```json CEL theme={null}
      signings.map(x, x.npi)
      ```

      ```json Example theme={null}
      [
      "1000321231"
      ]
      ```
    </ResponseField>

    <ResponseField name="signings.map(x, x.qualifications)" type="[]string" required>
      Mapped array of: Qualifications of the provider

      ```json CEL theme={null}
      signings.map(x, x.qualifications)
      ```

      ```json Example theme={null}
      [
      "MD"
      ]
      ```
    </ResponseField>

    <ResponseField name="signings.map(x, x.first_name)" type="[]string" required>
      Mapped array of: First name of the provider

      ```json CEL theme={null}
      signings.map(x, x.first_name)
      ```

      ```json Example theme={null}
      [
      "Brian"
      ]
      ```
    </ResponseField>

    <ResponseField name="signings.map(x, x.last_name)" type="[]string" required>
      Mapped array of: Last name of the provider

      ```json CEL theme={null}
      signings.map(x, x.last_name)
      ```

      ```json Example theme={null}
      [
      "Hippocrates"
      ]
      ```
    </ResponseField>

    <ResponseField name="autoscored_sections" type="[]object" required>
      `HI` Auto-scored sections for this form response (Form Answer Group)

      ```json CEL theme={null}
      autoscored_sections
      ```

      ```json Example theme={null}
      [
      {
      "section_key": "results",
      "section_title": "Results",
      "value": 42
      }
      ]
      ```
    </ResponseField>

    <ResponseField name="autoscored_sections.map(x, x.section_key)" type="[]string" required>
      Mapped array of: Section key

      ```json CEL theme={null}
      autoscored_sections.map(x, x.section_key)
      ```

      ```json Example theme={null}
      [
      "results"
      ]
      ```
    </ResponseField>

    <ResponseField name="autoscored_sections.map(x, x.section_title)" type="[]string" required>
      Mapped array of: Section title

      ```json CEL theme={null}
      autoscored_sections.map(x, x.section_title)
      ```

      ```json Example theme={null}
      [
      "Results"
      ]
      ```
    </ResponseField>

    <ResponseField name="autoscored_sections.map(x, x.value)" type="[]float64 (double)" required>
      `HI` Mapped array of: Value of the auto-scored section

      ```json CEL theme={null}
      autoscored_sections.map(x, x.value)
      ```

      ```json Example theme={null}
      [
      42
      ]
      ```
    </ResponseField>

    <ResponseField name="use_for_charting" type="bool" required>
      Is the form (Custom Module Form) for this form response (Form Answer Group) used for charting

      ```json CEL theme={null}
      use_for_charting
      ```

      ```json Example theme={null}
      false
      ```
    </ResponseField>

    <ResponseField name="ordered_answers" type="[]object" required>
      `HI` `PII` Ordered form answers in the order they are defined in the form (Custom Module Form)

      ```json CEL theme={null}
      ordered_answers
      ```

      ```json Example theme={null}
      [
      {
      "answer": "Happy",
      "created_at": "2024-07-04T09:39:18+00:00",
      "custom_module_id": "90129",
      "id": "672131",
      "label": "How are you feeling today?",
      "matrix_answers": [
      {
        "cpt_code": "99215",
        "modifiers": "95",
        "units": "1"
      },
      {
        "cpt_code": "G2017",
        "units": "2"
      }
      ],
      "read_only": false
      }
      ]
      ```
    </ResponseField>

    <ResponseField name="ordered_answers.map(x, x.id)" type="[]string" required>
      Mapped array of: ID for the form response (Form Answer Group) individual question answer (Form Answer)

      ```json CEL theme={null}
      ordered_answers.map(x, x.id)
      ```

      ```json Example theme={null}
      [
      "672131"
      ]
      ```
    </ResponseField>

    <ResponseField name="ordered_answers.map(x, x.custom_module_id)" type="[]string" required>
      Mapped array of: ID of the form question (Custom Module)

      ```json CEL theme={null}
      ordered_answers.map(x, x.custom_module_id)
      ```

      ```json Example theme={null}
      [
      "90129"
      ]
      ```
    </ResponseField>

    <ResponseField name="ordered_answers.map(x, x.answer)" type="[]string" required>
      `HI` `PII` Mapped array of: Answer to the form question (Custom Module)

      ```json CEL theme={null}
      ordered_answers.map(x, x.answer)
      ```

      ```json Example theme={null}
      [
      "Happy"
      ]
      ```
    </ResponseField>

    <ResponseField name="ordered_answers.map(x, x.created_at)" type="[]timing.v1.Timestamp" required>
      Mapped array of: Time the form answer was registered

      ```json CEL theme={null}
      ordered_answers.map(x, x.created_at)
      ```

      ```json Example theme={null}
      [
      "2024-07-04T09:39:18+00:00"
      ]
      ```
    </ResponseField>

    <ResponseField name="ordered_answers.map(x, x.label)" type="[]string" required>
      Mapped array of: Form question (Custom Module) text

      ```json CEL theme={null}
      ordered_answers.map(x, x.label)
      ```

      ```json Example theme={null}
      [
      "How are you feeling today?"
      ]
      ```
    </ResponseField>

    <ResponseField name="ordered_answers.map(x, x.read_only)" type="[]bool" required>
      Mapped array of: Is this Answer a read-only value (from the Custom Module)

      ```json CEL theme={null}
      ordered_answers.map(x, x.read_only)
      ```

      ```json Example theme={null}
      [
      false
      ]
      ```
    </ResponseField>

    <ResponseField name="ordered_answers.map(x, x.matrix_answers)" type="[]bool" required>
      Mapped array of: Matrix answers (a map of column name -> value effectively), only populated if the CustomModule type is "matrix"

      ```json CEL theme={null}
      ordered_answers.map(x, x.matrix_answers)
      ```

      ```json Example theme={null}
      [
      [
      {
      "cpt_code": "99215",
      "modifiers": "95",
      "units": "1"
      },
      {
      "cpt_code": "G2017",
      "units": "2"
      }
      ]
      ]
      ```
    </ResponseField>

    <ResponseField name="associated_appointment_id" type="string">
      ID of the Appointment associated with the Form Answer Group (optional)

      ```json CEL theme={null}
      associated_appointment_id
      ```

      ```json Example theme={null}
      "597220"
      ```
    </ResponseField>

    <ResponseField name="charting_note_addenda" type="[]object" required>
      Any associated charting note addenda for this Form Answer Group

      ```json CEL theme={null}
      charting_note_addenda
      ```

      ```json Example theme={null}
      [
      {
      "content": "Extra data for the charting note",
      "created_at": "2025-11-04T11:31:16Z",
      "id": "604888"
      }
      ]
      ```
    </ResponseField>

    <ResponseField name="charting_note_addenda.map(x, x.id)" type="[]string" required>
      Mapped array of: Unique charting note addendum ID

      ```json CEL theme={null}
      charting_note_addenda.map(x, x.id)
      ```

      ```json Example theme={null}
      [
      "604888"
      ]
      ```
    </ResponseField>

    <ResponseField name="charting_note_addenda.map(x, x.content)" type="[]string" required>
      Mapped array of: Content string for the addendum

      ```json CEL theme={null}
      charting_note_addenda.map(x, x.content)
      ```

      ```json Example theme={null}
      [
      "Extra data for the charting note"
      ]
      ```
    </ResponseField>

    <ResponseField name="charting_note_addenda.map(x, x.created_at)" type="[]timing.v1.Timestamp" required>
      Mapped array of: Timestamp for the creation of the addendum

      ```json CEL theme={null}
      charting_note_addenda.map(x, x.created_at)
      ```

      ```json Example theme={null}
      [
      "2025-11-04T11:31:16Z"
      ]
      ```
    </ResponseField>
  </Expandable>
</ResponseField>
