Conversations and messages
Create conversations with participants and roles, send with an idempotency key, page history, mark read. One REST API, typed by the SDK.
Hosted chat for your product
Conversations, realtime, webhooks, calls and media behind one API. Start free on qux.chat. It is QuxCloud’s own API, so when you outgrow it, moving changes a base URL and nothing else.
import { ChatClient } from '@quxkit/chat';
// On your server. The key is your workspace: never ship it to a browser.
const chat = new ChatClient({
apiKey: process.env.QUXCHAT_API_KEY!,
baseUrl: 'https://qux.chat/api/chat',
});
const convo = await chat.conversations.create({
kind: 'support',
createdBy: 'agent:sam',
participants: [
{ actorId: 'agent:sam', displayName: 'Sam', role: 'admin' },
{ actorId: 'customer:ada', displayName: 'Ada' },
],
});
await chat.messages.send(convo.id, {
body: 'Your order just shipped.',
senderActorId: 'agent:sam',
idempotencyKey: 'ship-1042',
});The @quxkit/chat SDK on your server. The REST API is the same calls.
What you get
Create conversations with participants and roles, send with an idempotency key, page history, mark read. One REST API, typed by the SDK.
A gap-free event feed you long-poll with a cursor, and a server-sent event stream. Nothing is missed between two reads.
Every message and event delivered to your endpoint, signed, retried, and verifiable with one call in the SDK.
One-to-one and group calls through an SFU, with a lobby where guests knock and someone inside lets them in.
Uploads straight to storage on a presigned link, checked on completion, attached to a message by id.
A key is its workspace. Every query runs under row-level security keyed to it, so a forgotten filter returns nothing, never another customer’s conversation.
The way out is a base URL
qux.chat runs QuxCloud’s chat API on its own platform: the same routes, the same `qcx` keys, the same data model and the same plans. Nothing you write is specific to qux.chat.
Pricing
The same prices as QuxCloud Chat, so a plan means the same thing on both. Free stops at its limits instead of billing you.
$0forever
A real chat backend for a whole product, free — more headroom than anyone else gives away.
$29per month
For a product finding its feet. Five thousand active users included, then a fraction of a cent each.
$99per month
For a product at scale. Twenty-five thousand active users included and cheaper overage.
$299per month
Chat at real volume — a hundred thousand active users included, and the cheapest overage on the ladder.
Custom
Dedicated tenancy, SSO and SCIM over identity-kit, an SLA, and volume pricing.
Questions
A hosted chat backend: conversations, messages, realtime, webhooks, calls and media for your own product, behind a REST API and the @quxkit/chat SDK. You build the interface; qux.chat keeps the conversations.
With your QuxCloud account. qux.chat holds no passwords: it signs you in through QuxCloud, so one account works across the QuxKit family.
It is the same API, the same key format and the same data model, run as its own platform with its own database. QuxCloud adds everything else QuxKit hosts. Your code does not change between the two; only the base URL does.
That is what it is built for. Because the API, keys and data are QuxCloud’s own, a workspace copies across whole: conversations, members, webhooks, plan and keys. The one-click move is the next thing we ship.
Not with your key. A key is your whole workspace, so it stays on your server, and the API sends no CORS headers. Browsers reach qux.chat through your server, which adds the key and decides who the user is.
Free stops at its limits rather than billing you: 1,000 monthly active users and 100,000 messages a month. Paid plans include more and price what goes past it.
Sign in with QuxCloud, make a key in the console, and send a message from your server.
Start free