WhatsApp New Patient Intake Flow Template

A three-screen intake form that collects a new patient's details, date of birth, medical history, allergies and current medications, then records treatment and privacy consent. Patients complete it on their phone before the first visit, so the clipboard in reception becomes a quick check instead of a ten-minute form.

3 screens 12 fields returned Flow JSON 7.2 Sign up Clinics, Dental, Physiotherapy, Aesthetics, Chiropractic

Use Try it to fill the flow and see the exact response_json it returns.

new-patient-intake.json Open in Flow Builder
{
  "version": "7.2",
  "screens": [
    {
      "id": "PERSONAL_DETAILS",
      "title": "Your details",
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_personal_details",
            "children": [
              {
                "type": "TextHeading",
                "text": "Welcome to the practice"
              },
              {
                "type": "TextBody",
                "text": "Please fill in your details as they appear on your ID. This helps us find your records and contact you if anything changes."
              },
              {
                "type": "TextInput",
                "name": "first_name",
                "label": "First name",
                "input-type": "text",
                "required": true
              },
              {
                "type": "TextInput",
                "name": "last_name",
                "label": "Last name",
                "input-type": "text",
                "required": true
              },
              {
                "type": "DatePicker",
                "name": "date_of_birth",
                "label": "Date of birth",
                "required": true
              },
              {
                "type": "Dropdown",
                "name": "gender",
                "label": "Gender (optional)",
                "data-source": [
                  {
                    "id": "female",
                    "title": "Female"
                  },
                  {
                    "id": "male",
                    "title": "Male"
                  },
                  {
                    "id": "non_binary",
                    "title": "Non-binary"
                  },
                  {
                    "id": "self_describe",
                    "title": "Prefer to self-describe"
                  },
                  {
                    "id": "prefer_not_to_say",
                    "title": "Prefer not to say"
                  }
                ]
              },
              {
                "type": "TextInput",
                "name": "patient_email",
                "label": "Email",
                "input-type": "email",
                "required": true,
                "helper-text": "For appointment letters and receipts"
              },
              {
                "type": "TextInput",
                "name": "emergency_contact",
                "label": "Emergency contact",
                "input-type": "text",
                "helper-text": "Name and phone number"
              },
              {
                "type": "Footer",
                "label": "Continue",
                "on-click-action": {
                  "name": "navigate",
                  "next": {
                    "type": "screen",
                    "name": "MEDICAL_HISTORY"
                  },
                  "payload": {}
                }
              }
            ]
          }
        ]
      }
    },
    {
      "id": "MEDICAL_HISTORY",
      "title": "Medical history",
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_medical_history",
            "children": [
              {
                "type": "TextSubheading",
                "text": "Your health background"
              },
              {
                "type": "TextBody",
                "text": "Tick anything that applies to you now or in the past. Your clinician will go through it with you at your first visit."
              },
              {
                "type": "CheckboxGroup",
                "name": "medical_conditions",
                "label": "Conditions",
                "data-source": [
                  {
                    "id": "none_known",
                    "title": "None of these"
                  },
                  {
                    "id": "high_blood_pressure",
                    "title": "High blood pressure"
                  },
                  {
                    "id": "heart_condition",
                    "title": "Heart condition"
                  },
                  {
                    "id": "diabetes",
                    "title": "Diabetes"
                  },
                  {
                    "id": "asthma",
                    "title": "Asthma or lung condition"
                  },
                  {
                    "id": "epilepsy",
                    "title": "Epilepsy or seizures"
                  },
                  {
                    "id": "blood_thinners",
                    "title": "Taking blood thinners"
                  },
                  {
                    "id": "pacemaker",
                    "title": "Pacemaker or implant"
                  },
                  {
                    "id": "pregnant",
                    "title": "Pregnant or breastfeeding"
                  },
                  {
                    "id": "recent_surgery",
                    "title": "Surgery in last 12 months"
                  },
                  {
                    "id": "other_condition",
                    "title": "Other (tell us below)"
                  }
                ],
                "required": true
              },
              {
                "type": "TextArea",
                "name": "allergies",
                "label": "Allergies",
                "helper-text": "Medicines, latex, foods. Include the reaction if known"
              },
              {
                "type": "TextArea",
                "name": "current_medications",
                "label": "Current medications",
                "helper-text": "Name and dose, including supplements"
              },
              {
                "type": "Footer",
                "label": "Continue",
                "on-click-action": {
                  "name": "navigate",
                  "next": {
                    "type": "screen",
                    "name": "CONSENT"
                  },
                  "payload": {}
                }
              }
            ]
          }
        ]
      }
    },
    {
      "id": "CONSENT",
      "title": "Consent",
      "terminal": true,
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_consent",
            "children": [
              {
                "type": "TextSubheading",
                "text": "Consent and privacy"
              },
              {
                "type": "TextBody",
                "text": "We store your answers in your patient record and share them only with the team involved in your care."
              },
              {
                "type": "EmbeddedLink",
                "text": "Read our privacy notice",
                "on-click-action": {
                  "name": "open_url",
                  "url": "https://example.com/privacy"
                }
              },
              {
                "type": "OptIn",
                "name": "treatment_consent",
                "label": "I confirm the information is accurate and consent to assessment and treatment.",
                "required": true
              },
              {
                "type": "OptIn",
                "name": "privacy_consent",
                "label": "I agree to my health information being stored and processed as described in the privacy notice.",
                "required": true
              },
              {
                "type": "OptIn",
                "name": "reminder_opt_in",
                "label": "Send me appointment reminders on WhatsApp."
              },
              {
                "type": "Footer",
                "label": "Submit form",
                "on-click-action": {
                  "name": "complete",
                  "payload": {
                    "first_name": "${screen.PERSONAL_DETAILS.form.first_name}",
                    "last_name": "${screen.PERSONAL_DETAILS.form.last_name}",
                    "date_of_birth": "${screen.PERSONAL_DETAILS.form.date_of_birth}",
                    "gender": "${screen.PERSONAL_DETAILS.form.gender}",
                    "patient_email": "${screen.PERSONAL_DETAILS.form.patient_email}",
                    "emergency_contact": "${screen.PERSONAL_DETAILS.form.emergency_contact}",
                    "medical_conditions": "${screen.MEDICAL_HISTORY.form.medical_conditions}",
                    "allergies": "${screen.MEDICAL_HISTORY.form.allergies}",
                    "current_medications": "${screen.MEDICAL_HISTORY.form.current_medications}",
                    "treatment_consent": "${form.treatment_consent}",
                    "privacy_consent": "${form.privacy_consent}",
                    "reminder_opt_in": "${form.reminder_opt_in}"
                  }
                }
              }
            ]
          }
        ]
      }
    }
  ]
}

