Guide · 6 / 6
API & MCP
Run deliberation meetings where several AIs share the table through the API. In a client you already use, only the address, the key, and the model name change.
What you can do
Run meetings where several AIs deliberate and review together through the API. It is OpenAI-compatible, so an existing client only needs a different base URL, key, and model name.
Details
Run meetings where several AIs deliberate and review together through the API. It is OpenAI-compatible, so an existing client only needs a different base URL, key, and model name. The meetings you create replay in the same web room under My meetings, and share links and public pages work as they do elsewhere. Results support decision-making; they are not advice from anyone with professional qualifications.
Quick start
The last user message is the question; the messages before it are background material. A system message becomes judging criteria and constraints. Send your key in the Authorization header as a Bearer token.
Details
The last user message is the question; the messages before it are background material. A system message becomes judging criteria and constraints. Send your key in the Authorization header as a Bearer token. The question and options below are placeholders — the request shape (messages and extra_body.mpm) matches the example below.
https://hiai-meeting.com/v1
curl
curl https://hiai-meeting.com/v1/chat/completions \
-H "Authorization: Bearer $HIAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "mpm-decide-standard",
"messages": [
{ "role": "system", "content": "Decide within the confirmed budget." },
{ "role": "user", "content": "Which do we verify first: pricing, demand, or channel?" }
],
"extra_body": {
"mpm": {
"answer_shape": "choice",
"choices": ["Pricing", "Demand", "Channel"]
}
}
}'OpenAI SDK (JavaScript)
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://hiai-meeting.com/v1',
apiKey: process.env.HIAI_API_KEY,
});
const answer = await client.chat.completions.create({
model: 'mpm-decide-standard',
messages: [
{ role: 'system', content: 'Decide within the confirmed budget.' },
{ role: 'user', content: 'Which do we verify first: pricing, demand, or channel?' },
],
extra_body: { mpm: { answer_shape: 'choice', choices: ['Pricing', 'Demand', 'Channel'] } },
});
console.log(answer.choices[0].message.content);Issue a key
Issue a personal key from the API keys section in settings. The raw key appears once in the issue response, and only the mpm_xxxxxxxx prefix is kept in the list.
Details
Issue a personal key from the API keys section in settings. The raw key appears once in the issue response, and only the mpm_xxxxxxxx prefix is kept in the list. It is stored only as a hash, so a lost key has to be reissued, and you revoke it from the same section. The raw key is never written to logs.
Billing
Every API and MCP call is charged in credits (Cr), regardless of purpose. There is no free trial or free single use: charges draw subscription usage first, then purchased credits. Actual usage is the billing basis, and a shortfall is caught during setup.
Details
Every API and MCP call is charged in credits (Cr), regardless of purpose. There is no free trial and no free single use. Charges draw subscription usage first, then purchased credits — API calls never spend the free credits earned from ads. Actual usage is the billing basis, and a shortfall is caught during setup. The usage object on the response carries the credits actually deducted: completion_tokens, total_tokens, and cost are that value, while prompt_tokens is 0. usage.mpm.credit_cr is the amount taken from purchased credits, and usage.mpm.allowance_percent is the share taken from subscription usage.
Set up your tool
Use a judgment meeting as an MCP tool inside your agent (Claude Code, opencode, Codex), or call it directly over the OpenAI-compatible API (opencode provider, Python SDK). Pick your tool, copy the config as-is, and replace the key placeholder with your personal key.
claude mcp add --transport http hiai https://hiai-meeting.com/v1/mcp \
--header "Authorization: Bearer <HIAI_API_KEY>"Note: this is a judgment model — one request runs one meeting and takes minutes. To drive a coding agent, choose an agent-type preset (e.g. mpm-agent-standard); for judgments, connect it as the MCP deliberate tool or a subagent model.
Tool calls during a meeting (gathering material)
If the meeting needs more evidence it asks for tool calls, and it resumes toward a verdict once your client runs them and sends the results back. The server never runs the tools. What you send becomes evidence for every participant, so assume your material reaches external providers.
Details
If the meeting needs more evidence it asks for tool calls. The job status becomes awaiting_tools, and the assistant message carries tool_calls (id, function.name, function.arguments); run them on the client and send the results back as tool messages with the same tool_call_id, and the meeting resumes toward a verdict. The server never runs the tools. What the client sends becomes evidence for every participant, and that meeting runs on multiple provider models — assume your material reaches external providers. Limits: 3 tool points per meeting, 6 calls per point, 8,000 characters per result, 24,000 characters per point, and 600 seconds of waiting. Past a limit, it judges on the evidence gathered so far. Credential- or personal-data-bearing results are dropped from the evidence (tool_calls appear only for meetings started with tools).
Judgment skill package
A skill that helps agents call the multi-AI judgment tool at the right time with a good question. It covers when to open a meeting and when not to, how to write the question, background and decision criteria, how to pick a preset, mode and cost cap, and the async polling and result delivery. Download a bundle below and install it for your tool.
- Claude Code plugin (zip)
- Codex skill folder (zip)
- opencode commands and agent (zip)
- Claude.ai skill (zip)
The MCP connection uses the environment variables HIAI_MCP_URL (endpoint) and HIAI_API_KEY (personal key). Presets and modes are not baked into the skill; it reads them from the server at run time. The public repository is set at release time.
extra_body.mpm options
Values specific to MPM go inside extra_body.mpm rather than in OpenAI fields. All of them are optional, and omitting one applies the server default.
- answer_shape
- Answer shape — choice, score, yes_no, or free. Defaults to free.
- choices
- The options to weigh. They are the subject when answer_shape is choice.
- cost_cap_usd
- Cost ceiling for this call in USD. The run stops before exceeding it. Omit to use the server default.
- visibility
- private (default) or public. Non-public is the default.
- round_cap
- Upper bound on discussion rounds. Omit to use the model preset value.
- max_utterance_length
- Character limit for a single utterance. Omit to use the model preset value.
- purpose
- discuss, decide, inspect, explore, commentary, or explain. When set, it changes only the preset's purpose and keeps the depth from model. Omit it to use the purpose of model; with no model either, the server derives it from answer_shape.
- web_search
- Web-search mode. true turns it on. Turning it on makes the meeting a coin meeting that spends credits. Omit to use the preset value.
- reasoning
- Reasoning mode. true turns it on. Turning it on makes the meeting a coin meeting that spends credits. Omit to use the preset value.
- evidence
- Evidence mode. It is enabled only when your plan includes it; otherwise the run proceeds with it off and records the swap in mpm.preset. Omit to use the preset value.
- presets
Pick the whole, model, persona, and progress presets, the same ones the web new-meeting dialog uses. Picking only one leaves the rest at the purpose's Standard.
Details
Preset selection — the whole, model, persona, and progress slots. Pick the whole/model/persona/progress presets, the same ones the web new-meeting dialog uses (there is no per-seat model or persona override). whole is a whole-preset id (mpm-…), model is a model placement, persona is a persona placement, and progress is a progress preset (fast, balanced, deep, independent). Each slot also accepts a preset id you saved in the web app (my-<scope>-…@v<n>, listed by GET /v1/models); another person's preset is rejected. Picking only one leaves the rest at the purpose's Standard, and changing any value marks the result as custom.
- idempotency_key
- A key that keeps a repeated request from creating a second meeting. The same key returns the same job.
Model list
GET /v1/models returns recommended presets by purpose and depth. They match the Light, Standard, and Deep presets in the web new-meeting dialog, and the name is the model id, so pass it to model as is. The preset sets the participant tier, headcount, persona placement, rounds, and deliverable; omit model to use the standard preset for the purpose.
Details
GET /v1/models returns recommended presets by purpose and depth. They are the same Light, Standard, and Deep presets as the web new-meeting dialog (fast = Light), and the name is the model id, so pass it to model as is. The preset you pick sets the participant model tier, headcount, persona placement, rounds, utterance length, and deliverable, and each entry lists those values. Omit model to use the standard preset for the purpose; an id that is not on the list is rejected with 400. Turn on web search, reasoning, or evidence with web_search, reasoning, and evidence in extra_body.mpm. Model tiers or evidence mode your plan does not include are swapped for ones you can use, and the swaps are listed in mpm.preset on the response. The response also carries mpm.presets, the item preset keys (model placement, persona placement, progress), which you pick with extra_body.mpm.presets. Presets you build in the web app appear here too (my-<scope>-…@v<n>) and can be passed in the matching slot; another person's preset is rejected.
Judgment
Judgment form: one request = one meeting, takes minutes (up to 10), billed per meeting. Use it as a judgment tool (MCP deliberate) or a subagent model, not as a coding agent's main model.
Agent
Agent form: a coding agent's main model — seconds per step, a meeting only when needed. Each step bills one moderator call; a step that convenes a meeting adds one meeting.
- mpm-agent-fast — summon rule: at most 1 meeting(s) per conversation · always: planning · cap $0.10 per meeting
- mpm-agent-standard — summon rule: at most 2 meeting(s) per conversation · always: planning · final review · cap $0.30 per meeting
- mpm-agent-deep — summon rule: at most 4 meeting(s) per conversation · always: planning · final review · cap $0.60 per meeting
Status
Read progress from mpm.status in the response, and keep watching the meeting in the same web room. Streaming (stream: true) is not token-by-token output: it keeps the connection alive with a heartbeat and streams round progress. For long meetings, prefer stream: true.
Details
Read progress from mpm.status in the response. The meeting lives in the same room and the same storage as a web meeting, so you can keep watching it there, and trace_url is a viewing address that requires the owner to sign in. Streaming (stream: true) is not token-by-token output: it sends a first byte and a heartbeat every 30 seconds to keep the connection alive, streams round progress as reasoning_content, and sends the finished result at the end, only in the shape an OpenAI client accepts. For long meetings prefer stream: true — a non-streaming wait can hit a proxy idle timeout.
- created
- The job was accepted.
- running
- The deliberation is running.
- awaiting_tools
- The meeting is waiting for client tool results — run the tool_calls and return them as tool messages with the same tool_call_id.
- completed
- It reached a conclusion.
- partial
- It ended partially without a conclusion.
- blocked
- A safety rule stopped it — the response carries finish_reason content_filter.
- failed
- The run failed.
Limits and safety
Meetings are non-public by default. Debt brokering and gambling requests are refused; legal, investment, and medical topics proceed only after you confirm, with output limited to general information. Inputs with personal data, trade secrets, or credentials are warned about or blocked.
Details
Meetings are non-public by default. Requests for debt brokering, debt adjustment, or arranged lending, and requests for gambling, betting, lotteries, and speculative games, are refused rather than run. Legal, investment, and medical topics show a notice and proceed only after you confirm, with output limited to general information. Inputs containing personal data, trade secrets, or credentials are warned about or blocked, and this applies to private meetings, not only public ones. Errors use the OpenAI error shape: 401 for a bad key, 400 for an invalid input value, and 404 when a resource is not found, without revealing whether it ever existed. Live model calls are published after a round-trip check against an isolated stack.