Skip to content

REST API

Run a board
from any HTTP client.

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.

ExampleStarted from a Zap, a script or your CRM

Drive it from

  • Zapier
  • n8n
  • Make
  • Pipedream
  • Activepieces
  • Arcade.dev

What you can build

A board inside
every workflow.

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.

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.

Consult one expert.

Name an expert and a question. The answer comes back in the shape the ask needs.

Read the record.

Sessions, memos and exports over GET — and signed webhooks the moment a run ends.

  • GPT
  • Claude
  • Gemini
  • Grok

Seats are spread across model families, so the room is not one lab’s habits.

Where it runs

Decisions where
the work happens.

  • CRM

    Trigger a board from your CRM

    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.

  • Slack

    Put Slack threads to a board

    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.

  • CI

    A pre-mortem before a release

    Before a major merge, run a board to surface the risks your reviewers missed, and read its memo before you ship.

  • Assistants

    Custom GPTs and Claude projects

    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

Question in.
Memo out.

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.

  1. Create a key

    In the Control Center → API Keys. It is shown once; copy it somewhere safe.

  2. Start a board

    POST the question with session_type: "boardroom". Plan first if you want the seats and the card before it runs.

  3. Read the memo

    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.

Start → poll → memocurl
# 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 }
Python (requests)Python
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"])
A consult, one expertcurl
# 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"
  }'
TypeScript (fetch)TypeScript
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

The shortlist.

Full reference

MethodPathWhat it does
POST/api/v1/sessionsStart a session — boardroom or consult
POST/api/v1/sessions/planPreview the staffed board and its credit estimate first
GET/api/v1/sessionsList your sessions
GET/api/v1/sessions/{id}Session state, decision brief, memo (optional wait)
POST/api/v1/sessions/{id}/forkDuplicate a session with altered context
POST/api/v1/sessions/{id}/outcomesGenerate action plan / report / memo
POST/api/v1/sessions/{id}/exportExport as markdown / json / text
POST/api/v1/synths/chat1-on-1 chat with a specific expert
POST/api/v1/actions/executeRun a board recommendation through a connected tool
POST/api/v1/webhooksRegister a webhook subscription
GET/api/v1/healthUnauthenticated health probe

Webhooks

Webhooks,
the way they should work.

10 signed events. Every delivery is signed and retried up to five times. Wire outcomes into Slack, your CRM or your own event bus.

Webhook signing guide

Verify a deliveryNode
// 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

Fair questions.
Straight answers.

What developers ask before they wire SynthBoard in.

Anything else — read the reference or get in touch.

What's the difference between the REST API and the MCP server?

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.

Do I need an API key or OAuth?

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.

How do I pay for API calls?

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.

What's the rate limit?

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.

How do webhooks work?

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.

Is the REST API stable?

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.

Ship the board.
Start free, with one message.

It waits in her box after you sign up. Nothing is sent until you press send.