Raw JSON for scripts: curl -s https://whautomate.com/whatsapp-flow-templates/new-patient-intake.json

Import in 60 seconds
  1. Copy the JSON above (or edit it first in the Flow Builder).
  2. In WhatsApp Manager, open Account tools > Flows, create a flow and choose Sign up as the category.
  3. Paste into the JSON editor, check the preview, then Publish.
  4. Send it with the Flow ID, as an interactive message or through a template's Flow button.

Not technical? Skip the JSON and send it from Whautomate with a drag-and-drop editor.

About this new patient intake flow

First appointments at clinics, dental practices and physio rooms routinely start ten minutes late because the patient is filling in a paper form in reception. Sending the intake form over WhatsApp a day or two before the visit moves that work to the patient's sofa, and gives the clinician time to read the history before the patient walks in.

The flow is split into three screens so that each one feels short. Screen one is identity: name, date of birth, contact email and an emergency contact. Screen two is the clinical part: a checklist of common conditions plus free-text boxes for allergies and medications, which are too varied for a fixed list. Screen three is consent, with a link to your privacy notice and separate tick boxes for treatment consent, data processing and reminders.

Keeping consent items separate is deliberate. Treatment consent, privacy consent and reminder messages are different permissions, and bundling them into one box makes it hard to prove which one the patient agreed to. Each OptIn returns its own boolean, which is exactly what you want to store alongside the record.

Fields this flow returns

When the customer taps the final button, the complete action sends these keys back in response_json. Fields from earlier screens are pulled in with global references (${screen.SCREEN_ID.form.field}), so nothing is lost between screens.

KeyComponentScreenRequiredReturnsExample
first_name TextInput PERSONAL_DETAILS Yes string "Maria"
last_name TextInput PERSONAL_DETAILS Yes string "Santos"
date_of_birth DatePicker PERSONAL_DETAILS Yes YYYY-MM-DD "1988-03-17"
gender
female, male, non_binary, self_describe, prefer_not_to_say
Dropdown PERSONAL_DETAILS No item id "female"
patient_email TextInput (email) PERSONAL_DETAILS Yes string "[email protected]"
emergency_contact TextInput PERSONAL_DETAILS No string "Jo Santos, +44 7700 900123"
medical_conditions
none_known, high_blood_pressure, heart_condition, diabetes, asthma, epilepsy, blood_thinners, pacemaker, pregnant, recent_surgery, other_condition
CheckboxGroup MEDICAL_HISTORY Yes array of ids ["asthma","high_blood_pressure"]
allergies TextArea MEDICAL_HISTORY No string "Penicillin (rash). Latex (mild)."
current_medications TextArea MEDICAL_HISTORY No string "Amlodipine 5mg daily, salbutamol inhaler as needed."
treatment_consent OptIn CONSENT Yes boolean true
privacy_consent OptIn CONSENT Yes boolean true
reminder_opt_in OptIn CONSENT No boolean true

