WhatsApp Fitness Trial Class Flow Template

A two-screen trial class sign-up for gyms and studios. It asks which class the prospect wants to try, their experience level, goals and preferred days, then their contact details, any injuries, and a health declaration they must accept before the first session.

2 screens 9 fields returned Flow JSON 7.2 Sign up Gyms, Yoga studios, Pilates studios, Martial arts, CrossFit boxes

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

fitness-trial-class.json Open in Flow Builder
{
  "version": "7.2",
  "screens": [
    {
      "id": "TRIAL_CLASS",
      "title": "Choose your trial",
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_trial_class",
            "children": [
              {
                "type": "TextHeading",
                "text": "Book your trial class"
              },
              {
                "type": "TextBody",
                "text": "Tell us what you want to try and where you are starting from, and we will put you in the right class."
              },
              {
                "type": "RadioButtonsGroup",
                "name": "class_type",
                "label": "Class to try",
                "data-source": [
                  {
                    "id": "yoga_flow",
                    "title": "Yoga flow",
                    "description": "Moving sequences for strength and mobility. Mats provided."
                  },
                  {
                    "id": "reformer_pilates",
                    "title": "Reformer Pilates",
                    "description": "Low-impact, machine-based core work. Grip socks required."
                  },
                  {
                    "id": "hiit",
                    "title": "HIIT circuit",
                    "description": "45 minutes of high-intensity intervals. Bring water and a towel."
                  },
                  {
                    "id": "strength",
                    "title": "Strength training",
                    "description": "Coached barbell and dumbbell session in small groups."
                  },
                  {
                    "id": "martial_arts",
                    "title": "Martial arts fundamentals",
                    "description": "Stance, technique and pad work. No sparring in trial classes."
                  }
                ],
                "required": true
              },
              {
                "type": "RadioButtonsGroup",
                "name": "experience_level",
                "label": "Experience level",
                "data-source": [
                  {
                    "id": "complete_beginner",
                    "title": "Complete beginner"
                  },
                  {
                    "id": "some_experience",
                    "title": "Some experience",
                    "description": "Trained on and off in the last year"
                  },
                  {
                    "id": "regular",
                    "title": "Train regularly",
                    "description": "Two or more sessions a week"
                  },
                  {
                    "id": "returning",
                    "title": "Returning after a break"
                  }
                ],
                "required": true
              },
              {
                "type": "CheckboxGroup",
                "name": "fitness_goals",
                "label": "Your goals",
                "data-source": [
                  {
                    "id": "lose_weight",
                    "title": "Lose weight"
                  },
                  {
                    "id": "build_strength",
                    "title": "Build strength"
                  },
                  {
                    "id": "flexibility",
                    "title": "Improve flexibility"
                  },
                  {
                    "id": "stress_relief",
                    "title": "Reduce stress"
                  },
                  {
                    "id": "fitness_event",
                    "title": "Train for an event"
                  },
                  {
                    "id": "self_defence",
                    "title": "Learn self-defence"
                  },
                  {
                    "id": "rehab",
                    "title": "Recover from injury"
                  }
                ]
              },
              {
                "type": "CheckboxGroup",
                "name": "preferred_days",
                "label": "Days you can train",
                "data-source": [
                  {
                    "id": "mon",
                    "title": "Monday"
                  },
                  {
                    "id": "tue",
                    "title": "Tuesday"
                  },
                  {
                    "id": "wed",
                    "title": "Wednesday"
                  },
                  {
                    "id": "thu",
                    "title": "Thursday"
                  },
                  {
                    "id": "fri",
                    "title": "Friday"
                  },
                  {
                    "id": "sat",
                    "title": "Saturday"
                  },
                  {
                    "id": "sun",
                    "title": "Sunday"
                  }
                ],
                "required": true
              },
              {
                "type": "Footer",
                "label": "Continue",
                "on-click-action": {
                  "name": "navigate",
                  "next": {
                    "type": "screen",
                    "name": "TRIAL_DETAILS"
                  },
                  "payload": {}
                }
              }
            ]
          }
        ]
      }
    },
    {
      "id": "TRIAL_DETAILS",
      "title": "Your details",
      "terminal": true,
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_trial_details",
            "children": [
              {
                "type": "TextSubheading",
                "text": "A few details before you train"
              },
              {
                "type": "TextInput",
                "name": "member_name",
                "label": "Full name",
                "input-type": "text",
                "required": true
              },
              {
                "type": "TextInput",
                "name": "member_email",
                "label": "Email",
                "input-type": "email",
                "helper-text": "For your trial pass and class details"
              },
              {
                "type": "TextArea",
                "name": "injuries",
                "label": "Injuries/conditions",
                "helper-text": "Anything your coach should know before class"
              },
              {
                "type": "OptIn",
                "name": "health_declaration",
                "label": "I confirm I am fit to take part in exercise and have told you about any injuries or conditions.",
                "required": true
              },
              {
                "type": "OptIn",
                "name": "marketing_opt_in",
                "label": "Send me timetable updates and member offers on WhatsApp."
              },
              {
                "type": "TextCaption",
                "text": "We will message you with a class time. Please arrive 10 minutes early for your first session."
              },
              {
                "type": "Footer",
                "label": "Book my trial",
                "on-click-action": {
                  "name": "complete",
                  "payload": {
                    "class_type": "${screen.TRIAL_CLASS.form.class_type}",
                    "experience_level": "${screen.TRIAL_CLASS.form.experience_level}",
                    "fitness_goals": "${screen.TRIAL_CLASS.form.fitness_goals}",
                    "preferred_days": "${screen.TRIAL_CLASS.form.preferred_days}",
                    "member_name": "${form.member_name}",
                    "member_email": "${form.member_email}",
                    "injuries": "${form.injuries}",
                    "health_declaration": "${form.health_declaration}",
                    "marketing_opt_in": "${form.marketing_opt_in}"
                  }
                }
              }
            ]
          }
        ]
      }
    }
  ]
}

