pass_series.leg_dropped
A cancelled date left a holder's season with no replacement, carrying the pro-rata figure.
When this fires
A creator cancelled a window that a season ticket points at, no replacement was available, and that date simply left one holder's season. The rest of their slate is untouched.
This is the event that carries money information, and it is the one worth wiring up: it is the only durable record of who is owed what.
refund_per_holderis a figure, not an action. Subscriby works out what the date was worth as a share of what the holder paid, and reports it. It does not move any money. Nothing is charged or refunded automatically, and nothing in the dashboard marks the subscription as owing. A Zap that reads this as "already refunded" will double-refund. A Zap that reads it as "this is what you owe" is correct.
Caveats
- The figure is per holder, not per cancellation. Two people can be owed different amounts for the same cancelled date: a mid-season buyer paid the same price for fewer dates, so each of theirs is worth more. Sum the events; do not multiply one by a headcount.
series_ended: trueis worth handling separately. That holder's season is over, and an upsell to "the next date" is exactly wrong for someone who has just been told there is not one.- The same three groups skipped by substitution are skipped here too: paused, past due, and holders who cancelled their own series. They produce no event and are absent from any total you compute from these.
- Refunds are issued from your payment provider's dashboard. See Refunds.
Related events
pass.holder_stranded: the equivalent on an ordinary single-window pass, where the whole purchase ends rather than one date of it.pass_series.leg_substituted: what happens when a replacement exists.pass.window_cancelled: fires once, last, carrying both tallies.
Header Parameters
t=<unix seconds>,v1=<hex>: the HMAC-SHA256 of "<t>.<raw body>" under the endpoint's secret. Verify it before acting, and refuse a t more than 300 seconds from now. During a secret rotation a v0= signature under the previous secret may precede v1=.
The event's ULID, bare. The envelope's id is the same ULID prefixed evt_, so strip the prefix before comparing. Deduplicate on it: a retry carries the same id.
The event name, the same as the envelope's type.
Always application/json.
Always Subscriby-Webhooks/1.0.
Request Body
application/json
The signed JSON envelope posted to your endpoint.
TypeScript Definitions
Use the request body type in TypeScript.
The envelope every event is delivered in.
Response Body
Example Requests
/pass_series.leg_droppedHow is this guide?