KineticDocs

Quickstarts

Copy, paste, ship. Three integrations under five minutes each.

Quickstart 1: add chat to any website

  1. Copy your Org ID from the Business Centre (top of the sidebar).
  2. 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>
  1. Reload the page. Click the bubble and send a message.
  2. Open /portal/inbox in 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