Use Huddle from your own product
Two shapes, one engine. Call the hosted API when your app should start and follow discussions, or embed the engine when the board itself belongs in your interface.
GET /api/public/v1/status is live. The write endpoints and self-service API keys open with Business — ask for early access.1. Hosted REST API
One workspace-scoped key per integration. Keys are secret, never expire on their own and can be revoked at any time.
curl https://huddlediscussdecide.com/api/public/v1/huddles \
-H "Authorization: Bearer hk_live_…" \
-H "Content-Type: application/json" \
-d '{
"usergroupId": "ug_123",
"title": "Move the Q4 launch?",
"intent": "question",
"opening": "Support says the new pricing page will not be ready. Do we move?",
"call": { "type": "input", "members": ["cathy", "arthur"] }
}'POST
/api/public/v1/huddlesStart a huddle: usergroup, title, opening post and intent (question | issue | concern | idea | information).
POST
/api/public/v1/huddles/{id}/postsAdd a post. Left untagged it is classified like any other post; you may pass an explicit tag.
POST
/api/public/v1/huddles/{id}/callsInvite people: input | recommend | vote | decide | approve, with the members to call.
GET
/api/public/v1/huddles/{id}Posts, threads, stage, participants and open calls.
GET
/api/public/v1/huddles/{id}/readingThe stored AI reading: what is forming, what leads, what is unresolved, who still owes an answer. Never triggers a new AI call.
GET
/api/public/v1/decisionsThe decision log, filterable by usergroup, huddle or date, for your own records.
GET
/api/public/v1/statusLive today: version and the endpoints this workspace exposes.
2. Webhooks
Every event is signed with HMAC-SHA256 over the raw body in X-Huddle-Signature, so your endpoint can verify it came from us before acting on it.
huddle.stage_changedA huddle moved: initiated → discussing → converging → decided.
huddle.decidedA decision was recorded, with decider, basis and reason.
call.fulfilledAn invitee answered the input, recommendation, vote, decision or approval.
post.createdA new post, including the tag the AI gave it.
{
"event": "huddle.decided",
"huddleId": "hd_8a2",
"decision": { "option": "Move to January 12", "by": "Richard", "basis": "vote" },
"at": "2026-08-30T10:14:00Z"
}3. Embedded engine
The Huddle engine ships as a self-contained package: the model, the AI reading, the vocabulary and the board UI, with one adapter you implement against your own storage and your own signed-in user.
import { installHuddleAdapter, Huddle } from "@/huddle";
await installHuddleAdapter({
load: async () => ({ snapshot, me }),
save: async (docs) => upsert(docs),
onError: (message) => toast.error(message),
});
<Huddle group={group} onClose={close} />Your app keeps its own design tokens; Huddle uses semantic tokens only, so it inherits the host theme. A self-check route validates every step and option after installation.