Developers
API & webhooks, no SDK required.
Plain JSON over HTTPS. Chat with your agent from your own app, pull conversations and leads into your CRM, teach the agent from your helpdesk, and get signed events in Zapier, Make or your backend. Available on Growth and up.
Authentication
Create a key in Settings → API and send it as a bearer token. Keys belong to a workspace and can be revoked anytime. Limit: 120 requests per minute per key. Base URL: https://usereplied.com/api/v1
curl https://usereplied.com/api/v1/me \
-H "Authorization: Bearer ck_live_…"Errors are JSON { "error": "…" } with a 4xx status. Lists return { data, nextCursor }; pass cursor to get the next page (limit up to 100).
Chat
POST/api/v1/chat
Ask an agent a question from your server. Pass your own userId to keep history per user, and conversationId to continue a thread. Set stream: true for newline-delimited JSON events.
curl https://usereplied.com/api/v1/chat \
-H "Authorization: Bearer ck_live_…" -H "Content-Type: application/json" \
-d '{"botId":"bot_…","message":"Do you ship to Canada?","userId":"user_42"}'GET/api/v1/bots
Your agents (id, name). Use the id everywhere a botId is required.
Conversations & leads
GET/api/v1/conversations?botId=&status=&limit=&cursor=
Newest first. status is bot (AI handling), pending (waiting for a human), open or resolved. Each item includes topic, sentiment, rating and the contact.
GET/api/v1/conversations/:id
One conversation with its messages (visitor, AI, teammates; internal notes are never returned) and cited sources.
GET/api/v1/leads?botId=&limit=&cursor=
Contact details visitors left in the chat, newest first.
Knowledge
POST/api/v1/sources
Teach an agent from anywhere: a Q&A pair (always preferred over crawled pages), a text snippet, or a page URL. Processing takes a few seconds.
curl https://usereplied.com/api/v1/sources \
-H "Authorization: Bearer ck_live_…" -H "Content-Type: application/json" \
-d '{"botId":"bot_…","type":"qa",
"question":"Do you offer a nonprofit discount?",
"answer":"Yes, 30% off any paid plan for registered nonprofits."}'Other shapes: {"type":"text","title":"…","text":"…"} and {"type":"url","url":"https://…"}.
Webhooks
Add a Webhook / Zapier integration on an agent (or subscribe through the API below). We POST JSON for conversation.started, conversation.handoff, conversation.resolved and lead.created. conversation.started fires for every channel and says which one in data.channel (web, share, api, telegram or email). Non-2xx responses are retried with exponential backoff for about an hour.
{
"id": "evt_…",
"event": "lead.created",
"createdAt": "2026-10-05T18:42:11.000Z",
"bot": { "id": "bot_…", "name": "Fernwood Help" },
"data": { "lead": { "name": "Dana Reyes", "email": "dana@example.com", … } }
}Verify signatures (when you set a signing secret): we send x-webhook-timestamp and x-webhook-signature: sha256=…, an HMAC-SHA256 of timestamp + "." + raw body.
import crypto from "node:crypto";
function verify(rawBody, headers, secret) {
const ts = headers["x-webhook-timestamp"];
const expected = "sha256=" + crypto.createHmac("sha256", secret).update(ts + "." + rawBody).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300; // reject replays
return fresh && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(headers["x-webhook-signature"] ?? ""));
}Zapier & Make (REST hooks)
POST/api/v1/hooks
Subscribe a URL to one agent's events: {"botId":"bot_…","url":"https://hooks.zapier.com/…","event":"lead.created"}. Omit event to receive all four. Returns { id }.
DELETE/api/v1/hooks/:id
Unsubscribe. Only removes hooks created through the API.
GET/api/v1/hooks/sample?event=
Example payloads for mapping fields before the first real event arrives.
No-code? Use Webhooks by Zapier → Catch Hook (or Make's Custom webhook) and paste its URL into the Webhook / Zapier integration. Questions: support@useqrkit.com.
Live in about a minute
Your best support agent is one paste away.
Start on the free plan or try Growth free for 14 days. No credit card, no auto-upgrades, cancel in two clicks.