Drop-in surfaces that render what the model believes
The advisor is a single iframe. It reads the modelled profile of whoever is on the page and presents what we believe, then updates as that belief changes. No SDK, no build step, and nothing to maintain when the models change. What it shows depends entirely on who is looking at it.
Same insight stream, deliberately different presentation
| Surface | Who sees it | What it recommends | Where it goes |
|---|---|---|---|
| Traveller viewPlain language, no jargon | Your customer, on your public site | A packaged trip they can act on | Any public page |
| Team viewNumeric confidence and evidence | Agents, advisors, commercial staff | The next best action, in commercial language | Behind authentication only |
These are the real embeds, running in an iframe
Two snippets, two places
Traveller view — public pages
<iframe
src="https://advisor.travelspy.io/embed/traveller?ws=ws_live_9f21c480"
title="Plan your trip"
width="100%" height="620"
style="border:0;border-radius:16px"
loading="lazy"
referrerpolicy="strict-origin-when-cross-origin"
sandbox="allow-scripts allow-same-origin allow-forms"
></iframe>
Team view — authenticated consoles only
<iframe
src="https://advisor.travelspy.io/embed/team?ws=ws_live_9f21c480&t={SESSION_TOKEN}"
title="Traveller insight"
width="100%" height="780"
style="border:0;border-radius:16px"
referrerpolicy="strict-origin-when-cross-origin"
sandbox="allow-scripts allow-same-origin"
></iframe>
Mint the session token server-side. The team embed refuses to render on an unregistered or public origin.
Query parameters on the embed URL
| Parameter | Value |
|---|---|
| wsWorkspace ID, required | ws_live_9f21c480 |
| themelight or dark | light |
| accentHex, no hash | 163300 |
| locale | en-GB |
| currency | GBP |
| handoffWhere a qualified lead goes | crm |
Listen with window.addEventListener('message')
window.addEventListener('message', function (e) {
if (e.origin !== 'https://advisor.travelspy.io') return;
// advisor.opened | advisor.step | advisor.package_ready | advisor.handoff
console.log(e.data.type, e.data.payload);
});
Always check e.origin before trusting a message.
Last 30 days across all embeds