Raw JSON for scripts: curl -s https://whautomate.com/whatsapp-flow-templates/fitness-trial-class.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 fitness trial class sign-up flow

Trial classes are where studios win or lose members, and most of the losing happens before the class. A beginner put into an advanced vinyasa flow, or a nervous newcomer dropped into a sparring session, rarely comes back. This flow asks the two questions coaches care about most, the class type and the experience level, so you can place the person in a session where they will have a good first experience.

The goals checklist is for your sales follow-up, not for scheduling. Someone who ticks "lose weight" and "build strength" responds to a different membership pitch than someone who ticks "flexibility" and "stress relief". Preferred days tell you which timetable slots to offer and which membership tier (off-peak or full) fits them best.

Screen two ends with a health declaration. Physical activity carries risk, and most studios need a record that the participant disclosed injuries and confirmed they are fit to train. The OptIn returns a boolean you can store, and the injuries box gives the instructor something useful to read before the class starts.

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
class_type
yoga_flow, reformer_pilates, hiit, strength, martial_arts
RadioButtonsGroup TRIAL_CLASS Yes item id "yoga_flow"
experience_level
complete_beginner, some_experience, regular, returning
RadioButtonsGroup TRIAL_CLASS Yes item id "some_experience"
fitness_goals
lose_weight, build_strength, flexibility, stress_relief, fitness_event, self_defence, rehab
CheckboxGroup TRIAL_CLASS No array of ids ["flexibility","stress_relief"]
preferred_days
mon, tue, wed, thu, fri, sat, sun
CheckboxGroup TRIAL_CLASS Yes array of ids ["tue","thu","sat"]
member_name TextInput TRIAL_DETAILS Yes string "Daniel Okafor"
member_email TextInput (email) TRIAL_DETAILS No string "[email protected]"
injuries TextArea TRIAL_DETAILS No string "Old left knee injury, fine for most movements but I avoid deep lunges."
health_declaration OptIn TRIAL_DETAILS Yes boolean true
marketing_opt_in OptIn TRIAL_DETAILS No boolean false

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 Fitness Trial Class Sign-up 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",
  "class_type": "yoga_flow",
  "experience_level": "some_experience",
  "fitness_goals": [
    "flexibility",
    "stress_relief"
  ],
  "preferred_days": [
    "tue",
    "thu",
    "sat"
  ],
  "member_name": "Daniel Okafor",
  "member_email": "[email protected]",
  "injuries": "Old left knee injury, fine for most movements but I avoid deep lunges.",
  "health_declaration": true,
  "marketing_opt_in": false
}
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\",\"class_type\":\"yoga_flow\",\"experience_level\":\"some_experience\",\"fitness_goals\":[\"flexibility\",\"stress_relief\"],\"preferred_days\":[\"tue\",\"thu\",\"sat\"],\"member_name\":\"Daniel Okafor\",\"member_email\":\"[email protected]\",\"injuries\":\"Old left knee injury, fine for most movements but I avoid deep lunges.\",\"health_declaration\":true,\"marketing_opt_in\":false}"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  ]
}

