Troubleshooting
Stripe webhook events aren’t being received
Confirm your webhook URL is https://yoursite.com/actions/headcount/webhook/stripe and that the signing secret in your config matches Stripe’s. Since 5.3.3 a missing or unresolved signing secret means every Stripe webhook is refused with a 400 (the settings screen shows a warning); the same goes for PayPal without a webhook ID. Webhook events are logged to headcount_webhook_logs — check that table to verify whether events are arriving. Run php craft headcount/sync/status for a summary.
Subscriptions show in Stripe but not in Craft
Run php craft headcount/subscriptions/sync to pull all active subscriptions from Stripe/PayPal into Craft. This is also a useful recovery step after webhook downtime.
User not added to plan’s user group after subscribing
Make sure the plan has a Craft user group selected in Headcount → Plans. Group sync runs on subscription activation; if the subscription is still past_due (for example, the initial payment hasn’t cleared), the group won’t be assigned until it becomes active.
Gated entries are still visible to non-members
Check Headcount → Access Rules to confirm a rule covers the entry’s section, type, or category. Note that admins always see gated content. Gating only fires on front-end requests, not in the control panel.
Drip content unlocks too early or too late
Drip schedules count from a member’s subscription start date, not the entry’s post date. Verify the drip schedule’s delayDays value, and confirm that you’re using craft.headcount.isUnlocked(entry) rather than a date-based check.
PayPal isn’t showing as an option
Set paypalEnabled to true in config/headcount.php and ensure both paypalClientId and paypalClientSecret are populated. Restart your queue worker after config changes.
Coupon codes aren’t applying
Coupons must be enabled and either un-restricted or assigned to the plan being purchased. Headcount syncs codes to Stripe Coupons — if the Stripe-side coupon is missing, run php craft headcount/sync/plans to recreate provider records.
Outgoing webhooks aren’t firing
Outgoing webhooks are dispatched as queue jobs — ensure php craft queue/run is running on a 1–2 minute cron. Verify your webhook URL and signing secret in Headcount → Settings, and check the queue’s failed jobs for delivery errors.
Reports show no data
Reports are computed from active and historical subscriptions. If you’ve just imported subscriptions via headcount/subscriptions/sync, give the queue a minute to finish processing.
Getting Help
If you encounter issues, please open an issue on GitHub.