Skip to content

Connect Stripe to My Academy HQ

Accept tuition payments, automate invoicing, and track billing — all powered by Stripe. Follow these steps to connect your account in under 10 minutes.

1

Create Your Stripe Account

If you do not have a Stripe account, go to stripe.com and click Start now.

Complete the onboarding process. You will need your school's legal name, bank account details, and tax information.

Once your account is active, you can access the Stripe Dashboard.

2

Find Your API Keys

In the Stripe Dashboard, navigate to Developers → API keys.

Copy your Publishable key (starts with pk_live_).

Click Reveal live key to copy your Secret key (starts with sk_live_).

Keep both keys somewhere secure — you will need them in a later step.

Use your live keys for production. Test keys (starting with pk_test_ / sk_test_) are for development only and will not process real payments.

3

Create a Webhook Endpoint

In the Stripe Dashboard, open Workbench → Webhooks. If your account still shows the older Developers Dashboard, use Developers → Webhooks.

Click Create new destination or Create an event destination.

Select API version 2026-07-29.dahlia (recommended), then choose Events on your account. Do not choose connected-account events.

Existing endpoints using 2026-02-25.clover remain supported and do not need to be recreated. My Academy HQ accepts both Clover and Dahlia webhook payloads while new API requests use Dahlia.

Select the following event types. This complete set supports every My Academy HQ billing workflow and is checked by Test Connection.

Recurring payment setup

Checkout setup, subscription schedules, and subscription status changes.

  • checkout.session.completed
  • checkout.session.expired
  • subscription_schedule.created
  • subscription_schedule.updated
  • subscription_schedule.canceled
  • subscription_schedule.completed
  • subscription_schedule.released
  • customer.subscription.created
  • customer.subscription.updated
  • customer.subscription.deleted

Invoices and payments

Invoice status, full and partial payments, failures, and ACH processing.

  • invoice.created
  • invoice.updated
  • invoice_payment.paid
  • invoice.paid
  • invoice.payment_succeeded
  • invoice.payment_failed
  • invoice.voided
  • invoice.marked_uncollectible
  • payment_intent.processing
  • charge.pending

Refunds

Successful, pending, updated, and failed refund reconciliation.

  • charge.refunded
  • refund.created
  • refund.updated
  • refund.failed
Why the full list? A basic invoice can sync from invoice.paid alone. The additional events cover recurring schedules, ACH processing, partial or multiple invoice payments, void and uncollectible states, and refund failures.

Continue, choose Webhook endpoint, and paste the Webhook URL shown on your My Academy HQ Integrations page:

https://app.apogee.dev/api/webhooks/stripe/your-school-slug

Create the destination, open it, and click Reveal under Signing secret to copy your Webhook Secret (starts with whsec_).

4

Enter Your Keys in My Academy HQ

In your admin dashboard, go to Settings → Integrations.

Paste your Publishable Key, Secret Key, and Webhook Secret into the Stripe card fields.

Click Save Changes.

Then click Test Connection. The badge updates to “Ready” only after the Stripe account and webhook endpoint both pass verification. Until then, online invoices and payment links stay paused.

Troubleshooting

Payments are failing or not appearing+
Verify you are using live keys (not test keys). Confirm the webhook endpoint URL matches exactly. Check that your Stripe account has completed onboarding and is activated.
Webhook events are not being received+
Ensure the event destination is enabled, the signing secret matches what you entered, and it includes all 24 listed events. In Stripe Workbench under Webhooks, open the destination's Event deliveries tab to check for failed attempts.
ACH payments stay Invoiced instead of Processing+
Confirm your Stripe webhook endpoint sends payment_intent.processing. ACH payments can remain pending for several days, and this event lets My Academy HQ show them as Processing while Stripe finishes the transfer.
I see 'Setup Needed' after saving+
All three keys (publishable, secret, and webhook secret) must be saved, and Test Connection must succeed. If the account connects but the badge remains unchanged, confirm the endpoint is enabled, includes every required event, and uses a supported API version: 2026-02-25.clover or 2026-07-29.dahlia.

Ready to start accepting payments?

Head to your Integrations settings to connect Stripe now.

Go to Integrations