pass_series.leg_completed
One date of a holder's season finished, with their running attendance.
When this fires
One window on a season ticket closed for one holder. It fires per holder per date, so a ten-date season sold to forty people emits four hundred of these across its run.
It is the progress event. Where pass.holder_missed answers "did they turn up", this answers "where are they in the season", which is what an integration syncing a timetable or scoring engagement actually needs.
Caveats
grantedandjoinedare tracked separately on purpose. Granted means Subscriby admitted them; joined means they actually appeared. A date can be granted and not joined (a held request approved into a channel the person never opened) and that distinction is the difference between a delivery problem and a disengaged customer.passes_attended + passes_missedwill not equalpasses_totalmid-season. The remainder is dates still ahead, plus any marked as already covered because the holder owned them individually before buying the series.- When
passes_remainingreaches0,pass_series.completedfires for the same holder in the same pass. Both are emitted; de-duplicate if you only want one. - Two holders of the same series reach the same date at different points in their own season if one bought mid-way; the counts are per purchase, never per plan.
Related events
pass_series.completed: the final date of a holder's season.pass.holder_missed: the same close, when they did not turn up.pass.window_closed: the window-level aggregate.
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_completedHow is this guide?