CTA types
- url — open a link
- embed — inline iframe
- chat — send a message
Opens the target URL in a new browser tab. Use this for destinations that cannot be embedded — your main website, LinkedIn, payment pages, or any URL that sets
X-Frame-Options: DENY.Example CTAs array
"Book a Demo") becomes the pinned primary CTA button shown in the widget at all times. The AI can also surface any CTA from this list at the end of a relevant conversation turn.
CTA field reference
Button text shown to the visitor (e.g.
"Book a Demo", "Talk to Sales"). Also used as the fallback chatMessage when type is "chat" and no explicit chatMessage is provided.The destination URL for
url and embed types. For embed, this is the URL loaded in the iframe. For chat, you may omit this field entirely or use the chat:Your message here format. Pass "demo" as a shorthand — the widget automatically resolves it to your workspace’s demoUrl setting.Controls what happens when the visitor clicks the CTA.
If
| Value | Behavior |
|---|---|
"embed" | Loads url in an iframe inside the widget |
"url" | Opens url in a new tab |
"chat" | Sends chatMessage inside the widget chat |
type is omitted, the widget auto-detects: same-origin and relative URLs default to embed; external URLs check the embeddable-services list (see below) and fall back to url.The message sent on the visitor’s behalf when
type is "chat". If omitted, the button label is sent as the message.Auto-embed behavior
Whentype is not specified, the widget automatically decides whether to embed or redirect based on the target domain.
Services that embed automatically (iframe):
Booking
Calendly · Cal.com · HubSpot Meetings
Forms
Typeform · Tally · JotForm · Paperform · Fillout · Airtable Forms · Google Forms
Documents
Notion · Google Docs
Video
Loom · YouTube · Wistia · Vimeo
X-Frame-Options headers that prevent embedding, so the widget opens them in a new tab regardless of your type setting:
- Payment pages (Dodo Payments)
- LinkedIn, Twitter / X, Facebook, Instagram
- GitHub
lemcal.com- Same-origin URLs (embedding your own site inside the widget loads the full site in a tiny iframe — never useful)