Optional fields the customer leaves empty may be missing from response_json or arrive empty. Treat every optional key as nullable in your handler.

No developer needed

Send the New Patient Intake flow without touching code

You do not need to be technical to use WhatsApp Flows. Connect your WhatsApp number, set the flow up in our drag-and-drop editor and send it to customers in a few clicks. No JSON, no API calls, no WhatsApp Manager.

1

Connect your number

Log in with Facebook and connect your WhatsApp number in a few minutes. No API keys or servers to set up.

2

Set up the flow

Start from a ready-made form or import this one, then drag fields in, change the wording and try it on a live phone preview. Click Publish when it looks right.

3

Send it anywhere

Send it from any chat in the Team Inbox, on web or mobile, send it automatically from an automation, or broadcast it to a list.

4

Get the answers

Every answer is saved on the customer's profile and chat, and your team can be notified the moment a form comes in.

7-day free trial, no credit card required.

Sample webhook payload (nfm_reply)

This is what your webhook receives when a customer submits the flow. response_json is a JSON string: parse it, then match flow_token to the record you created when you sent the message. The customer's WhatsApp number is in messages[0].from.

response_json (parsed)
{
  "flow_token": "bk_8f2c41",
  "first_name": "Maria",
  "last_name": "Santos",
  "date_of_birth": "1988-03-17",
  "gender": "female",
  "patient_email": "[email protected]",
  "emergency_contact": "Jo Santos, +44 7700 900123",
  "medical_conditions": [
    "asthma",
    "high_blood_pressure"
  ],
  "allergies": "Penicillin (rash). Latex (mild).",
  "current_medications": "Amlodipine 5mg daily, salbutamol inhaler as needed.",
  "treatment_consent": true,
  "privacy_consent": true,
  "reminder_opt_in": true
}
POST your-webhook (full event)
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "field": "messages",
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "15550001234",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "contacts": [
              {
                "profile": {
                  "name": "Alex Morgan"
                },
                "wa_id": "14155550123"
              }
            ],
            "messages": [
              {
                "context": {
                  "from": "15550001234",
                  "id": "wamid.SENT_FLOW_MESSAGE_ID"
                },
                "from": "14155550123",
                "id": "wamid.INCOMING_MESSAGE_ID",
                "timestamp": "1760000000",
                "type": "interactive",
                "interactive": {
                  "type": "nfm_reply",
                  "nfm_reply": {
                    "name": "flow",
                    "body": "Sent",
                    "response_json": "{\"flow_token\":\"bk_8f2c41\",\"first_name\":\"Maria\",\"last_name\":\"Santos\",\"date_of_birth\":\"1988-03-17\",\"gender\":\"female\",\"patient_email\":\"[email protected]\",\"emergency_contact\":\"Jo Santos, +44 7700 900123\",\"medical_conditions\":[\"asthma\",\"high_blood_pressure\"],\"allergies\":\"Penicillin (rash). Latex (mild).\",\"current_medications\":\"Amlodipine 5mg daily, salbutamol inhaler as needed.\",\"treatment_consent\":true,\"privacy_consent\":true,\"reminder_opt_in\":true}"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  ]
}

Deploy with the WhatsApp Cloud API

Prefer code over WhatsApp Manager? Save the template as new-patient-intake.json and run these calls with a system user token that has whatsapp_business_management and whatsapp_business_messaging permissions.

1. Create the flow

bash
curl -X POST 'https://graph.facebook.com/v23.0/{WABA_ID}/flows' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'Content-Type: application/json' \
  -d '{"name": "new_patient_intake", "categories": ["SIGN_UP"]}'
# => {"id": "{FLOW_ID}"}

2. Upload the Flow JSON

bash
curl -X POST 'https://graph.facebook.com/v23.0/{FLOW_ID}/assets' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -F '[email protected];type=application/json' \
  -F 'name=flow.json' \
  -F 'asset_type=FLOW_JSON'
# => {"success": true, "validation_errors": []}

3. Publish it

bash
curl -X POST 'https://graph.facebook.com/v23.0/{FLOW_ID}/publish' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}'

Publishing is permanent: a published flow cannot be edited. To change it later, create a new flow (or clone it with clone_flow_id) and publish the new version.

4. Send it to a customer

Inside the 24-hour customer service window, send an interactive flow message. Outside it, create a message template with a Flow button that points to this flow, and send the template instead.

send-new-patient-intake.json
{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "14155550123",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "Before your first visit"
    },
    "body": {
      "text": "Please complete your new patient form. It takes about three minutes and means we can spend your appointment on you, not on paperwork."
    },
    "footer": {
      "text": "Your answers are shared only with your care team"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "bk_8f2c41",
        "flow_id": "YOUR_FLOW_ID",
        "flow_cta": "Complete intake form",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "PERSONAL_DETAILS"
        }
      }
    }
  }
}
bash
curl -X POST 'https://graph.facebook.com/v23.0/{PHONE_NUMBER_ID}/messages' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'Content-Type: application/json' \
  -d @send-new-patient-intake.json

