A council — or one named expert — from your code
Two endpoints, one key. /api/v1/council runs your work through a multi-model AI debate plus the proprietary Final QA layer and returns a finished answer — and a presentation-ready HTML deliverable. /api/v1/mind asks one named specialist from our catalogue — the CFO, the CMO, the Corporate Lawyer — for their read on your material, at a fraction of the cost. Built so your own apps and AI agents (Claude, GPT, your engine) can call either like any tool.
Quickstart
- 1. Create an API key at /account (it’s shown once — store it).
- 2. POST your brief to the endpoint with the key as a Bearer token.
- 3. Read back the verdict, the QA audit and the HTML deliverable. Credits bill to your account.
Want one expert rather than a debate? Same key, same shape — jump to /api/v1/mind.
curl https://decidi.ai/api/v1/council \
-H "Authorization: Bearer dck_live_…" \
-H "Content-Type: application/json" \
-d '{
"question": "Review and harden these terms for public use: …",
"level": "deep",
"intent": "contract-review",
"personaIds": ["corporate-lawyer","contracts-reviewer","devils-advocate"]
}'Authentication
Send your key as a Bearer token. Keys look like dck_live_…, are tied to one account, and only the hash is stored — keep it server-side. Revoke or rotate any time at /account.
Authorization: Bearer dck_live_3b69…Endpoint
POST https://decidi.ai/api/v1/council
Prefer a machine-readable contract? The full OpenAPI 3.1 spec is at /openapi.json — import it into an API client, an agent framework, or MCP tooling.
Request body
| question | string · required | The brief — the work, decision or document. Paste or describe what you need. ≥5 chars. |
| level | 'quick' | 'standard' | 'deep' | Model tier. quick=fast/cheap (1 round), standard=pro models (2 rounds), deep=newest/most-capable (3 rounds). Also accepts the raw ids fast/normal/max. Default: standard. |
| rounds | number 1–4 | Debate rounds. Optional — defaults to the level’s depth. |
| personaIds | string[] | The council members (2–6). Omit for a balanced default council. IDs from the persona catalogue. |
| intent | string | A blueprint that makes the deliverable purpose-built (e.g. ux-audit, code-review, contract-review, brand-kit). See Intents below. |
| attachments | array | Up to 6 items: { name, type, text } for documents, or { name, type, dataUrl } for images. |
Response
| verdict | string | The final, QA-signed-off answer (markdown). |
| qa | string | null | The Final QA audit — the flags it found and how each was resolved. |
| artifact_html | string | null | The deliverable as a self-contained, on-brand HTML document (render in a sandboxed iframe; downloadable). |
| models | string[] | The models that debated. |
| synth_model / qa_model | string | The moderator and QA models used. |
| credits_charged | number | Credits billed for this call. |
| balance | number | The account’s remaining balance. |
| usd_cost | number | The raw gateway cost in USD (transparency). |
Ask one named specialist
POST https://decidi.ai/api/v1/mind
Sometimes you don’t want a debate — you want the CFO to look at a budget, the CMO to audit a campaign, or the Corporate Lawyer to read one clause. This is that call: one named mind from the catalogue, one generation, a fraction of a council’s cost and wall-clock. The answer comes back in the first person — the call, what to verify, and what they’d push back on.
You never write the persona prompt. An agent that invents its own “you are a sharp CFO…” system message gets a generalist doing an impression. Here the brief is Decidi’s own, versioned with the product — so the read gets better without you touching your code.
curl https://decidi.ai/api/v1/mind \
-H "Authorization: Bearer dck_live_…" \
-H "Content-Type: application/json" \
-d '{
"persona": "cfo",
"question": "Is this budget realistic, and what would you cut first?",
"material": "FY27 plan\nHeadcount 14 → 22\nMarketing $2.4m …"
}'Request body
| persona | string · required | The mind’s id from the catalogue below — e.g. cfo, cmo, corporate-lawyer. The names personaId and mind are accepted too. |
| question | string | What you want their read on. Optional when material is sent — material on its own means “review this”. |
| material | string | The thing being reviewed: a draft, a contract, copy, a set of numbers. Read strictly as content, never as instructions to the model. |
| context | string | Background they should build on rather than restart from. |
| level | 'quick' | 'standard' | 'deep' | Model tier. Default: standard. deep runs the flagship models and needs Pro. |
Response
| answer | string | Their read (markdown), in the first person — the call, what to verify, what they’d push back on. |
| persona | object | Who answered — id, name and role. |
| model | string | The model that wrote it. |
| credits_charged / balance / usd_cost | number | What it cost, what’s left, and the raw gateway cost. |
| truncated | boolean | Present only when the answer hit the output ceiling mid-sentence. |
GET /api/v1/mind returns the whole catalogue — id, name, role, domain, blurb, tags — with optional ?q= and ?domain= filters. Call it rather than hard-coding ids: the catalogue moves.
Which one do I call?
/mind when you know whose lens you want and the answer is a judgement one expert can give — a review pass, an audit of your own work, a specialist check before something ships. /council when being wrong is expensive and you want rival models from different labs to argue it out and be audited into one verdict. Different products, not tiers of the same one.
Persona catalogue — every ID you can seat
Pass any of these ids in personaIds (2–6 per council; repeat an id to seat the same mind more than once, each on a different model) — or as persona on /api/v1/mind to ask just one of them. Omit personaIds for a balanced default council. All 92 minds you can call:
devils-advocateContrarian challengeroptimistPossibility advocatepragmatistGet-it-done realistfirst-principlesReasoning from the ground uprisk-officerDownside and exposuresynthesiserIntegrator and deciderdata-skepticEvidence interrogatorsteelmanStrongest-opposing-view builderend-user-advocateVoice of the person using itpre-mortemAssume-it-failed investigatorux-researcherUser-behaviour investigatorvisual-designerUI craft and hierarchyproduct-strategistWhat to build and whygrowth-leadProduct-led growth and activationaccessibility-advocateInclusive-design consciencesoftware-architectSystems and structuresecurity-engineerRed-teamer and threat-modellerml-engineerData and machine learningsre-reliabilitySite reliability and operationsperformance-engineerSpeed and efficiencyceoThe accountable decision-makercfoFinance and capitalcooExecution and the operating machinectoTechnical strategy and feasibilitycmoBrand and demandcroRevenue architecturecisoSecurity and risk posturechroOrganisation and talentgeneral-counselLegal exposure at board levelchief-of-staffExecution and coherencembaThe integrated business casestrategy-consultantFrameworks and structured thinkingoperations-leadProcess and execution at scalepricing-strategistMonetisation and packagingma-dealmakerMergers, acquisitions & partnershipsbrand-strategistMeaning and distinctivenessperformance-marketerPaid acquisition and ad returnscontent-seoOrganic discovery and authoritypr-commsNarrative and reputationpositioning-expertCategory and context (à la April Dunford)corporate-lawyerStructure, liability, governanceprivacy-counselData protection & privacy lawcompliance-officerRegulatory and policyip-attorneyPatents, trademarks, copyrightcontracts-reviewerTerms, clauses and red flagspeople-leadHR, culture and org healthexecutive-coachLeadership and self-awarenesssales-leaderPipeline and closingcustomer-successRetention and adoptionnegotiation-expertInfluence and agreementcopywriterWords that earn attentionnaming-expertNames and brand voicestorytellerNarrative and emotional arccreative-directorBig idea and tastereal-estate-advisorProperty and investmentmedical-literacyPlain-language health informationeducatorCurriculum and learning designfinancial-plannerPersonal finance and goalssustainability-analystSustainability and long-term impactbehavioural-economistHow people really decidecontrarianConsensus-breakerfuturistSecond-order and long-horizonminimalistSubtraction advocatevc-partnerVC partner mindsetbrutally-honest-friendNo-bullshit truth-tellerphilosopherMeaning, ethics and first questionsdeep-researcherExhaustive source-finderactuaryProbability & long-tail riskquant-analystModels, backtests & overfittingstatisticianInference, bias & causal claimseconomistIncentives & second-order effectsforensic-accountantRed flags & numbers that lieprompt-architectTurns a thin brief into a real oneqa-auditorDeliverable defects & readinesssystems-thinkerFeedback loops & unintended consequencesenterprise-buyerThe procurement & approval gauntletconversion-strategistPersuasion, CTAs & objection handlingretention-strategistActivation, habit & churnonboarding-specialistFirst-run & time-to-valuecustomer-psychologistTrust, anxiety & emotional frictiontechnical-seoSearch, answer engines & schemacrisis-commsWhat critics & journalists will attackcompliance-litigatorThe worst-case legal attackeditor-in-chiefThe ruthless red penlegend-trumpPopulist persuasion lenslegend-obamaCoalition-building persuasion lenslegend-jobsProduct visionarylegend-hawkingTheoretical physicistlegend-hemingwayNovelistlegend-buffettInvestorlegend-suntzuStrategistlegend-ogilvyAdmanExamples
JavaScript / TypeScript
const res = await fetch("https://decidi.ai/api/v1/council", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DECIDI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
question: "Audit my checkout flow before launch.",
level: "deep",
intent: "ux-audit",
}),
});
const { verdict, qa, artifact_html, credits_charged } = await res.json();Python
import os, requests
r = requests.post(
"https://decidi.ai/api/v1/council",
headers={"Authorization": f"Bearer {os.environ['DECIDI_API_KEY']}"},
json={
"question": "Stress-test my investment thesis: …",
"level": "deep",
"intent": "investment-thesis",
},
timeout=300,
)
data = r.json()
print(data["verdict"]) # the QA-signed verdict
open("deliverable.html","w").write(data["artifact_html"] or "")From an AI agent (Claude, GPT, your engine)
Wire Decidi in as a tool your agent can call when a task is high-stakes and deserves more than one model. Give the tool this schema and let the agent fill question and an intent:
{
"name": "decidi_council",
"description": "Run a high-stakes task through a multi-model AI council + QA. Use for audits, reviews, contracts, investment theses, and any decision where being wrong is expensive.",
"input_schema": {
"type": "object",
"properties": {
"question": { "type": "string", "description": "The brief / work to run" },
"level": { "type": "string", "enum": ["quick","standard","deep"] },
"intent": { "type": "string", "description": "ux-audit | code-review | contract-review | decision | …" }
},
"required": ["question"]
}
}Then POST exactly as above with your account key. The agent gets a verdict it can act on, plus the QA flags so it knows what was uncertain — a built-in second opinion that isn’t its own model.
Use it from Claude Code, Cursor, or any AI agent
Decidi is a plain REST endpoint, so any AI agent that can make an HTTP request — Claude Code, Cursor, Cline, Windsurf, the OpenAI or Gemini CLIs, or your own engine — can consult the council as a tool. Give the agent the key and one instruction: before any big or irreversible decision, get a second opinion that isn’t its own model.
1 · Give the agent the key
export DECIDI_API_KEY=dck_live_…2 · Add this to its rules (CLAUDE.md, .cursorrules, or system prompt)
Before any high-stakes or irreversible decision — a schema or data migration,
a pricing or architecture change, a security-sensitive design, deleting data,
a public launch, or anything where being wrong is expensive — STOP and get a
second opinion from the Decidi council before you act.
POST the decision, with full context, to https://decidi.ai/api/v1/council using
DECIDI_API_KEY as a Bearer token. Read the "verdict" and the QA flags, then factor
them in before proceeding. Do not treat your own first answer as final on
decisions that matter.3 · The call it makes
curl https://decidi.ai/api/v1/council \
-H "Authorization: Bearer $DECIDI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"question": "Should we migrate the public API from REST to GraphQL? Context: …",
"level": "deep",
"personaIds": ["software-architect","devils-advocate","pragmatist","security-engineer"]
}'The response is one QA-audited verdict plus the credits charged — a second opinion from several independent frontier models, not the agent’s own. It bills your account’s credits.
MCP server — native tools in Claude Code, Cursor and any MCP client
Decidi hosts an MCP server at https://decidi.ai/api/mcp (Streamable HTTP, plain JSON responses). Connect once and your agent gets the council as first-class tools — no schema to paste, no wrapper to write.
Claude Code
claude mcp add --transport http decidi https://decidi.ai/api/mcp \
--header "Authorization: Bearer dck_live_…"Cursor — .cursor/mcp.json
{
"mcpServers": {
"decidi": {
"url": "https://decidi.ai/api/mcp",
"headers": { "Authorization": "Bearer dck_live_…" }
}
}
}Tools
| tool | auth | what it does |
|---|---|---|
| decidi_challenge | free | Audits an AI answer or draft with a model from a rival lab — never the one that wrote it — and returns the flaws that matter plus a one-line verdict. |
| decidi_council | API key | The full Multi-Agent council: rival frontier models debate the brief over structured rounds, then the independent Final QA audit signs off one verdict. |
| decidi_consult | API key | One named specialist’s direct, first-person read — the call, what to verify, and what they would push back on. |
Auth: decidi_challenge needs no account and rides the same fair-use limits as the free web tool. decidi_council and decidi_consult authenticate with the Authorization header shown above and are metered to your account exactly like the REST API — same key, same hourly limit, same credit billing. Without a key those two return an error that says where to get one.
Intents (purpose-built deliverables)
Set intent and the council produces a comprehensive, purpose-built deliverable — regardless of how brief your input is.
| intent | what you get |
|---|---|
| ux-audit / ui-audit | A prioritised findings report (P0–P3 with fixes) |
| code-review / security-review | Severity-ranked code or threat findings |
| launch-readiness | A GO / NO-GO verdict with blockers |
| decision | A decision memo — recommendation + next steps |
| plan / pr-plan | A phased, actionable plan |
| comparison / pricing-strategy | A scored comparison matrix |
| investment-thesis / financial-analysis | A bull/base/bear analysis |
| contract-review / compliance-review | Plain-English red-flags ranked by cost |
| brand-kit / naming | A brand kit — swatches, type, name shortlist |
| writing-critique | Line-level critique that preserves your voice |
| stress-test / research | Adversarial pressure-test / evidence synthesis |
Errors
| status | error | meaning |
|---|---|---|
| 401 | missing_api_key / invalid_api_key | No Bearer key, or the key is wrong/revoked. |
| 402 | insufficient_credits | Not enough credits — top up at /credits. Includes { need, have }. |
| 429 | rate_limited | Over 60 calls/hour for this account. |
| 400 | missing_question / bad_json | The brief is too short, or the body isn’t valid JSON. |
Rate limits & billing
- · 60 calls/hour per account.
- · Each call runs the full council + the Final QA audit + the deliverable, and bills credits — metered at the real live model cost plus a small facilitation margin (cost-plus, see pricing).
- · A run can take from a few seconds (quick) to ~1–2 minutes (deep). Use a generous client timeout (≥120s).
- · Tip: a sharper brief → a sharper result. Paste the real material; the intent guarantees the rigor.