Appstle Memberships webhooks deliver real-time HTTP notifications to your server whenever a membership event occurs. Webhooks are powered by Svix — enterprise-grade infrastructure with automatic retries, cryptographic signature verification, and detailed delivery monitoring.Documentation Index
Fetch the complete documentation index at: https://appstleinc-aeca3e0a.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Getting started
Select events
Choose which events you want to receive, or subscribe to all events to ensure you never miss one.
Webhooks are available on paid plans. Contact support@appstle.com to enable access.
How webhooks work
Webhooks are HTTPPOST requests sent to your endpoint whenever a membership event occurs. Your endpoint must:
- Be publicly accessible via HTTPS
- Return a
2xxstatus code within the timeout window - Process events asynchronously — queue them for background processing, then respond immediately
Event types
Membership lifecycle events
| Event | Description |
|---|---|
membership.created | New membership contract created |
membership.updated | Membership details modified |
membership.activated | Membership activated |
membership.paused | Membership paused |
membership.cancelled | Membership cancelled |
membership.expired | Membership expired at end of term |
membership.swap-product | Product or plan in membership changed |
membership.next-order-date-changed | Next renewal date rescheduled |
membership.billing-interval-changed | Billing frequency changed |
Billing events
| Event | Description |
|---|---|
membership.billing-success | Renewal payment processed successfully |
membership.billing-failure | Renewal payment failed |
Payload structure
All webhooks share this top-level structure:data field contains the event-specific payload.
Membership contract payload
The lifecycle eventsmembership.created, membership.updated, membership.activated, membership.paused, membership.cancelled, membership.expired, membership.swap-product, membership.next-order-date-changed, and membership.billing-interval-changed all deliver a full membership contract object:
Billing success payload
Billing failure payload
billingAttemptResponseMessage values:
| Value | Meaning |
|---|---|
INVALID_PAYMENT_METHOD | Payment method is expired or invalid |
INSUFFICIENT_FUNDS | Insufficient account balance |
CARD_DECLINED | Card declined by issuer |
AUTHENTICATION_REQUIRED | Customer must re-authenticate their payment method |
EXPIRED_PAYMENT_METHOD | Payment method has expired |
Signature verification
Every webhook request is signed by Svix. Always verify the signature before processing the payload — this ensures the request genuinely came from Appstle and has not been tampered with. Svix includes three headers on every request:| Header | Description |
|---|---|
svix-id | Unique message ID — use as an idempotency key |
svix-timestamp | Unix timestamp of when the message was sent |
svix-signature | HMAC-SHA256 signature |
Retry schedule
If your endpoint returns a non-2xx status code or times out, Svix retries with exponential backoff across 5 attempts over 3 days. You can view delivery history and manually replay events from your Appstle dashboard under Settings → Webhooks → Message Logs.
Idempotency
Webhooks can be delivered more than once. Use thesvix-id header value as an idempotency key to safely deduplicate events in your database before processing.
Local development
Use ngrok to expose your local server for webhook testing:Troubleshooting
| Issue | Solution |
|---|---|
| Signature verification fails | Use the raw request body before JSON parsing. Verify you are using the correct signing secret from the dashboard. |
| Endpoint timing out | Return 200 OK immediately, then process the event asynchronously in a background job or queue. |
| Not receiving events | Confirm the webhook integration is enabled in Settings and that your endpoint is publicly accessible via HTTPS. |
| Duplicate events | Use the svix-id header as a deduplication key before processing. |