Patreon Integration
Dispatch integrates with Patreon to receive webhook events when patrons join, pledges change, or posts are published on your campaign.
Connecting Patreon
- Navigate to your project's Sources page
- Click Add Source and pick Patreon
- Authorize the Dispatch Patreon app (scopes:
identity,campaigns,w:campaigns.webhook) - Pick the campaign you want to receive events from
- Choose which triggers to receive (members, pledges, posts)
Dispatch will:
- Create a webhook on your Patreon campaign pointing at the Dispatch ingress URL
- Persist the per-webhook signing secret returned by Patreon so signatures can be verified
- Create a
provider = "patreon"endpoint configured for the selected triggers
Supported Triggers
The event type is extracted from the X-Patreon-Event header on each delivery.
| Trigger | Description |
|---|---|
members:create | A new patron joins (only fires the first time there is no prior payment with the creator) |
members:update | Membership state changes — including renewal, payment status, or tier change |
members:delete | Membership is removed (only when no prior payment exists) |
members:pledge:create | A pledge is created |
members:pledge:update | An existing pledge is upgraded, downgraded, or otherwise modified |
members:pledge:delete | A pledge is cancelled |
posts:publish | A new post is published on the campaign |
posts:update | A post is edited |
posts:delete | A post is removed |
Signature Verification
Patreon webhooks include an X-Patreon-Signature header containing an HMAC-MD5 hex digest of the request body, signed with the per-webhook secret returned by the Patreon API when the webhook was created. Dispatch verifies this on every delivery; requests with a missing or invalid signature are rejected.
X-Patreon-Signature: <hex-encoded-hmac-md5>
X-Patreon-Event: members:pledge:create
The signing secret is set automatically when you connect Patreon through Dispatch.
Auto-Formatted Embeds
When no custom template is assigned, Dispatch auto-detects Patreon payloads and renders specialised embeds covering every field documented in the Patreon API v2 reference.
Member events
| Field surfaced | Source attribute |
|---|---|
| Title / name | full_name (falls back to email) |
| Status | patron_status (Active / Declined / Former) or is_follower |
| Membership type | is_free_trial / is_gifted (rendered as headline) |
| Pledge | currently_entitled_amount_cents + pledge_cadence (monthly / annual) |
| Next charge amount | will_pay_amount_cents (only shown when it differs from current pledge — e.g. mid-cycle upgrade) |
| Lifetime | campaign_lifetime_support_cents (with legacy fallback to lifetime_support_cents) |
| Last charge | last_charge_status — every documented status (Paid, Declined, Deleted, Pending, Refunded, Refunded by Patreon, Partially Refunded, Fraud, Free Trial, Refund Pending, Refund Declined, Other) |
| Charged on | last_charge_date |
| Next charge | next_charge_date |
| Pledged since | pledge_relationship_start |
email (when the campaigns.members[email] scope is granted) | |
| Tiers | resolved from relationships.currently_entitled_tiers via the included array |
Pledge events
| Field | Source attribute |
|---|---|
| Title / patron | resolved from relationships.patron via included |
| Amount | amount_cents |
| Cap | pledge_cap_cents |
| Created | created_at |
| Declined | declined_since (turns the embed red) |
| Fees | patron_pays_fees |
Post events
| Field | Source attribute |
|---|---|
| Title (linked) | title + url |
| Description | content with HTML tags stripped and entities decoded; falls back to teaser_text when empty |
| Author | resolved from relationships.user via included |
| Published | published_at |
| Visibility | is_public → Public / Patrons only |
| Billing | is_paid (post incurs a charge) |
| Processing | app_status when not published |
| Tiers | resolved from relationships.tiers via included |
| Embed | embed_url |
Disconnecting
To disconnect a Patreon campaign:
- Open Sources and find the Patreon endpoint
- Click Disconnect
- Dispatch deletes the webhook from your Patreon campaign and removes the endpoint