Deploy with the WhatsApp Cloud API

Prefer code over WhatsApp Manager? Save the template as fitness-trial-class.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": "fitness_trial_class", "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-fitness-trial-class.json
{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "14155550123",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "Try a class on us"
    },
    "body": {
      "text": "Tell us what you would like to try and when suits you. We will match you to the right class and level and send your trial details."
    },
    "footer": {
      "text": "No experience needed"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "bk_8f2c41",
        "flow_id": "YOUR_FLOW_ID",
        "flow_cta": "Book a trial class",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "TRIAL_CLASS"
        }
      }
    }
  }
}
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-fitness-trial-class.json

When to send it

Instagram and Facebook ads

Send it as the first reply to click-to-WhatsApp ads promoting a free or discounted trial, so ad clicks become placed trial bookings, not "hi, how much?" chats.

Walk-in and front desk

Put a QR code at reception that opens a WhatsApp chat with a "trial" keyword. The chatbot sends the flow and the prospect signs up before they leave.

New year and September pushes

Broadcast a Flow-button template to past enquirers and lapsed leads during the two big fitness sign-up seasons.

Referral from a member

When a member brings a friend, send the friend the flow so their waiver and experience level are on file before they arrive.

How to customise this template

  • Replace the class types with your real formats and write descriptions that set expectations: intensity, what to wear, whether equipment is provided.
  • Keep three to four experience levels. More than that and prospects over- or under-rate themselves; fewer and a complete beginner cannot tell where they fit.
  • Rewrite the health declaration with your own wording and have it checked for your jurisdiction. The OptIn label allows 120 characters, so link to the full terms with an EmbeddedLink if you need more.
  • For martial arts clubs with junior classes, add a guardian name field and a separate OptIn for parental consent, and keep adult and junior classes as different ids.

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

  • Do not tell prospects they are booked into a specific class unless you actually reserve the spot. A static flow cannot see capacity, so a full 7am class will still accept the request.
  • The health declaration is not a medical assessment. If someone lists a serious injury or condition, have a coach reply before the class, not after they arrive.
  • preferred_days returns an array of ids such as ["mon", "wed"]. Handle an empty array if you make it optional, and avoid inferring "no availability" from it.
  • Follow up quickly. Trial sign-ups go cold within a day or two, so reply with a specific class time the same day, ideally from a coach rather than a generic account.

Book real class spots, not just interest

Whautomate includes a built-in class booking flow that shows your live class schedule and books the spot inside WhatsApp. It is published in your account automatically and runs on an endpoint Whautomate hosts, so capacity and dates always match your timetable.

  • Live class schedule and dates
  • Books the participant directly
  • Single and multi-location versions

7-day free trial, no credit card required.

Frequently asked questions

Not as a static flow, because it cannot read your schedule or class capacity. It records what the prospect wants to try and when. Booking directly into a live class needs a data_exchange endpoint, which is what Whautomate's built-in class booking flow provides.
health_declaration is a required OptIn, so it is always true on a submitted response. marketing_opt_in is optional and returns true or false. Store both with the timestamp and flow_token.
Goals drive your conversion follow-up. They tell a coach what to talk about after the trial and which membership or class pack to suggest, which is far more persuasive than a generic price list.
Either is accepted. SIGN_UP fits because the output is a new prospect record with a waiver; APPOINTMENT_BOOKING fits if you treat the trial as a scheduled session. The category does not change how the flow works.

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.