Integration
Four paths, one atom library. Pick the one that fits your setup.
Read visitor intent from signals. Watch the personalisation engine decide what content matters.
From: What is Spectare, Silent intent detection plus explicit visitor input
Spectare works out who each visitor is the moment they arrive, without asking anything. It reads the referrer, UTM parameters, the page they landed on, and any prior visit patterns stored locally to build a signal picture and classify intent. That classification drives which atoms are selected and how the page is assembled.
When a visitor types a question through the ask surface, a different signal path activates. The question is explicit demand in the visitor's own words, and Spectare records it alongside the best atom similarity score the search returned. A high similarity means the library answered well. A low similarity, below 0.45, means the question went unanswered and the visitor's exact wording is flagged as a content gap.
These two signal types are treated separately in assembly. Inferred signals from referrers and UTM parameters feed the general intent summary. Typed questions get their own section in the gap detection prompt, and a weak similarity score on a typed question outweighs inferred-signal evidence when assessing what content is missing from your library.
The assembled_pages record captures source and top similarity for every page built from a typed question. This data feeds both the live unanswered questions feed in your admin and the nightly gap detection run, giving you a complete picture of where your library is strong and where it is not.
Weak match threshold
similarity below 0.45
Signal types tracked
inferred and explicit
Spectare solves the flash-of-default-content problem that plagues most personalisation platforms.
Read more →Drop one script tag into your page head. Mark your content areas with data-spectare-slot attributes. Spectare handles intent detection, assembly, and slot filling automatically.
Works on Webflow, Shopify, Squarespace, Next.js, or any site that runs JavaScript. No build step, no backend changes.
<!-- Add to <head> on every page -->
<script
src="https://spectare.ai/spectare.js"
data-org="YOUR_WORKSPACE_SLUG"
></script>
<!-- Place slots where personalised content should appear -->
<div data-spectare-slot="primary"></div>
<div data-spectare-slot="supporting"></div>
<!-- Set conversion URL in Settings. Fires automatically. -->
<!-- Or call manually on any event: -->
<script>spectare('conversion');</script>Install the plugin, add your workspace slug and API key, and place Spectare Zone blocks in Gutenberg. Zones render personalised content into the HTML at first paint: no shimmer, and SEO-ready. Prefer no API key, or personalising a heavily cached page? Spectare Slot blocks fill client-side instead. The plugin can also publish an llms.txt on your domain from your content: a curated entry point so an agent that reads your site extracts your facts accurately from a few fetches, instead of scraping a rendered page.
Call /api/assemble/ssr from a Next.js server component. Spectare classifies intent from your UTM params and referrer, assembles content, and returns a component list before HTML is sent to the browser. No shimmer. No layout shift. Personalised from first paint.
The client pipeline still runs in the background. Returning visitors with browsing history get a more specific assembly; the DOM updates silently in ~150ms if audience or stage differs from the server result.
import { headers } from 'next/headers';
import PersonalisedSection from '@/components/PersonalisedSection';
export default async function Page({ searchParams }) {
const h = await headers();
const sp = await searchParams;
const res = await fetch(
'https://spectare.ai/api/assemble/ssr',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${process.env.SPECTARE_API_KEY}`,
},
body: JSON.stringify({
orgSlug: 'your-workspace-slug',
referrer: h.get('referer') ?? undefined,
utmSource: sp.utm_source,
utmMedium: sp.utm_medium,
}),
next: { revalidate: 0 },
}
);
const { assembly, intent } = res.ok
? await res.json()
: {};
return (
<PersonalisedSection
orgSlug="your-workspace-slug"
initialAssembly={assembly}
initialIntent={intent}
/>
);
}Call /api/qualify first to get a signed token, then choose your assemble path. /api/assemble/components returns structured JSON with a named component and slots for each section, making it straightforward to render in React or any custom UI. /api/assemble streams SSE events for slot-based or server-rendered output.
All three endpoints are public. No API key required. Rate limited by IP.
// 1. Qualify the visitor
POST /api/qualify/{orgSlug}
{ "summary": "developer evaluating personalisation",
"direct": true }
→ { token, intent, ... }
// 2a. Assemble: slot/SSE rendering (widget path)
POST /api/assemble
{ "token": "<token>", "orgSlug": "your-slug" }
→ streams sections as server-sent events
// 2b. Assemble: component JSON (React / custom)
POST /api/assemble/components
{ "token": "<token>", "orgSlug": "your-slug" }
→ { assembly: [{ component, slots, size }, ...] }Once your content is in Spectare, an agent that reads your site gets structured facts rather than a guess, with no setup. Your site serves an llms.txt describing what you offer, and every published atom is available as clean JSON at /api/content and /api/content/{slug}, each with a stable slug.
An assistant can also call the public qualify endpoint with what its user is after and share the returned link, so an agent-driven referral lands on a page personalised for that person. Through the WordPress plugin and SSR helper the same JSON is served on your own domain, not just spectare.ai.
Content API reference →Start with the script tag or the WordPress plugin. Add Next.js SSR or the REST API later without changing your atom library.