pass_series.leg_completed

One date of a holder's season finished, with their running attendance.

Ability to subscribeproject-subscription:view

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

  • granted and joined are 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_missed will not equal passes_total mid-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_remaining reaches 0, pass_series.completed fires 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

SB-Signature*string

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=.

SB-Event-Id*string

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.

SB-Event-Name*string

The event name, the same as the envelope's type.

Content-Type*string

Always application/json.

User-Agent*string

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

POST/pass_series.leg_completed

How is this guide?