Time-Limited Passes
Sell access to a scheduled window — customers buy in advance, access opens and closes on time, automatically.
An ordinary subscription starts the moment someone pays. A time-limited pass doesn't — it grants access during a window you schedule. Someone can buy your Sunday pass on Wednesday, be admitted Sunday morning, and be removed Sunday night, without you touching anything on the day.
One purchase buys one window. To attend another window, the customer buys another pass — or you bundle a whole slate of windows into a Pass Series and sell it as a season ticket.
Available on every plan — bundled on Growth, an addon elsewhere
Time-Limited Passes is included in Growth. On Free and Starter you can unlock it with the Passes Addon, billed on your plan's cycle — $19 USD per month, or $190 USD per year on an annual Starter plan. Free is monthly-only, so the addon is always the monthly price there. See Addons for what happens when you add, remove or change it.
Ordinary recurring plans are available on every tier, including the free one.
When to use one
Passes fit anything sold by the occasion rather than by the month:
- A sports handicapper selling per-slate access — Thursday, Saturday, Sunday, Monday
- A trader running a London-session or market-open room
- An educator selling a seat in a scheduled class or cohort
- An analyst opening a channel on the day a report drops
If your product is an ongoing membership, use an ordinary subscription plan instead. If a buyer should get a whole set of dates from one payment — a season, a course, a cohort — build the pass plans first and then bundle them into a Pass Series.
The three kinds of plan
Every plan starts with one choice, and it is the choice that decides which half of the form you see next.
| Kind | What it sells | Renews |
|---|---|---|
| Recurring Subscription | The traditional subscription. Nothing is scheduled — members pay each cycle and keep access for as long as they keep paying. | Yes, on a cycle |
| Time-Limited Pass | A ticket to one dated session — workshops, match days, one-off events. Access opens and closes on its own and never renews. | No |
| Pass Series | A season ticket over many passes — seasons, courses, cohorts. One payment covers every pass you bundle from your pass plans. | No |
This page is the middle one. The distinction that matters against the third: a pass plan owns its own dates and generates them from a schedule, while a series owns none — it points at dates that already exist on pass plans like this one. Build these first, and a Pass Series can then bundle them.
Both scheduled kinds are unlocked by the same capability and neither carries an extra transaction fee.
Creating one
Choose Time-Limited Pass
Open Create New Subscription Plan, pick Time-Limited Pass from the three cards at the top, then fill in the name, description and linked resources as usual.
The pricing, trial and recurring sections are replaced by Pass Schedule — a pass is a one-off purchase, so there is nothing to renew and no trial to run.
Switching the card at any point discards the shape you moved away from: schedule slots are not kept if you save the plan as a subscription. Only the shape the plan is saved as is persisted.
Pick the timezone
Times you enter are wall-clock times in this timezone. A 9:00 AM window stays 9:00 AM after a daylight-saving change rather than drifting by an hour.
It is prefilled from your account timezone, which Subscriby detects from your browser the first time you sign in. If the plan's timezone and your browser disagree, a warning appears under the field showing what your window times would actually mean — the one check that catches a zone you simply mis-picked.
A pass cannot go on sale until your timezone is confirmed
A pass is nothing but scheduled times, so a zone nobody ever confirmed puts windows on sale at an hour you never chose — and every screen afterwards renders that same zone, so nothing else in the product would ever disagree with it.
Until you confirm it, Activate Subscription Plan is replaced by Activate — Confirm Your Timezone First. Confirming takes one click in Localization settings: choosing a zone there — even the one already shown — counts. New pass plans are also created switched off for the same reason, so you see the generated dates before anything can sell.
Set the price and how often it repeats
Currency and Charge work exactly as they do on an ordinary plan — a pass can be priced in any currency an active payment method supports, and the price shown beside Add Window is what each window sells for, not the whole series.
Place Each Pass by Hand decides how the schedule is built:
- Off (the default) — windows are generated from a pattern. Best for a regular slate. Repeats then sets the pattern: Daily, Weekly or Monthly.
- On — no pattern at all. Repeats disappears, and you place each date by hand from Manage Access Windows after saving. Best for one-off events: a single match, a one-time workshop.
A hand-placed date is never removed when you later edit a repeating schedule, so you can also add one to a repeating plan for the occasional extra session that doesn't fit the pattern.
Stop selling closes sales a chosen number of minutes before each window — and the dropdown beside it chooses which end those minutes count back from. That second control does more than it looks: it decides whether a window can be bought at all once it has started.
| Anchor | What it means |
|---|---|
| before a window starts (default) | Sales close that many minutes before the window opens, and nothing is sold once it is running. Leave the number at 0 to sell right up to the start. |
| before a window ends | The window keeps selling while it runs. Someone can join a session already in progress and be let in straight away — their access still ends when that window closes. Minimum 5 minutes, and the window itself must be longer than 5 minutes. |
Existing plans are on before a window starts, so nothing you already sell changes.
Selling during a window: what the buyer gets
A mid-window buyer pays the full price for whatever is left. Someone buying at 2 PM on a 12:00–23:00 window pays the same as someone who bought on Wednesday, and is removed at 23:00 with everyone else. That is deliberate — see one price, every window — and the cutoff is the control that stops the last-minute case feeling unfair.
Also see When a payment lands late.
Add your access windows
Each row is one window with its own length, so a single plan can mix them:
| Day | Starts | Lasts | Unit |
|---|---|---|---|
| Thursday | 19:00 | 3 | Hours |
| Saturday | 12:00 | 10 | Hours |
| Sunday | 09:00 | 14 | Hours |
Choose Repeats first — weekly asks for a day, monthly asks for a day of the month, and daily just asks for times.
Monthly days 29, 30 and 31 skip months that don't have them. They are never rolled back to the 28th — a window on the 31st runs in January, March, May, July, August, October and December only, so 7 times a year rather than 12. The 30th skips February; the 29th skips February in non-leap years.
There is no "last day of the month" option, and adding slots for 28, 30 and 31 does not make one — it generates three separate windows in any month that has all three days. For a window in every month, pick a day of 28 or lower.
Save and check the dates
Subscriby generates the actual dates from your schedule. Open Manage Access Windows from the plan's row menu to see what it produced, how many customers hold each window, and to cancel one if plans change.
Each date is listed with its time range in the plan's timezone, a status badge — Scheduled before it starts, Open while it runs, Closed once it's finished, Canceled if you cancelled it — and an N sold count. A window that runs past midnight also carries the day it closes on, so an overnight session is never mistaken for one that ended the same morning. Both are read live, so a purchase or a window opening shows on your next look at the panel. Yesterday's windows stay listed so a session that has just finished is still visible.
Beside the sold count, an amber N not in queue badge appears when some of those buyers have not tapped their invite link yet. That is the number who are relying on noticing a message on the day rather than being admitted silently, and it is the only thing on the panel you can still do something about — see Nudging them yourself below.
Once anyone holding the window has been reminded — by the automatic ladder or by you — the top-right corner of the card reads Last reminded 6 hours ago. Hover it for the exact date and time. It is absent until the first reminder goes out.
Creating one from the Telegram bot
The plan wizard on the Subscriby bot builds pass schedules too, so a slate can go on sale from your phone.
Start Add Plan on your project as usual. After the price, the bot asks how customers should get access — choose Time-Limited Pass and it takes over from there:
- Timezone — your account timezone is offered as a button, alongside a short list of
common zones. Anything else you type is accepted, so
Europe/MadridandGMTboth work. Older names are resolved to their modern equivalent rather than rejected, soAsia/Calcuttais stored asAsia/KolkataandUS/EasternasAmerica/New_York. - Repeats — Daily, Weekly or Monthly, the same three patterns as the dashboard.
- Access windows — send one per message as day, start time and length:
Sunday 19:00 3hon a weekly plan,15 19:00 3hon a monthly one, or19:00 3hwhen it repeats daily. Day names work in English or in your bot's language, times take19:00or7pm, and lengths takem,hord. Tap Done when the slate is complete, or Remove Last to drop the window you just added. - Stop selling — send a number of minutes, or tap Skip to sell right up to each window opening. Any number above zero then asks whether it counts back from when a window starts or when it ends, the same choice as the dashboard.
Choosing a pass skips the billing cycle, trial and renewal questions — a pass has no cycle to bill and nothing to renew — and goes straight to linked resources. The plan is created inactive, exactly as the dashboard leaves it, and the bot reports how many windows went on sale.
The bot only builds repeating schedules. Use individual dates instead of a pattern needs an explicit date and time for every window, which no chat flow handles well, so place those from Manage Access Windows in the dashboard or through the REST API.
Adding a date by hand
Manage Access Windows has an Add a Window form at the bottom: pick a Date and a Starts time, set how long it Lasts, and add it.
This is how a fixed-dates plan gets every one of its windows. On a repeating plan it's for the exception — a rescheduled match, a bonus session — because a hand-placed window is never removed when you edit the schedule. Only generated windows are rebuilt.
Times are wall-clock in the plan's timezone, exactly like the slot times above, so 14:00 means 14:00 where your audience is rather than wherever you happen to be.
Four things are refused, with the reason shown:
- a start time in the past
- a window shorter or longer than the configured limits
- a start time this plan already has a window for
- on a plan set to before a window ends, a window no longer than its own cutoff — it would close its sales before it ever opened
That last one matters most on a fixed-date plan. Those have no repeating slots, so there is no schedule for the checks above to measure and this is the only place the length is checked against the cutoff.
To remove a hand-placed date, cancel it like any other window — holders get moved to the next one or told to ask you for a refund, which is why there's no plain delete.
Cancelling one customer's pass
Open Subscriptions, find the purchase and choose Cancel Subscription. Cancelling a pass does two things: the customer is not admitted when the window opens, and that date goes back on sale for them, so they can rebook it or pick a different one.
That second part is what makes cancelling the right tool for clearing up test purchases. A date stays reserved for whoever holds it, so a live pass keeps its window off their list — but a cancelled one releases it.
Cancelling does not remove anyone already inside the channel. If the window is running and you want them out now, cancel the pass and then remove them from the channel in Telegram.
A cancelled pass reads Cancelled on its own, with no lifecycle badge beside it. An ordinary membership cancelled with time still on it stays Active, because access genuinely runs to the end of the period already paid for — but a pass has no such period. The window sweep admits only holders who have not cancelled, so "Active" there would promise access that cannot arrive.
The customer is not told
Cancelling sends them no message. Their invite link keeps looking valid, and they find out by not being let in when the window opens.
If you want them informed, either message them yourself or issue a refund instead — a refund revokes access the same way and does message them, naming the amount and the window they no longer hold. See Refunds.
What your customer sees
- They pick a date at checkout — the next one is preselected, and dates they already hold are hidden. On a plan that sells through its windows, one already running is marked On now and leads the list, because it is the one they get into immediately.
- After paying, the bot names the window they bought — plan, start, end and how long until it opens — and their invite links follow in the next message. The portal's confirmation screen states the same window, so the date is visible without leaving the browser.
- Tapping the link puts them in a queue. The bot confirms this straight away and states when access opens, when it ends, and how long they'll have.
- When the window opens they are admitted automatically, whether or not they are at their phone — and the bot says so, with a Join button for every channel or group the pass covers and a countdown to when access ends. That message replaces the generic resource list at this moment, so what they get is unmistakably about the window they were waiting for rather than a repeat of their purchase receipt.
- When it closes the pass ends and they are removed — unless another pass of theirs, or an ordinary subscription, still grants that same channel. Removal is decided per channel, so a customer who holds a Sunday pass and a monthly membership keeps their seat when Sunday's window closes.
The queue is what makes a pass feel automatic. A customer acts once, days early, and is let in at the right moment without being present.
Where a holder can check their own pass
A pass is not an ongoing membership, so it deliberately does not take over the bot's home screen — otherwise buying Sunday would hide Thursday, and selling several slates is the whole point. Instead a Your passes block sits above the plan list, listing up to three of the soonest with a My pass button for each.
Opening one shows everything about it: what was paid, the exact window in your schedule's timezone, a countdown to when it opens or ends, whether their join request is in the queue, and what the plan includes. A pass they can no longer use is left out entirely rather than listed with "access ended" under a heading saying what they hold.
The web portal carries the same detail. The plan card shows their own window and countdown beside Manage — distinct from the strip at the top of the card, which counts down to the next window on sale and is rarely the one they bought — and My Memberships repeats it per membership.
Bought is not the same as queued
Every one of those surfaces states the join status, and it is the one thing a holder can still act on. In the queue means they tapped their link and will be admitted automatically. Join request not sent means they have not, so there is nothing waiting for the window opener to approve and they are relying on noticing a message on the day.
That distinction decides what every reminder below asks of them, and it is why the status is shown rather than left implicit.
They can put it in their calendar
The portal offers every pass holder Add to your calendar — a subscription URL that puts their window into Apple Calendar, Google Calendar or Outlook, with a reminder an hour before it opens.
This matters more on a single pass than it looks. A holder acts once, days early, and then has nothing to do until the window opens — which is exactly the situation where a date slips a mind. The reminder ladder chases them in Telegram; the calendar puts it where they plan the rest of their week.
Nothing to configure. The link is minted the first time a holder opens their membership screen, so most purchases never carry one at all.
The link is secret, and it is theirs
It works without a login, so anyone they forward it to can see their dates. If they share it by mistake, Shared this by mistake? Get a new link rotates it — the old address stops working immediately and they resubscribe with the new one.
You cannot rotate it for them; it is on their own membership screen.
Every holder is reminded before the window opens
A holder who never taps their link isn't locked out — links are reissued when the window opens — but they then have to be at their phone to use them, and on a three-hour window noticing an hour late costs a third of what they paid for.
So the bot messages holders automatically: about a day before the window opens, and again about an hour before. Both name the plan, the window and an exact countdown to the opening. What the message asks of them depends on where they stand:
- Not in the queue — their invite link is attached as a button, so joining is one tap.
- Already queued — they're told there's nothing to do, that they'll be admitted automatically, and that the window goes ahead as scheduled unless you cancel it. No buttons, because a second tap would only produce a request Telegram refuses.
Someone who queued a fortnight ago has forgotten it exists, and a dated window is worth raising before they plan their evening around something else — which is why the reminder goes out either way rather than only to the people with something left to do.
A milestone that had already passed at purchase is skipped rather than fired late, so a customer buying two hours ahead gets the hour reminder only. You don't configure or trigger any of this.
You're reminded too, with the roll call
A window is a live event you have to be ready for, so the bot tells you about it three times:
| When | What it is for |
|---|---|
| An hour before | The full roll call, while there is still time to chase anyone who has not queued. |
| 15 minutes before | A short final call — the countdown, who is expected, and who still has not tapped their link. |
| The moment it opens | What actually happened: how many were admitted, and whether anyone is still to arrive. |
The first two name the project, the plan, the window and the countdown, then give you the numbers that matter:
| Line | What it counts |
|---|---|
| Passes sold | Every purchase ever bound to this window, including ones later undone. The commercial figure. |
| Active now | Holders who will actually turn up — not cancelled, not expired. |
| Refunded or cancelled | Purchases that came undone, whether by refund or cancellation. |
| In the queue | Active holders who tapped their link and will be admitted automatically. |
| Not in the queue | Active holders who haven't, and will need to be at their phone. |
The last two are the point. Not in the queue is the only figure you can still change before the doors open, so when it is above zero the notice points you at Send Reminders in Manage Access Windows; when it is zero it says so plainly, which saves you opening the panel to check.
There is a third case, and it is the one worth reading carefully: if every pass sold has since been refunded or cancelled, the notice says nobody is due to arrive rather than telling you everything is in order. An empty queue and an empty window look identical in the numbers alone.
While sales are still open, these numbers are a snapshot
If your stop selling cutoff is anchored to the window's end, the window is still on sale after it opens — so a pass can be bought during the session. Any notice sent while that is true says so, because "2 sold" mid-session is a running total, not a result.
With the cutoff anchored to the start, sales are closed by the time the doors open and the figures are final.
Only windows somebody has actually bought are announced. An empty slot on your recurrence is not an event, and reminding you about every one of them would turn the notice into something you mute.
Nudging them yourself, from the window panel
Two rungs a day apart cannot cover every reason you might want to reach these buyers. A venue changed, the slate went up late, or a window was bought long enough ago that both milestones have already passed — and there is nothing scheduled between now and the window opening.
Open Manage Access Windows, and any window with an amber N not in queue badge gets a Send Reminders button beside Cancel Window. Confirm, and everyone in that count is messaged with their own invite link attached. The button reports back — "7 purchases have been notified." — and the number is what Telegram actually accepted, not what was attempted, so a buyer who has blocked your bot is excluded from it rather than counted as reached.
The message is headed Reminder from your project name and says outright that you sent it by hand, so a nudge landing outside the usual times doesn't read as the bot misfiring. It names the plan, the window and an exact countdown — to the opening, or to the close if the window is already running — and carries one button per linked resource with that customer's own invite link, so joining is one tap and they never have to go looking for a message from days ago.
The button only reaches buyers who are still out of the queue, and only on a window that can still be entered — a cancelled or finished window has nothing to nudge anyone about, so it gets neither the badge nor the button. Anyone who joins the queue between the panel being drawn and the button being pressed is skipped.
Sending a reminder counts as that window's most recent one, so the automatic ladder will not follow it minutes later with the same thing. A later milestone still fires normally: nudge someone two days out and they still get the one-hour reminder.
Nudging one customer
When a single buyer has written in to say they cannot find their link, the whole window is the wrong instrument. Open that subscriber from Users, and their pass card carries a Queue status badge — Join request not sent, In the queue or Admitted — a Last reminded line, and a Send Reminder button when there is something to remind them about.
It sends exactly the message above, to exactly that person.
Saying something else to them
Send Reminders sends one fixed message: your invite link is waiting, here it is. When you need to tell holders something else — a venue change, a kick-off delay, a thank-you after the final whistle — use a broadcast instead.
The broadcast composer offers the same populations as audience segments: Active Pass Holders and Active Pass Holders Not in Queue for one window you pick, and All Active Pass Holders / All Active Pass Holders Not in Queue across every upcoming window at once. The window picker there shows the holder count each option would reach, so you can see who a message lands on before writing it.
If a purchase produces no access
Provisioning can fail for reasons that have nothing to do with the payment — most often the bot no longer being an administrator with the Invite Users via Link right on the channel.
When a paid purchase produces no invite links at all, both sides are told: the customer gets a message saying their payment is safe and offering 🔄 Refresh Invite Links, and you get one naming the customer, the plan, and the likely cause. Fix the bot's permissions and the customer's refresh will then work — you do not need to re-issue anything yourself.
A plan whose resources are all manual is not a failure and stays silent: there are no links to issue, and the customer's confirmation screen says you will arrange access directly.
When a payment lands late
Buying and paying are not the same instant. A customer taps Pay at 10:59 for an 11:00 window, and the payment provider confirms it at 11:00, 11:01, or — on a card that needs 3-D Secure, or a crypto payment waiting on confirmations — considerably later. Subscriby only learns the payment succeeded when the provider's webhook arrives.
Three things can happen, and all three are handled without you intervening.
The window has not started yet
The normal case. The pass is bound to the window they chose and they are admitted when it opens, exactly as if they had paid a week earlier.
The window has already opened
They are bound to that window and admitted within about a minute, keeping whatever is left of it. Someone confirmed at 11:01 on an 11:00–14:00 window gets 2 hours 59 minutes.
This is worth understanding because the admission does not come from the window opening — that already happened. A separate catch-up runs every minute and admits anyone whose payment landed after their window opened, so late arrivals are never stranded waiting for an event that has passed.
If they tap their invite link before that catch-up runs, they are let straight in. Either route counts as attending; neither is recorded as a missed window.
The same machinery is what makes selling during a window work: on before a window ends this is not a late payment being rescued, it is the normal path. Set that anchor and the catch-up becomes the front door.
Why the end anchor has a 5-minute floor
The catch-up is scheduled once a minute, but that is not a promise: it will not start while the previous run is still going, so a slow pass can push the next one several minutes out.
Sell into the final seconds and a customer can pay, receive a working invite link, and have the window close before anything reaches them. Five minutes is the floor for that reason. If such a purchase does slip through, Subscriby records it as Access Ended rather than Never Joined — it will not tell you a paying customer no-showed when the timing was ours, because that is exactly the case where you may owe a refund.
The window has already ended
They are not bound to a window that can no longer deliver anything. Subscriby moves them to the next available window on the same plan and their pass runs then instead, and messages them to say so — naming the window they missed, the one they now hold, and telling them to contact you if that date does not suit.
If the plan has no further window — a one-off, or a series that has finished — the purchase is left unbound and logged for you to resolve. The customer is told plainly that they were given no access and should contact you for a refund. Check Manage Access Windows after any schedule ends and refund through your payment provider.
Why moving them is safe: one price, every window
Every window on a plan sells for the same price, which is what makes this automatic move fair rather than presumptuous. Subscriby treats the windows on one plan as interchangeable — same price, so the same content and experience is assumed throughout.
If your windows are not interchangeable — Sunday's slate is worth more than Thursday's, a weekend intensive is not the same product as a weeknight Q&A — do not model them as one plan with several slots. Create a separate pass plan for each, priced and named on its own. Then nobody is ever moved between two things you consider different.
Rule of thumb: put windows on the same plan when a buyer would be happy to attend any of them for the price. Split them into separate plans when they wouldn't.
This is the case worth designing away, because the customer has paid and received nothing on the date they wanted. A sales cutoff closes the gap.
Use the sales cutoff to control this
Stop selling closes sales a set number of minutes before each window, at whichever end the anchor names. It exists precisely for this race.
On before a window starts — nothing is sold once a window is running:
| Cutoff | Effect |
|---|---|
0 (default) | Sells right up to the start time. Maximum revenue, maximum chance of a late confirmation. |
15 | A comfortable margin for card payments, including 3-D Secure challenges. |
60+ | Sensible if you accept crypto, or want time to prepare before anyone is let in. |
On before a window ends — the window stays on sale while it runs:
| Cutoff | Effect |
|---|---|
5 | The minimum. Sells almost to the end; leaves just enough time for a card payment to confirm and admission to run. |
30 | A comfortable margin, and the same advice as the start anchor. |
60+ | Sensible on crypto, or when the last hour is not worth selling. |
The cutoff hides the window from checkout — it does not affect anyone who already bought it.
A plan with mixed window lengths needs a cutoff shorter than its shortest window
Slot lengths are per-slot on purpose, so one plan can run a three-hour Thursday beside a fourteen-hour Sunday. A single before a window ends cutoff lands differently on each.
At 240 minutes, that three-hour Thursday would stop selling an hour before it even opened, while the Sunday still sold for ten hours. Subscriby refuses that and names the window holding the ceiling down, because nothing about the schedule would look wrong — the number is plausible, the dates are right, and the window would quietly never sell.
A window of 5 minutes or less cannot use this anchor at all
The shortest window Subscriby allows is 5 minutes, and the closing margin is also 5 — so on such a window no number works: anything below the margin is refused for being too close to the end, and anything at or above it swallows the window whole.
Subscriby therefore refuses the anchor rather than the number, so you are not left retyping values that each fail for a different reason. Use before a window starts, or make the window longer than 5 minutes.
Changing a schedule
Editing slots rebuilds future dates — except any window a customer has already bought. Those keep their original times and are never moved or deleted, because someone paid for that occurrence.
So after a change a plan can legitimately show an old Saturday 12:00 that 47 people bought alongside a new Saturday 13:00 for future buyers. The windows panel marks the sold ones.
Cancelling a window
A postponed game is the one case where a sold window disappears, and it is never automatic. Cancel it from Manage Access Windows and every holder is either moved to the next available window on the same plan, or — if there is none — has their pass ended and is told to ask you for a refund. Everyone affected is messaged either way.
Cancelling cannot be undone, and that exact date never comes back
There is no reinstate button, and there is no way to re-create a window at the same start time afterwards: the cancelled row keeps that slot, so schedule regeneration skips it and Add a Window refuses it with "This plan already has a window starting at that time."
Only that one occurrence is affected — a weekly plan still generates every other Saturday. But if you cancel Sat 29 Aug 08:00 and then want it back, the closest you can get is a hand-placed window at a different time, say 08:05.
Postponing one properly
The order matters, because the replacement is chosen at the moment you cancel. Cancel first and you are gambling on whatever the schedule happens to offer next — which may be a fortnight away, or nothing at all.
Add the replacement window first
Use Add a Window at the bottom of the panel and give it the corrected date and time.
On a repeating plan the next occurrence is usually already there, so there is nothing to do — check the panel before adding a duplicate.
Check it is still on sale
The replacement only counts if it satisfies your sales cutoff. A window already inside its cutoff is closed to sales, and is therefore not offered as a replacement either.
Then cancel the old window
Every holder lands on the date you just added, because it is now the soonest one they don't already hold.
Your sales cutoff can strand buyers even though a later date is on the calendar
A window only counts as a replacement while it is still sellable. On a plan with a 60-minute before a window starts cutoff, a window opening in 30 minutes is already closed to sales — so it is not offered as a replacement either.
The panel will show you that later date sitting right there while every holder is expired and told to ask for a refund. If you are cancelling at short notice, add a replacement far enough ahead to clear your own cutoff.
What the customer receives
Everyone affected is messaged, and the wording differs by where they stood.
| Their situation | What they're told |
|---|---|
| Moved, and had already tapped their link | Both dates, plus that they're already in the queue and will be admitted automatically. Nothing is asked of them. |
| Moved, but hadn't joined the queue yet | Both dates, plus their own invite link as a button so they can queue for the new date. |
| Stranded, because nothing was available | The date that was cancelled, that their pass has ended, that nothing further will be charged, and to contact you about a refund. |
None of them invites the customer to buy again — an invitation to buy the next one is exactly wrong for somebody stranded because there is no next one.
The exact wording is on the subscriber page: If the organiser cancels your window.
A worked example
A Saturday football plan, weekly at 08:00, £15, 41 sold for Sat 29 Aug. The pitch floods on the Thursday.
| Step | Result |
|---|---|
| Add a window for Sat 5 Sep, 08:00 — already there as part of the weekly pattern | Nothing to do |
| Cancel Sat 29 Aug | 38 holders move to 5 Sep. 2 had cancelled their own pass — untouched. 1 was past due — untouched. |
| Toast reads | "38 customers were moved to the next window and 0 need a refund." |
| The 12 who had queued | Stay queued for 5 Sep, nothing asked of them |
| The 26 who hadn't | Get the message with their Join button |
| 5 Sep now shows | Its own original buyers plus the 38 moved across |
Nobody is moved onto a date they already hold — a holder of both 29 Aug and 5 Sep skips to 12 Sep instead.
When to cancel a window — and when not to
| Situation | Use |
|---|---|
| Match postponed, same fixture a week later | Cancel the window. This is exactly what it is for. |
| Venue changed, same date and same value | Don't cancel. Nothing about the window changed — broadcast the holders instead. |
| Wrong time entered, nobody has bought yet | Edit the schedule. Unsold generated windows are rebuilt; cancelling would burn that slot permanently. |
| Wrong time entered, people have bought | Add the corrected window, then cancel the old one. The old start time is then unusable — pick the real time, not the wrong one. |
| One customer needs removing | Cancel their pass, not the window. |
| Event cancelled outright, no replacement coming | Cancel the window, then refund every holder by hand. They are told to ask you; nothing is refunded automatically. |
| Sunday is worth more than Thursday and you cancel Sunday | Holders get moved onto Thursday at Sunday's price. If that is wrong, split them into separate plans before this ever comes up. |
Three groups are skipped, and they are not in your toast
Only holders who are currently active and have not cancelled are resettled. Anyone paused, past due, or who cancelled their own pass is left bound to the cancelled window: not moved, not counted, and not messaged by the cancellation.
They have still paid for a date that is not happening. The counts in the toast exclude them, so refunding from that number under-refunds. Check Subscriptions filtered to that plan before you reach for the refund list.
Refunds are yours to issue, and the count is shown once
The "N need a refund" figure appears in a single toast and is never stored. Nothing in the dashboard marks those subscriptions as owing money — they look like ordinary expiries afterwards.
Note the names before you navigate away, or find them under Subscriptions with the plan filter. Refunds are issued from your payment provider's dashboard; see Refunds.
Cancelling a running window takes back the access it already gave
If the window is already Open when you cancel it, anyone admitted is removed from your channels as part of the cancellation — you don't have to go into Telegram and do it by hand. They keep their moved pass and are re-admitted automatically when the replacement window opens.
Holders who never joined the queue are untouched, because there is nothing to take back from them.
Automating the fallout
A cancellation emits three kinds of webhook, so none of this has to be reconciled by hand:
| Event | Fires |
|---|---|
pass.holder_moved | Once per holder moved, with both windows |
pass.holder_stranded | Once per holder owed a refund, with the amount |
pass.window_cancelled | Once, last, carrying both tallies |
pass.holder_stranded is the one worth wiring up: it carries the subscriber, the amount, the
currency and the gateway payment reference, which is the only durable record of who you owe.
Both are available as Zapier triggers and in the
n8n trigger node.
A plan cannot be deleted while customers hold windows that have not run yet. Disable it instead — that stops new sales while the purchased windows still go ahead.
Questions
Related
- Pass Series — bundle many of these windows into one season ticket
- Subscription Plans — ordinary recurring plans
- Managing Subscriptions — what a held pass looks like
pass.*webhook events — automate around windows opening and closing
How is this guide?