tellcasey

Hosted landing page

Share a Casey conversation via a hosted URL — no embedding required.

Every connection has a hosted landing page on on.tellcasey.com. Share the URL anywhere — email, SMS, QR code, social — and the participant lands directly into the conversation flow.

URL format

https://on.tellcasey.com/i/<connection-code>

The connection code is shown next to each connection in your dashboard. Anyone with the link can start a conversation (subject to your connection's auth settings).

Pre-filling participant info and context

Pass an inline ctx query parameter to pre-fill participant details and provide custom context to the agent. The value is a JSON object that mirrors the embed widget's boot() shape:

https://on.tellcasey.com/i/<connection-code>?ctx={"participant_profile":{"first_name":"Jane","last_name":"Doe","email":"jane@acme.com"},"custom":{"plan":"enterprise","region":"us-east"}}

URL-encode the JSON in production (most clients do this for you). For hand-written URLs, single-quoted JSON is also accepted as a convenience:

https://on.tellcasey.com/i/<connection-code>?ctx={'participant_profile':{'first_name':'Jane'}}

If ctx cannot be parsed as JSON, it is silently ignored and the conversation starts without it.

Supported keys

KeyTypeDescription
participant_profileobjectPre-fills participant info: first_name, last_name, email, organization_name
customobjectCustom data made available to prompts as {{ custom.field }}

Any other top-level keys in ctx are ignored.

If a ?_sl=<slug> short link parameter is present, the inline ctx is ignored — the short link's stored context fully controls the conversation. Use one or the other, not both.

Use a short link instead of inline ctx when you want the context to be opaque — i.e. not exposed in the URL. With ctx, anyone who sees the link sees the participant's name, email, and any custom data. With a short link, the URL is just an opaque slug (?_sl=abc123) and the actual context lives server-side, attached to the slug at creation time. Create them via the Short Links API.

Examples

Email campaigns with merge tags

The most common use case: drop a personalized link into an email campaign so each recipient lands in a conversation with their name and email already known to the agent.

Each ESP uses its own merge tag syntax. Build the ctx JSON inline in the URL and let the ESP substitute the tags at send time.

Encode the JSON, not the merge tags. The examples below are percent-encoded. The merge tag tokens (*|FNAME|*, {{ contact.firstname }}) are left un-encoded on purpose so the ESP still recognizes and replaces them. After the ESP substitutes a clean value, the URL is valid. If you paste raw JSON instead, some ESPs (notably HubSpot) will truncate the link at the first unencoded " and silently drop everything after it.

Mailchimp uses *|TAG|* syntax:

https://on.tellcasey.com/i/abc123?ctx=%7B%22participant_profile%22%3A%7B%22first_name%22%3A%22*|FNAME|*%22%2C%22last_name%22%3A%22*|LNAME|*%22%2C%22email%22%3A%22*|EMAIL|*%22%7D%7D

Klaviyo uses {{ property }} syntax:

https://on.tellcasey.com/i/abc123?ctx=%7B%22participant_profile%22%3A%7B%22first_name%22%3A%22{{ first_name }}%22%2C%22email%22%3A%22{{ email }}%22%7D%7D

HubSpot uses {{ contact.property }}:

https://on.tellcasey.com/i/abc123?ctx=%7B%22participant_profile%22%3A%7B%22first_name%22%3A%22{{ contact.firstname }}%22%2C%22email%22%3A%22{{ contact.email }}%22%7D%7D

SendGrid / Customer.io use {{ property }} (same as Klaviyo).

You can also pass campaign-level data through custom for prompt personalization. Static values can be hard-coded; per-recipient values use merge tags:

https://on.tellcasey.com/i/abc123?ctx=%7B%22participant_profile%22%3A%7B%22first_name%22%3A%22*|FNAME|*%22%2C%22email%22%3A%22*|EMAIL|*%22%7D%2C%22custom%22%3A%7B%22campaign%22%3A%22spring-2026-onboarding%22%2C%22plan%22%3A%22*|MERGE5|*%22%7D%7D

In your prompts, reference these as {{ custom.campaign }} and {{ custom.plan }}.

Tips for email use

  • Use the URL inside an <a href="..."> anchor, not as plain text — most email clients won't auto-link a URL with {/}/" characters, and some will mangle the JSON if it's not inside an attribute.
  • Test with a preview send before launching. Mailchimp's preview shows substituted values; Klaviyo's "Preview & Test" tab does the same.
  • Set sensible fallbacks in your ESP. Mailchimp: *|FNAME:there|* falls back to "there" if the contact has no first name. Klaviyo: {{ first_name|default:'there' }}.
  • Always encode the JSON structure ({, }, ", :, ,) as shown above — leaving them raw breaks the link in several ESPs (HubSpot truncates at the first " or {). Leave only the merge tag tokens un-encoded so the ESP can substitute them.
  • Merge tag values are not encoded for you. If any of your contacts have characters like &, +, or non-Latin names, the substituted value can still break the URL. ESPs will not double-encode their merge tag output, so prefer a short link when values may contain special characters.
const ctx = {
  participant_profile: {
    first_name: user.firstName,
    email: user.email,
  },
  custom: {
    plan: user.plan,
    signup_date: user.createdAt,
  },
};

const url = `https://on.tellcasey.com/i/abc123?ctx=${encodeURIComponent(JSON.stringify(ctx))}`;

When to use this vs. the embed widget

  • Hosted landing page — best for outbound sends (email, SMS, QR codes) where the participant doesn't already have your site open.
  • Embed widget — best for in-product or on-site flows where the conversation should appear inside your existing UI.

For richer per-recipient context, opaque URLs, or click-through analytics, generate short links via the API instead of building ctx URLs by hand.

On this page