Skip to main content

Membership & Direct Debit

When a trial lead reaches Trial 2 status, the instructor can send them a membership offer SMS. The parent follows a secure link, fills in a short form, and is directed to GoCardless to set up a Direct Debit mandate — all without leaving the browser.


How it works​

  1. Lead reaches Trial 2 in the pipeline
  2. Instructor taps Send Membership Offer — this sends the SMS and advances the lead to Invited in one action
  3. Parent receives a personalised link: https://yourclub.r4ptor.app/membership?t=TOKEN
  4. Parent fills in their address and accepts three consents (photo, cancellation policy, membership confirmation)
  5. Parent is redirected to GoCardless to set up their Direct Debit mandate
  6. On return, a Tasks notification is created for the instructor: "Set up GoCardless subscriptions for [name]"
  7. The lead is automatically converted to Joined as soon as the mandate is created — no waiting for bank confirmation

The membership form​

The form is token-secured — it cannot be accessed without the unique link sent via SMS. It pre-fills all known information from the trial record so parents don't re-enter data.

What the form collects​

FieldNotes
Home addressRequired for GoCardless
Photo consentOptional opt-in
Cancellation policy acknowledgementRequired
Membership confirmationRequired

Fee display​

The form shows the applicable monthly fee based on the student's class:

Class typeFee setting
Snakes & CranesMEMBERSHIP_FEE_SNAKES_CRANES
JuniorsMEMBERSHIP_FEE_JUNIORS
TeensMEMBERSHIP_FEE_TEENS
Unknown / otherAll tiers shown as fallback

The annual affiliation / insurance fee (AFFILIATION_FEE_JUNIOR) is also shown.


GoCardless integration​

Each r4ptor instance connects directly to the club's own GoCardless account — there is no shared payments infrastructure.

Setup​

  1. Create a GoCardless account at gocardless.com
  2. In the GoCardless dashboard, go to Developers → API Keys and copy your access token
  3. In r4ptor: Admin → Settings → set GC_ACCESS_TOKEN and GC_ENVIRONMENT (sandbox or live)
  4. In GoCardless: go to Developers → Webhooks → create a new endpoint:
    • URL: https://yourclub.r4ptor.app/api/membership/webhook
    • Events: mandates
    • Copy the webhook secret
  5. In r4ptor: Admin → Settings → set GC_WEBHOOK_SECRET

What r4ptor manages​

ActionWhen
Creates GoCardless redirect flowWhen parent submits membership form
Stores mandate ID and customer IDWhen parent completes GoCardless flow
Creates instructor taskImmediately — mandate is ready for subscriptions
Converts lead to JoinedWhen mandates.created webhook fires — immediately on mandate setup
Reverts lead to InvitedIf mandate is later cancelled, fails, or expires — while still an Invited/Joined lead
Raises a task for the studentIf a mandate is cancelled, fails, or expires after the person has already fully joined as a Student — see Mandate cancelled after joining below

Reminder nudges​

If a parent doesn't complete the membership form after Send Membership Offer is tapped, r4ptor automatically re-sends the same offer as a reminder:

ReminderSent
1st nudge2 days after the original offer
2nd nudge4 days after the original offer
3rd and final nudge7 days after the original offer

No more than 3 automatic reminders are ever sent for a given lead. The instructor can still tap Send Membership Offer manually at any time — this sends an extra copy immediately but doesn't reset or extend the automatic schedule above.

Mandate cancelled after joining​

Occasionally a member's Direct Debit mandate is cancelled, fails, or expires well after they've already joined — not during the initial signup. Since the lead has long since converted, there's no "lead" left to revert. Instead, r4ptor raises a High priority task for that student — "Contact [First Last] — mandate cancelled" (or failed / expired) — so it gets picked up the same way any other GoCardless task does. See Tasks for how these are managed.

r4ptor checks for this roughly once an hour — it isn't instant, but nothing is missed without someone actively watching GoCardless.

What the instructor manages in GoCardless​

Once the task appears, log in to GoCardless and manually create:

  • Monthly training subscription against the new mandate
  • Annual Membership/Insurance subscription against the same mandate

This is intentional — it gives the instructor flexibility for custom arrangements (family discounts, payment plans, etc.) and keeps a human in the loop for financial setup.


Recent Payments​

Admin → Financial shows the last 20 GoCardless payments, matched back to the student they belong to.

Matching works against a student's mandate or subscription ID, using whichever GoCardless customer record set up the Direct Debit. If a family's bill payer is registered in GoCardless under different contact details than the student's own record (a grandparent, ex-partner, etc.), add those details as the student's secondary phone/email (see People → Editing a student profile) so the match can still be made. Secondary contact details are never used for comms — matching only.

A student's subscription is re-synced automatically each time Import Mandates runs, so a class or fee change (which GoCardless handles as cancel-and-recreate rather than an in-place edit) doesn't leave the match pointing at a stale, cancelled subscription.

Failed payment alerts​

r4ptor checks GoCardless roughly once an hour for payments that failed or were later reversed (charged back). When one is found and can be matched to a student, a High priority task is raised automatically — "Payment failed — [First Last]" — with the amount and date, so instructors don't need to check GoCardless manually to catch a bounced payment. See Tasks.


Grading Fee Payments​

If your branch has turned on SumUp Order Tracking, Admin → Financial also shows a Grading Fee Payments table — the full history of every grading-fee order received, whichever student, order number, amount, date, and whether it applied automatically or is still waiting on a manual match.

If an applied order's student shows Paid but isn't yet Confirmed for the next Grading Day, a flag next to their row lets you mark them Confirmed without leaving this page — the same flag also appears on the Attendance Grid. See Grading Day → Payments for how a payment gets matched in the first place.


Tasks​

When a mandate is successfully created, a High priority task is automatically added to the instructor's Tasks list:

Set up GoCardless subscriptions for [First Last] Mandate MD0… is ready. Log in to GoCardless and create:

  • Monthly training subscription
  • Annual Membership/Insurance subscription

See Tasks for how to manage these.


Webhook configuration​

The webhook endpoint is per-instance — each club handles their own GoCardless events. Signature verification is enforced when GC_WEBHOOK_SECRET is set (strongly recommended for live environments).

SettingDescription
GC_ENABLEDtrue / false — enables the GoCardless flow
GC_ENVIRONMENTsandbox or live
GC_ACCESS_TOKENYour GoCardless API key
GC_WEBHOOK_SECRETWebhook signing secret from GoCardless dashboard

AppSettings reference​

KeyDescription
GC_ENABLEDEnable the GoCardless mandate flow
GC_ENVIRONMENTsandbox for testing, live for real mandates
GC_ACCESS_TOKENGoCardless API access token
GC_WEBHOOK_SECRETWebhook HMAC secret for signature verification
MEMBERSHIP_FEE_SNAKES_CRANESMonthly fee for Snakes & Cranes class (£)
MEMBERSHIP_FEE_JUNIORSMonthly fee for Juniors class (£)
MEMBERSHIP_FEE_TEENSMonthly fee for Teens class (£)
AFFILIATION_FEE_JUNIORAnnual membership/insurance fee (£)
UNIFORM_STORE_URLOptional link to kit/uniform shop shown on confirmation page