Start a board.
POST a question. The brief seats the board; each expert researches alone, then reacts once. Plan first to see the seats and the card.
REST API
Start boards and consults from your CRM, your CI, your Zap or your Slack bot — the same engine as SynthBoard.ai, 50 endpoints, one key.
Drive it from
What you can build
Question in, memo out — the call, how sure the board is, the conditions, and who disagreed — with no drift between the API, the MCP server and the web app.
POST a question. The brief seats the board; each expert researches alone, then reacts once. Plan first to see the seats and the card.
Name an expert and a question. The answer comes back in the shape the ask needs.
Sessions, memos and exports over GET — and signed webhooks the moment a run ends.
Seats are spread across model families, so the room is not one lab’s habits.
Where it runs
When a high-value deal stalls in HubSpot or Salesforce, a workflow runs a board on whether to keep pushing and posts the memo back as a deal note.
Watch a channel for messages tagged #decision, run a board on the question, and post the call and its dissent back as a thread reply.
Before a major merge, run a board to surface the risks your reviewers missed, and read its memo before you ship.
Wrap a few endpoints into a custom GPT or a Claude project, and your users get an assistant that can run a real board on demand.
Quickstart
Create a key in the Control Center, then start, poll, and read the memo. The brief seats the board for you — no expert-picking required.
In the Control Center → API Keys. It is shown once; copy it somewhere safe.
POST the question with session_type: "boardroom". Plan first if you want the seats and the card before it runs.
Long-poll the session, or let a webhook call you when it lands. Each card shows what a room like it typically costs; you pay for what it really used.
# 1. Start a board
curl https://synthboard.ai/api/v1/sessions \
-H "Authorization: Bearer sb_live_..." \
-H "Content-Type: application/json" \
-d '{
"question": "Should we launch a free tier?",
"session_type": "boardroom"
}'
# → { "session_id": "...", "task_id": "...", ... }
# 2. Long-poll until the run finishes
curl "https://synthboard.ai/api/v1/sessions/{id}?wait_ms=60000" \
-H "Authorization: Bearer sb_live_..."
# 3. Read the memo on the same response
# v4_phase: "done"
# memo: { verdict, confidence_0_100, conditions, dissent }import requests
API = "https://synthboard.ai/api/v1"
H = {"Authorization": "Bearer sb_live_..."}
s = requests.post(f"{API}/sessions", headers=H, json={
"question": "Should we launch a free tier?",
"session_type": "boardroom",
}).json()
session = {}
while session.get("v4_phase") != "done":
session = requests.get(
f"{API}/sessions/{s['session_id']}",
headers=H, params={"wait_ms": 60000},
).json()
print(session["memo"]["verdict"])# Open a consult with a named expert
curl https://synthboard.ai/api/v1/sessions \
-H "Authorization: Bearer sb_live_..." \
-H "Content-Type: application/json" \
-d '{
"question": "Tear down my pricing page",
"session_type": "consult",
"synth_id": "the-marketer"
}'const API = "https://synthboard.ai/api/v1";
const headers = {
Authorization: "Bearer sb_live_...",
"Content-Type": "application/json",
};
const { session_id } = await fetch(`${API}/sessions`, {
method: "POST",
headers,
body: JSON.stringify({
question: "Should we launch a free tier?",
session_type: "boardroom",
}),
}).then((r) => r.json());
let session;
do {
session = await fetch(
`${API}/sessions/${session_id}?wait_ms=60000`,
{ headers },
).then((r) => r.json());
} while (session.v4_phase !== "done");
console.log(session.memo.verdict);Consult turns are driven through the MCP tool synthboard.consult.message — see the MCP docs.
Key endpoints
| Method | Path | What it does |
|---|---|---|
| POST | /api/v1/sessions | Start a session — boardroom or consult |
| POST | /api/v1/sessions/plan | Preview the staffed board and its credit estimate first |
| GET | /api/v1/sessions | List your sessions |
| GET | /api/v1/sessions/{id} | Session state, decision brief, memo (optional wait) |
| POST | /api/v1/sessions/{id}/fork | Duplicate a session with altered context |
| POST | /api/v1/sessions/{id}/outcomes | Generate action plan / report / memo |
| POST | /api/v1/sessions/{id}/export | Export as markdown / json / text |
| POST | /api/v1/synths/chat | 1-on-1 chat with a specific expert |
| POST | /api/v1/actions/execute | Run a board recommendation through a connected tool |
| POST | /api/v1/webhooks | Register a webhook subscription |
| GET | /api/v1/health | Unauthenticated health probe |
Automation platforms
Each platform runs SynthBoard through the REST API and webhooks today. Open its guide for the steps and its native adapter status.
Webhooks
10 signed events. Every delivery is signed and retried up to five times. Wire outcomes into Slack, your CRM or your own event bus.
// Verify a SynthBoard webhook
import { createHmac, timingSafeEqual } from "node:crypto";
app.post("/webhooks/synthboard", (req, res) => {
const sig = req.header("X-SynthBoard-Signature").replace("sha256=", "");
const ts = req.header("X-SynthBoard-Timestamp");
const body = req.rawBody;
const expected = createHmac("sha256", SECRET)
.update(`${ts}.${body}`)
.digest("hex");
if (!timingSafeEqual(Buffer.from(sig), Buffer.from(expected)))
return res.status(401).end();
// Handle event
res.status(200).end();
});Questions
What developers ask before they wire SynthBoard in.
Anything else — read the reference or get in touch.
Same engine, different transports. MCP is what Claude Desktop, Cursor, and ChatGPT speak natively. REST is what Zapier, n8n, Make, and any other HTTP client speaks. Both use the same auth and you can switch between them freely.
Either. For your own scripts, API keys are simplest — generate one in the Control Center. For third-party tools that act on behalf of your users (like Zapier), OAuth is the right path and the client auto-registers.
Credits. Every board and consult shows one number — “about N credits” — before it runs. Each card shows what a room like it typically costs; you pay for what it really used. Pre-purchase credit bundles or run on a subscription — free tier included, no monthly minimum required.
Per-endpoint buckets, tier-adjusted: the documented baselines apply to Pro, with Free ×0.15, Max ×3.3, and Ultra ×16 multipliers. Rate-limit errors include retry_after_s. The full matrix lives in the MCP docs under Rate limits.
Register a subscription in the Control Center or via POST /api/v1/webhooks. We deliver signed events to your URL — session.complete, session.failed, session.cancelled, session.continued, outcomes.ready. Failed deliveries retry up to 5 times with backoff; after 10 consecutive failures the subscription auto-pauses until you re-enable it.
Yes. /api/v1/* is versioned and breaking changes require a new version. We commit to 90-day deprecation notice — announced in the changelog and by email to API key owners — before anything is retired. Full policy at /docs/versioning.