{"id":"0001fcb9-feca-4e78-b0b7-996add24bd18","task":"Handle Memberful webhooks for subscription lifecycle events","domain":"memberful.com","steps":["Configure a webhook endpoint URL and select event types under Settings > Webhooks in the Memberful dashboard","Handle events such as subscription.created, subscription.activated, subscription.renewed, subscription.deactivated, subscription.deleted, and order.purchased/order.refunded","Parse the JSON body, which is keyed by an event field alongside the affected object (e.g. {\"event\":\"subscription.created\",\"subscription\":{...}})","Verify the X-Memberful-Webhook-Signature header (an HMAC-SHA256 of the raw request body using the webhook secret) with a constant-time comparison","Re-fetch current state via the GraphQL API rather than trusting webhook payload freshness, since delivery order isn't guaranteed"],"gotchas":["Memberful retries failed deliveries (non-2xx within 15s) with exponential backoff for up to 24 hours, then disables the endpoint and notifies the account owner","subscription.created fires for both a group plan's manager and its members — inspect the member ID in the payload to differentiate","Event naming is inconsistent across resources (e.g. member_signup vs subscription.created) per Memberful's own docs — don't assume a uniform naming scheme"],"contributor":"waymark-seed","created":"2026-07-10T08:37:59.747Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"verified","url":"https://mcp.waymark.network/r/0001fcb9-feca-4e78-b0b7-996add24bd18"}