Webhooks
Subscribd automatically registers a webhook endpoint for each configured gateway at/subscribd/webhook/{gateway}. Incoming payloads are verified, deduplicated, and translated into Laravel events that your application can listen to.
Endpoint URLs
| Gateway | Endpoint |
|---|---|
| Stripe | https://yourapp.com/subscribd/webhook/stripe |
| PayPal | https://yourapp.com/subscribd/webhook/paypal |
| Braintree | https://yourapp.com/subscribd/webhook/braintree |
| Paddle | https://yourapp.com/subscribd/webhook/paddle |
| FastSpring | https://yourapp.com/subscribd/webhook/fastspring |
| Square | https://yourapp.com/subscribd/webhook/square |
Signature verification
Subscribd verifies every incoming webhook signature before processing. Configure the appropriate secret for each gateway:403 response and are never processed. Do not disable signature verification in production.
Idempotency
Subscribd records every processed webhook event insubscribd_webhook_events. If a gateway retries delivery, the duplicate payload is detected by its event ID and acknowledged without reprocessing. This table is pruned automatically according to subscribd.webhook.retention_days (default: 30).
Events dispatched by webhook handlers
When a verified webhook payload is processed, Subscribd dispatches the corresponding Laravel event. Your listeners receive a fully hydrated local model — you do not need to interact with the gateway API inside your listener.| Gateway event | Subscribd event |
|---|---|
| Subscription created / activated | SubscriptionCreated |
| Subscription updated | SubscriptionUpdated |
| Subscription canceled | SubscriptionCanceled |
| Subscription past due | SubscriptionPastDue |
| Trial ending soon | TrialEndingSoon |
| Invoice paid | InvoicePaid |
| Invoice payment failed | InvoicePaymentFailed |
| Checkout completed (Paddle/FastSpring) | SubscriptionCreated |
Configuring webhooks per gateway
Stripe
In the Stripe Dashboard, create an endpoint pointing tohttps://yourapp.com/subscribd/webhook/stripe and enable:
customer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedinvoice.paidinvoice.payment_failedinvoice.payment_action_requiredcheckout.session.completed
STRIPE_WEBHOOK_SECRET.
PayPal
In your PayPal Developer App, add a webhook forhttps://yourapp.com/subscribd/webhook/paypal. Enable:
BILLING.SUBSCRIPTION.CREATEDBILLING.SUBSCRIPTION.ACTIVATEDBILLING.SUBSCRIPTION.UPDATEDBILLING.SUBSCRIPTION.CANCELLEDPAYMENT.SALE.COMPLETEDPAYMENT.SALE.DENIED
PAYPAL_WEBHOOK_ID.
Braintree
In the Braintree Control Panel under Settings > Webhooks, addhttps://yourapp.com/subscribd/webhook/braintree and enable:
subscription_charged_successfullysubscription_charged_unsuccessfullysubscription_canceledsubscription_expiredsubscription_went_past_duesubscription_trial_ended
Paddle
In the Paddle Dashboard, create a notification destination forhttps://yourapp.com/subscribd/webhook/paddle and enable:
subscription.createdsubscription.updatedsubscription.canceledsubscription.pausedsubscription.resumedtransaction.completedtransaction.payment_failed
PADDLE_WEBHOOK_SECRET.
FastSpring
In your FastSpring Dashboard under Developer > Webhooks, configurehttps://yourapp.com/subscribd/webhook/fastspring and enable:
subscription.activatedsubscription.updatedsubscription.canceledsubscription.deactivatedorder.completedorder.failed
FASTSPRING_WEBHOOK_SECRET.
Square
In the Square Developer Dashboard, configurehttps://yourapp.com/subscribd/webhook/square and enable:
subscription.createdsubscription.updatedsubscription.canceledsubscription.expiredinvoice.payment_madeinvoice.payment_failedpayment.completedpayment.failed
SQUARE_WEBHOOK_SIGNATURE_KEY.
Local development
Use the Stripe CLI to forward Stripe webhooks to your local app:STRIPE_WEBHOOK_SECRET in your .env while developing locally.
For other gateways, tools like ngrok or Expose can create a public tunnel to your local server.
Queue configuration
Webhook processing runs on the queue. Ensure your queue worker is running:subscribd.queue:
billing queue is recommended:
Replaying webhook events
Replay a previously received webhook event by its ID:Next steps
- Hooks and Events — Full event reference and listener registration
- Dunning — Automatic retry logic for failed payments