Sell access for a period. One payment, no subscription.
1, 3, 6 or 12 months — or any number of days — each with its own price.
The buyer picks a term, pays once and holds access until a date. Nothing renews by itself, no card is stored, and buying again extends from the current expiry. When the date passes, downloads and licence keys stop and your own system is told by webhook.
- Same take as any sale — no extra fee
- Works for files and for externally hosted services
- Webhooks: access.expiring · access.expired
Who it is for
Anything a buyer uses over time rather than downloads once.
Courses and video programmes
A fitness programme, a language course, a masterclass: sold as three or twelve months of access, hosted wherever you host it.
Tools and services with licence keys
Turn on licence keys and the key stops validating when the term ends — your app checks it with one API call.
Communities and private channels
A Telegram or Discord community, a members-only feed: the webhook tells your bot when to let someone in and when the period is over.
How it works
Five steps, nothing to run
- 1
Turn it on
On the pricing step of any product choose “Timed access” instead of lifetime.
- 2
Add your terms
1, 3, 6 or 12 months or a custom number of days, up to six terms, each with a price and an optional crossed-out price. The page shows buyers how much each longer term saves.
- 3
The buyer picks and pays once
Card, Apple Pay, Google Pay or stablecoin — the same checkout as any Getly sale. Their library shows the date access ends.
- 4
The end date does the work
Seven days before the end the buyer gets one reminder and your webhook receives access.expiring. On the date, downloads stop, the licence key reports expired, and access.expired fires.
- 5
Renewal is a purchase
The buyer buys the term again and the new period is added to the end of the current one — renewing early never costs a day.
For your own system
If the product lives on your platform, two webhook events are all you need.
Create a webhook endpoint in the developer settings and subscribe to access.expiring and access.expired. Each payload carries the order item, product, term length, the exact expiry and the buyer’s email. Products with licence keys also answer GET /api/v1/licenses/validate with the expiry, so a client can check locally. Everything is available through the v1 API (accessMode, accessTerms) and the @getly/mcp tools.
API docsPOST https://your-api.com/webhooks/getly
{
"type": "access.expired",
"data": {
"orderItemId": "6f1c…",
"productId": "3f6f…",
"productSlug": "prenatal-program",
"durationDays": 90,
"expiresAt": "2026-12-05T09:14:00.000Z",
"buyerEmail": "buyer@example.com"
}
}Questions sellers ask
Is this a subscription?
What does it cost?
Can I use it for a plain file?
What happens when a buyer renews early?
How does my own platform know when to revoke access?
Can I change the terms later?
Sell what you already sell — for a period
Set it on any product in a minute. Nothing changes for the products you leave on lifetime.
Open the product editor