Quickstarts
Copy, paste, ship. Three integrations under five minutes each.
Quickstart 1: add chat to any website
- Copy your Org ID from the Business Centre (top of the sidebar).
- Paste this tag before
</body>on your site:
<script src="https://kinetic-4g1.pages.dev/widget/kinetic-chat.js"
data-org-id="RET-YOURORG-000001"></script>
- Reload the page. Click the bubble and send a message.
- Open
/portal/inboxin your Business Centre — the conversation is there, tagged Customer · webchat.
Quickstart 2: talk to the Copilot API from Node.js
Portal authentication is session-cookie based. Send your first Copilot message with a small fetch wrapper that keeps cookies:
const BASE = "https://kinetic-4g1.pages.dev";
async function api(path, options = {}) {
const res = await fetch(BASE + path, {
...options,
credentials: "include", // keep the HttpOnly session cookie
headers: {
"Content-Type": "application/json",
...(options.headers || {}),
},
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
return res.json();
}
// Authenticate a tenant user — sets the session cookie:
await api("/api/portal/login", {
method: "POST",
body: JSON.stringify({
orgId: "RET-YOURORG-000001",
email: "you@biz.zm",
password: process.env.KINETIC_PASSWORD,
}),
});
// Ask the Copilot something:
let data = await api("/api/portal/copilot/message", {
method: "POST",
body: JSON.stringify({
message: "Show me this week's market brief",
sessionId: null, // null starts a new conversation
}),
});
console.log(data.data.reply);
// Continue the same conversation:
data = await api("/api/portal/copilot/message", {
method: "POST",
body: JSON.stringify({
message: "Expand on the first point",
sessionId: data.data.sessionId, // reuse for follow-ups
}),
});
sessionId: null starts a new
conversation. Pass back the returned sessionId on subsequent
calls to continue it. Keep passwords in environment variables — never in
client-side code.Quickstart 3: pull the unified inbox into an internal dashboard
// Threads across CX + LG + BD, only the ones needing attention:
const { threads } = await api("/api/inbox/unified?status=needs_you");
for (const t of threads) {
console.log(`[${t.vertical}] ${t.title} via ${t.channel}: ${t.lastMessage}`);
}
// Reply to the first one through the same single endpoint —
// routing to the right sender happens server-side:
await api(`/api/inbox/unified/${threads[0].id.replace(":", "/")}/reply`, {
method: "POST",
body: JSON.stringify({ message: "Thanks for reaching out — we are on it!" }),
});
Quickstart 4: platform health from CI
curl -s \
-H "x-developer-api-key: $DEVELOPER_API_KEY" \
https://kinetic-4g1.pages.dev/api/developer/health-check | jq '.data.services'
Wire this into your pipeline to fail deploys when core services are offline. See the API reference for all developer endpoints.
Where to next
- Embedding Kinetic — widget options, iframes, webhooks, n8n recipes.
- API reference — auth methods, endpoint groups, units semantics.