CTA links and redirects
CTA links connect a campaign email, ad, or landing page button to the active promo state.
Redirect when a timed tier ends
Start with the promo setup guide. Use a dedicated test campaign and your organization’s public SDK host.
- In Tiers, keep the first tier timed. A one-minute window is useful for this check. Leave its destination blank to keep visitors on the starting page while it is active.
- Click Add tier, name the final tier Waitlist, and enter the URL of the page visitors should reach afterward.
- Turn off This tier has a time limit on Waitlist so it becomes the permanent fallback, then click Save promo.

Real local setup, 2 October 2026. Waitlist is the permanent final tier. Use your own published destination URL for a customer campaign. The right-hand countdown is an editor preview.
- Set the page visitors should reach.
- Remove the final tier's time limit.
- Save the configured tiers.
On the starting page, enable redirects on the same promo handle that renders the countdown:
<div id="countdown"></div>
<script>
var plandalf = plandalf || function () {
(plandalf.q = plandalf.q || []).push(arguments);
};
plandalf('ready', sdk => {
sdk.promo('your-campaign-id', {
target: '#countdown',
redirect: true
});
});
</script>
<script src="https://acme.plandalf.dev/js/plandalf-sdk.js" async></script>Replace the host and campaign identifier with values from the same organization. Use one promo handle for that campaign on the page. An active tier with a different destination can redirect immediately, so keep the first tier’s URL blank for the timed test above.
Replay the destination
- Open the starting page and confirm the first tier is active with a running countdown.
- Let it reach the final tier without clicking a navigation link. Check the actual browser URL and the destination page.
- If the destination also loads the SDK, read the promo there with
redirect: falseand confirm the final tier. A permanent tier has no active deadline. - Return to the original page in the same browser after the deadline. With redirects enabled, it should send the visitor to the current tier’s destination again.
- To inspect the expired starting page, repeat with
redirect: false. It should remain on that page while reporting the current tier.

Local browser replay, 2 October 2026. The SDK changed tiers at 01:50:16 UTC and navigated here. This page reads the promo with redirects disabled to inspect the result.
- The destination resolves the expected final tier.
- The recorded transition came from the real promo handle.
A browser redirect does not make a public page private or enforce a checkout price. Connect the promo to checkout and verify the charged amount separately.
If the page stays put
Check that the active tier has a destination and the page’s promo handle allows redirects. In Settings → Ignore redirect on these pages, a matching pattern suppresses navigation. The SDK also suspends host-page redirects while a checkout frame is open. A destination with the same origin and path is treated as the current page even if only its query string or fragment differs.
To replay a page exclusion, save ?stay=1 in Ignore redirect on these pages. Open the starting page with stay=1 in its query string and redirect: true in the SDK options. Confirm it stays on the page with the expected current tier. Remove stay=1 and load it again; navigation should resume. Use a dedicated test campaign so this check does not alter customer traffic.
Participant reference
Use pf_ref when linking from email or another identified channel. It identifies the promo participant; affiliate partner tracking uses the separately configured referral parameter, usually via. Do not put credentials or sensitive identifiers in these public URLs.
<a href="https://acme.plandalf.dev/p/early-bird?pf_ref={{subscriber.email}}">
Get the launch price
</a>The SDK also captures pf_ref from the current page URL so later checkout calls can include attribution context.
Checkout button with promo
<button
data-plandalf-present="summit-ticket"
data-plandalf-apply-promo="early-bird"
>
Buy now
</button>External destination
Some campaigns send visitors to an external sales page first, then open Plandalf checkout from that page. Keep the same pf_ref value on the URL so attribution stays connected.
<a href="https://example.com/sales-page?pf_ref={{subscriber.email}}">
Read the offer
</a>