Single-Use Links
A scoped, expiring URL tied to a specific contact and a specific booking link template — book once, link goes dead.
A single-use link is a tokenized URL that lets one specific contact book exactly one meeting on a template booking link. The moment they book, the token expires.
Use it when:
- You're sending a personalized "here's a link to schedule" message and you don't want it forwarded
- You want to track which contact actually booked from which outbound touch
- You want a "follow-up offer" on a specific contact (e.g. "you no-showed last week — here's a fresh link, valid for 7 days")
- You want to send a short-lived calendar offer that disappears if not used
Screenshot needed — /single-use/<token> redirecting to /book/<slug> with the token in sessionStorage
Single-use vs one-off
These two sound similar — both are single-shot scheduling URLs. Here's the practical split:
| One-off | Single-use | |
|---|---|---|
| Slots | Hardcoded list you set | Computed from a normal booking link's availability |
| Tied to | Just the URL | A specific contact + a specific template booking link |
| Setup | One-time, manual offer | Generated programmatically (CRM workflow, follow-up, etc.) |
| Use case | "Pick from these 3 times I'm offering" | "Book my normal link, but only this once" |
A single-use link is a normal booking link with an extra sticker on it: "this contact, this token, one booking." The availability rules, pre-meeting form, branding, payment, and workflows of the template link all apply.
Creating one
Single-use links are usually created programmatically — from a CRM workflow when a deal hits a certain stage, from a sequence step, or from a no-show follow-up workflow. The host-facing UI is at /calendar/single-use (also reachable from a contact's CRM detail page).
| Field | What it does |
|---|---|
| Template booking link | The link whose availability and rules apply |
| Contact | The CRM contact this single-use is for. Email is captured here. |
| Expiration | Optional. After this time, the token URL returns "this link has expired." Default: 30 days. |
A token is generated and stored on scheduling_single_use_links. The URL is /single-use/<token>. Copy it from the row; send it however you'd send any other link.
How the redirect works
The single-use page is a thin redirect. When a visitor hits /single-use/<token>:
- The token is validated server-side. If expired or already consumed, an error page renders.
- If valid, the token is stored in
sessionStorage["workestra:single_use_token"]and the visitor is redirected to/book/<slug>of the template link. - They book normally.
- The booking endpoint reads the sessionStorage token, validates it server-side again (TOCTOU re-check), records consumption (
consumed_at,consumed_by_booking_id), and confirms. - The sessionStorage entry is cleared on success.
If they close the tab between steps 2 and 4, the token is still consumable by reopening the URL — it's only marked consumed on actual booking confirmation. Repeat reopens are fine.
What "consumed" means exactly
| Outcome | Token state |
|---|---|
| Visitor abandons before booking | Still valid until expiration |
| Visitor books → payment required → pays | Consumed at payment confirmation |
| Visitor books → payment required → never pays → expires | Stays valid (no consumption on pending_payment) |
| Visitor books normally → confirmed | Consumed |
| Visitor books → reschedules later | Stays consumed; reschedules don't re-open the link |
| Visitor books → cancels later | Stays consumed; cancellation doesn't re-open the link |
If you need a "if cancelled, give them another shot" pattern, generate a fresh single-use link from the cancellation workflow.
When the contact lookup matters
The contact tied to the single-use is used for two things:
- Pre-fill the booking page —
nameandemailare auto-filled from the contact, no URL params needed. - Strict email match — by default, the booker's email must match the contact's email. If the URL is forwarded to a different person, the booking is rejected with "this link is not for you."
To allow forwarding (e.g. a "send to a colleague" pattern), turn off Strict email match when creating the link. Forwarding then becomes safe — anyone can book on it, but the link still only works once.
Programmatic creation
The most common way to create single-use links is via Workflows on the No-show marked trigger:
- Add a workflow with the No-show trigger
- Add an Email step
- Use
{{single_use_url}}in the body — Workestra generates a fresh token at send time
The same pattern works inside Sales sequences, Recruiting follow-ups, and FSM dispatch workflows. Each call creates a new token.
Listing your single-use links
/calendar/single-use shows all open single-use tokens — contact, template link, expiration, status (open / consumed / expired). Filter by template, by contact, or by date range. CSV export works for outreach attribution.
Read next
- One-Off Meetings — for "specific offered times" without an underlying booking link
- Workflows — generate single-use links from automations
- Booking Links — the template link that single-uses inherit rules from
- CRM Integrations — push single-use generation events into Salesforce or HubSpot