When to send it

Right after a first booking

Send it as soon as a new patient books, while they are still engaged. Completion rates drop sharply if the form arrives the morning of the appointment.

Two days before the visit

For patients who have not completed it yet, send a template reminder with a Flow button 48 hours before, so there is time to review red flags such as blood thinners.

Referral arrivals

When a GP or specialist refers a patient to you, send the intake form with your welcome message so the referral and history arrive together.

Annual history update

Existing patients' medications and conditions change. Re-send the flow once a year, or before a new course of treatment such as injectables or surgery.

How to customise this template

  • Trim the conditions list to what changes your clinical decisions. A dental practice cares about blood thinners, heart valves and bisphosphonates; an aesthetics clinic cares about pregnancy, autoimmune conditions and recent isotretinoin use.
  • Replace https://example.com/privacy with your real privacy notice. It must explain what you store, why, who sees it and how long you keep it.
  • If you already hold the patient's name from the booking, you can remove the name fields and rely on the flow_token to link the submission to the patient record.
  • Add a reason_for_visit style question on screen two if your clinicians triage before the appointment, but keep it optional so patients do not feel forced to self-diagnose.

Open this template in the Flow Builder to make these changes visually. The builder keeps field names unique and regenerates the completion payload for you.

Common mistakes to avoid

  • Health data is special-category data. HIPAA in the US, GDPR in Europe and similar local rules apply to how you collect, store and access it, and Meta's WhatsApp Business policies restrict what sensitive information you should request in chat. Check both before going live.
  • Collect only what the clinician will actually use. Every extra field is more sensitive data to secure and more reason for a patient to abandon the form halfway through.
  • Do not leave flow submissions sitting in a general chat inbox that non-clinical staff can read. Move the answers into your clinical system and restrict who can see the raw messages.
  • DatePicker returns date_of_birth as YYYY-MM-DD. Store it as a plain date, not a timestamp, or time zone conversion can shift a birthday by one day and break identity checks.
  • Required OptIns block submission until ticked. Make treatment and privacy consent required, but keep reminder messages optional so consent to marketing-style messages is freely given.

Need live availability instead of a "preferred time"?

A static flow can only collect a requested time, so your team still has to confirm it by hand. Whautomate ships a built-in appointment booking flow that reads your real services, staff and open slots, books the appointment directly and sends the confirmation. It is created and published in your WhatsApp account from an automation template, and it runs on an encrypted endpoint Whautomate hosts. There is no endpoint code for you to write.

  • Live services, staff and time slots from your calendar
  • Books directly, with no manual confirmation step
  • Multi-location version picks the branch first

7-day free trial, no credit card required.

Frequently asked questions

Flow responses are delivered to your webhook over the WhatsApp Business Platform, but you remain responsible for how the data is stored and who can access it afterwards. Review HIPAA, GDPR or your local health-data rules, Meta's policies and your own data processing agreements before using it for clinical information.
medical_conditions is a CheckboxGroup, so response_json contains an array of item ids, for example ["asthma", "blood_thinners"]. The field is required, so the patient must tick at least one box; that is why none_known exists, and it gives you an explicit "no conditions" answer instead of an ambiguous blank.
The range of possible answers is too large for a fixed list and a wrong forced choice is worse than no answer. Free text also lets patients include doses and reactions, which is what clinicians actually need to read.
Each OptIn returns true or false under its own name: treatment_consent, privacy_consent and reminder_opt_in. Store them with the submission timestamp and the flow_token so you can show when and how consent was given.

The Complete Omnichannel Customer Engagement Platform

Go beyond free tools. Automate conversations, build AI chatbots, send broadcast campaigns, book appointments, sell products, and manage every messaging channel from one powerful platform. Trusted by thousands of businesses worldwide.

  • WhatsApp, Instagram, Messenger, Telegram & Live Chat
  • AI chatbots & no-code automation
  • Broadcast campaigns & analytics
  • Appointment & class booking
  • E-commerce, Shopify & WooCommerce integration
  • CRM, invoicing & payment collection

No credit card required. Free 7-day trial. Visit our pricing page for plans.