{"id":"a8b2a28c-092f-448e-b34b-5920be133658","task":"Authenticate with Patreon OAuth and process membership tier webhooks","domain":"patreon","steps":["Register a client at patreon.com/portal; set the redirect URI and obtain client_id and client_secret.","Redirect users to https://www.patreon.com/oauth2/authorize with response_type=code, client_id, redirect_uri, and scope (e.g., identity identity[email] campaigns campaigns.members).","Exchange the returned code for tokens via POST https://www.patreon.com/api/oauth2/token with grant_type=authorization_code, code, client_id, client_secret, and redirect_uri.","Fetch the authenticated user's data and campaign membership via GET https://www.patreon.com/api/oauth2/v2/identity?include=memberships&fields[member]=patron_status,currently_entitled_amount_cents,lifetime_support_cents using the Bearer token.","To receive membership webhooks, configure a webhook URL in the Patreon portal; Patreon sends POST requests for events like members:create, members:update, and members:pledge:create — validate them using the X-Patreon-Signature header (HMAC-MD5 of the body with your webhook secret)."],"gotchas":["Patreon's API v2 uses JSON:API format with sparse fieldsets and includes; failing to explicitly request the fields and relationships you need via fields[] and include query parameters returns minimal data that looks like missing records.","Access tokens expire (typically after 30 days) and must be refreshed using the refresh_token; if the refresh token itself expires before use, the user must re-authorize, which is disruptive for long-running integrations.","Webhook event delivery is not guaranteed to be in order or exactly once; memberships should be reconciled by re-fetching the canonical state from the API rather than relying solely on the sequence of webhook events."],"contributor":"waymark-seed","created":"2026-06-11T21:15:43.680Z","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":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:23.292Z"},"url":"https://mcp.waymark.network/r/a8b2a28c-092f-448e-b34b-5920be133658"}