ZIPPY DOCS

Scheduled destinations

Line up where a Zippy link points before, during, and after a drop — pre-order page, launch page, replay — on a clock. A schedule only swaps the destination; it is never an expiry.

Scheduled destinations

A schedule lines up where a link points, on a clock. Pre-order page until Friday 9am, launch page for the weekend, replay from Monday — one short link, one caption, no midnight edit.

The thing to understand first: a schedule is not an expiry. It only swaps the default destination. Nothing in this page can stop a link redirecting.

Scheduled swaps are available on Hero and up, behind the scheduled-links feature flag.

How a schedule resolves

A schedule is a list of { from, url } entries, where from is an epoch timestamp in seconds. From that moment onward, the link's default destination becomes url. Zippy stores the list sorted ascending — the engine walks it in order and the latest past entry wins.

WhenLink resolves to
before the first swapthe link's default destination (the URL you created it with)
after swap 1swap 1's URL
after swap 2swap 2's URL

Two consequences worth stating out loud:

  • A future-only schedule changes nothing today — the link serves its default destination until the first from passes.
  • There is no gap and no end state. The last swap is permanent until you change it. A schedule can't run out.

Up to 10 swaps per link. Duplicate timestamps collapse to the last one you set.

https only

Scheduled destinations must be https://. This is stricter than audience routing, which accepts any http(s) URL — on purpose. A scheduled swap fires unattended, so it's never allowed to silently downgrade your link to plaintext at 3am while you're asleep.

{ "error": "Every scheduled destination must be an https:// URL" }

Set it up

Dashboard (web): open a link's editor (or the ZIP form), expand Scheduled swaps, and add rows of date & time → destination. Times use a native date-time field in your own timezone — what you mean by "Friday 9am" is what you get. The row above shows what the link serves before the first swap, so you can see there's no gap.

Mobile app: the same Scheduled swaps section lives on a link's detail screen.

Via the API

POST /api/links
Content-Type: application/json
 
{
  "url": "https://shop.com/preorder",
  "slug": "the-drop",
  "sched": [
    { "from": 1785312000, "url": "https://shop.com/launch" },
    { "from": 1785484800, "url": "https://youtube.com/watch?v=replay" }
  ]
}
{
  "id": "0f1c…",
  "slug": "the-drop",
  "destination": "https://shop.com/preorder",
  "ab": null,
  "sched": [
    { "from": 1785312000, "url": "https://shop.com/launch" },
    { "from": 1785484800, "url": "https://youtube.com/watch?v=replay" }
  ],
  "createdAt": "2026-07-19T14:05:40.301Z",
  "updatedAt": "2026-07-19T14:05:40.301Z"
}

Edit it with PATCH /api/links/:id — a new array replaces the whole schedule, null clears it:

PATCH /api/links/0f1c…
Content-Type: application/json
 
{ "sched": null }

Clearing a schedule doesn't touch the link. It simply stops swapping and keeps serving whatever its default destination is.

UTMs ride every swap

If the link carries UTM tracking, Zippy composes your utm_* parameters onto every scheduled destination automatically — the same walker that handles routed destinations and A/B variants. Monday's replay link is tagged exactly like Friday's launch link, with no extra work.

It composes with everything else

A schedule swaps the default destination, so it sits underneath your other link settings rather than fighting them:

Worth repeating, because every other tool in this category ships this feature as an expiry date:

  • There is no end time field. There is nothing to set that stops a redirect.
  • The last swap is the destination forever, until you say otherwise.
  • Clearing a schedule, downgrading your plan, or letting a flag go dark all leave the link redirecting.

A QR code you printed last year still works tonight. That's the permanence guarantee, and scheduling is built inside it.

Notes

  • Hero and up, behind the scheduled-links flag.
  • Up to 10 swaps per link, https:// only, stored sorted ascending as epoch seconds.
  • The dashboard sends and displays your local time; the wire format is always UTC epoch seconds.
  • Changing a schedule takes effect immediately; the short link itself never changes.

FAQ

Yes. Open the link's editor, expand Scheduled swaps, add a row with the date and time (midnight in your own timezone) and the new destination, and save. At that moment the link starts sending everyone to the new URL. Nobody has to re-share anything, and nothing breaks at the swap — a tap one second before and one second after both redirect fine.

No. Zippy has no expiry, no click cap, and no end date — a schedule only changes where a link points, never whether it points anywhere. After your last scheduled swap the link keeps serving that destination indefinitely.

It serves its normal default destination — the URL you created it with. A schedule that's entirely in the future changes nothing today.

Put the pre-order page as the link's default destination, then schedule two swaps: launch page at go-live, replay page when it's over. Post the one short link everywhere in advance. It walks itself through the drop.

Why do scheduled destinations have to be https?

Because the swap happens unattended. Zippy won't hand your audience a plaintext page at a time when you're not watching, so http:// is rejected on schedules even though it's accepted for audience routing.

Read more