Getting Started

Run your first council query in under a minute. No setup required.

  1. Type your question

    Enter any high-stakes question into the query box on the home page. Be specific: include context, constraints, and what kind of recommendation you need. For example: "Should we migrate our monolith to microservices given a 6-person engineering team and $2M ARR?"

  2. Choose a panel

    Select a panel of expert agents from the dropdown. Each panel is a curated group of AI specialists tuned for a specific domain. The Default Panel (Strategist, Risk Analyst, Devil's Advocate) works for most general questions. Pick a specialized panel for domain-specific queries.

  3. Review the results

    Each agent delivers an independent analysis with a recommendation, confidence score, key considerations, and risks. A synthesis step combines all opinions into a single decision document with an executive summary, action plan, and risk matrix. Expand any agent card to see their full reasoning.

Free-tier queries currently run on Claude Haiku 4.5 via the Anthropic API. Signed-in users can bring their own API keys for Claude, GPT, Gemini, and other premium models — your prompts and outputs then go directly to the provider you chose.

Panels

A panel is a curated group of expert AI agents that deliberate on your query in parallel. Each panel is designed for a specific domain or decision type.

How panels work

When you run a council, every agent on the selected panel independently analyzes your query using their unique expertise, analytical framework, and persona. Each agent has a weight that determines how much influence they have on the final synthesis. Some agents are marked required, meaning they always participate and may hold veto authority (for example, the Safety Officer).

Available panels

Default Panel

Fast 3-agent council for general business decisions. Strategist, Risk Analyst, Devil's Advocate.

Quick Take

The fastest council -- 2 agents for a rapid decision gut-check with red-teaming.

Full Advisory Panel

The most comprehensive council with 8 expert agents for high-stakes decisions.

Software Engineering

Architecture, tech stack, build-vs-buy, technical debt. Architect, TDD Engineer, DevOps, Security, PM, QA.

Product Management

Roadmap, pricing, go-to-market. Product Manager, UX Researcher, Data Scientist, Marketing, Sales.

Healthcare

Clinical decision support with Attending Surgeon, Clinical Pharmacist, and specialist agents.

Biotech Advisory

Drug development, clinical trials, regulatory submissions. 7 specialists from trials to post-market.

Military

Strategic military advisory using ranked authority. Strategist, Intelligence Analyst, and doctrine frameworks.

Sales Strategy

Deal strategy, pipeline, pricing, competitive positioning. Sales Director, Engineer, Negotiation Expert.

IT Operations

Infrastructure, security, and operations. IT Director, Cybersecurity, DevOps/SRE, Network, DR, Risk.

Personal Finance

Holistic financial planning: tax, investment, risk, legal, and behavioral perspectives.

Startup Launch

Stress-test a new venture from five angles: VC, Marketing, Legal, Technical, and Financial.

Real Estate

Investment analysis from multiple professional disciplines for rigorous investment theses.

Policy Debate

Multi-perspective policy analysis with equally weighted conservative, progressive, and economist viewpoints.

Crisis Response

Rapid-response council for active or imminent organizational crises requiring decisive action.

Manufacturing

Production and operations advisory. Systems Engineer, QA Manager, and process specialists.

Technology

Technology strategy with Systems Engineer, CISO, and senior technical leadership.

Event Planning

Full-spectrum advisory for large-scale conferences, festivals, galas, and corporate events.

Sports Strategy

Franchise decisions, player acquisition, contract negotiations using analytical frameworks.

Plant-Based Products

Sustainable food product strategy from farm to consumer. Agricultural, culinary, and market perspectives.

Plus specialized geopolitical scenario panels. New panels are added regularly.

Workflows

Workflows are multi-step decision pipelines with human review between each stage. Unlike a single council query, workflows chain multiple councils together in a structured sequence.

Councils vs. workflows

A council is a single round of multi-expert deliberation: you ask a question, agents analyze it in parallel, and a synthesis combines their opinions. A workflow is a sequence of councils and processing steps that tackle a complex process end-to-end.

For example, a "Due Diligence" workflow might run four stages: financial analysis, legal review, technical assessment, and a final synthesis. Each stage can use a different panel, and you can review and refine between stages.

When to use workflows

Use a workflow when your decision requires multiple phases that build on each other, when you need human review checkpoints, or when the process is standardized enough to template. Examples:

  • Product launch planning (market analysis, technical feasibility, go-to-market)
  • Incident postmortem (timeline, root cause, remediation, prevention)
  • TDD development (requirements, test design, implementation, review)
  • RFP response (requirements parsing, solution design, pricing, final assembly)

Running a workflow

Select the "Workflows" tab in the main interface. Browse available templates, pick one, and fill in your context. The workflow guides you through each stage, showing progress and letting you adjust inputs between steps.

Custom Agents

Create expert agents tailored to your organization's specific domain knowledge and decision-making needs.

What defines an agent

Every agent is a Markdown template with YAML frontmatter. The frontmatter defines metadata (name, role, expertise tags, default weight), and the body is a system prompt that shapes the agent's persona, analytical framework, and output style.

Creating a custom agent

In the web interface, go to the Agents page and click "Create Agent." You can define:

  • Name and role -- The agent's title and professional identity
  • Expertise -- Domain tags that help match agents to queries
  • Analytical framework -- The step-by-step methodology the agent follows
  • Decision criteria -- What the agent optimizes for (safety, ROI, speed, etc.)
  • Weight -- How much influence this agent has in the synthesis (default 1.0)
  • Model -- Optionally override which LLM this agent uses

Sharing and forking

Agents can be shared via the marketplace. You can fork any public agent, customize it, and add it to your panels. All agents support version tracking.

API Reference

Integrate Meta Council into your existing tools and workflows with the REST API. All endpoints accept and return JSON.

Auto-generated machine-readable spec available at /openapi.json (OpenAPI 3.1). Use it to generate client libraries in any language.

Base URL

https://meta-council.com/api

All paths below are relative to this base. The Developer API (v1) uses /api/v1 instead.

Authentication

Two methods are supported, but they are scoped to different endpoint families and are not interchangeable on the same request:

MethodHow to obtainHeader formatUsed for
JWT token POST /api/auth/login with email + password Authorization: Bearer <jwt_token> Everything under /api/* except /api/v1/* — and also the /api/v1/keys key-management endpoints themselves
API key Settings > Developer API in the web UI, or POST /api/v1/keys Authorization: Bearer mc_<key> Only /api/v1/* endpoints — except /api/v1/keys, which requires the JWT

API keys use the mc_ prefix and are shown only once at creation time. Store them securely.

Rate limits

TierCouncil runs / hour
Free3
Pro20
Enterprise200

Council runs are also capped per day: 5/day on Free, 50/day on Pro, 2,000/day on Enterprise. Requests to /api/v1/* endpoints share a flat 120 requests/minute limit per API key, applied identically across all tiers (configurable via API_KEY_RATE_PER_MIN on self-hosted deployments). A few specific endpoints carry small fixed per-IP limits regardless of tier: POST /api/council/run 10/min, file upload 3/min, Laws & Regulations research 5/min, workflow goal-parse 10/min, workflow start 5/min, registration 10/hour. Ticket-validation ingestion independently limits source-IP and authenticated-actor attempts to 60/min by default (self-hosted setting TICKET_VALIDATION_ATTEMPTS_PER_MIN). Most other endpoints have no explicit rate limit.

When you exceed a limit, the response is 429 Too Many Requests with a Retry-After header giving the number of seconds to wait before retrying.

Response format

All responses are JSON. Successful responses return a top-level object. Errors return {"detail": "error message"} with an appropriate HTTP status code. See Error Handling below.

Council API

The core product. Start a multi-expert council session, poll for results, and retrieve agent/panel metadata.

POST /api/council/run

Start a new council session. Agents analyze your query in parallel, then a synthesis step combines their outputs. Returns immediately with a session ID for polling.

Request body
FieldTypeRequiredDescription
querystringYesThe question or decision to deliberate on. Be specific: include context, constraints, and desired output.
panelstringNoPanel slug. Defaults to "default". "auto" and "dynamic" are aliases for the same tier-aware auto-selection: Free-tier requests get an embedding-matched pre-built panel; Pro/Enterprise requests get an MMR-curated custom panel drawn from all agents (recorded in the session as panel_slug: "auto" either way). See GET /api/panels for pre-built panel slugs.
model_overridestringNoOverride the model for all agents in this run (e.g. "claude-sonnet-4-6", "gpt-4o"). Applied best-effort: you must be authenticated (a valid JWT, not an API key, on this endpoint) and have a matching provider API key saved under Settings. If either is missing, the override is silently ignored — every agent and the synthesis step run on the current platform default model instead, the request still returns 200, and no response field flags the fallback. Compare agents[*].model in the completed session against the model you requested to detect it.
council_idstringNoID of a saved custom council to run instead of a named panel. Takes precedence over panel.
is_privatebooleanNoAuthenticated JWT runs default to true and are restricted to the owning account and authorized administrators. Set false only to explicitly publish non-confidential content. Guest runs are always public, even if this field is supplied as true.
Response 200
FieldTypeDescription
session_idstringUnique session identifier. Use this to poll for results.
statusstringAlways "running" on initial response.
# Start a council session curl -X POST https://meta-council.com/api/council/run \ -H "Authorization: Bearer <jwt_token>" \ -H "Content-Type: application/json" \ -d '{ "query": "Should we acquire CompanyX for $50M given our $2M ARR and 6-person team?", "panel": "default", "is_private": true }' # Response { "session_id": "ses_a1b2c3d4", "status": "running" }

GET /api/council/sessions/{session_id}

Poll a running session for status updates and results. Call this every 1-3 seconds until status is "completed" or "failed".

Session status values
StatusMeaning
runningAgents are analyzing the query in parallel. The agents object shows per-agent progress.
synthesizingAll agents finished. The synthesis model is combining results into a unified recommendation.
completedDone. The synthesis and agents fields contain full results.
failedAn error occurred. Check the error field for details.
Response (completed) 200
FieldTypeDescription
session_idstringSession identifier.
statusstringOne of: running, synthesizing, completed, failed.
querystringThe original query submitted.
panelstringPanel slug used for this session.
synthesisobjectThe combined recommendation (see Synthesis object below). Only present when status is "completed".
agentsobjectMap of agent name to agent result object (see Agent object below).
durationnumberTotal session duration in seconds.
Synthesis object
FieldTypeDescription
executive_summarystring2-3 paragraph summary of the recommendation with the key decision and reasoning.
detailed_analysisstringFull analysis combining all agent perspectives, typically 500-2000 words.
consensus_pointsstring[]Points where the majority of agents agree.
dissenting_viewsstring[]Notable disagreements or minority opinions from specific agents.
risk_matrixobject[]Array of risks, each with description, likelihood (low/medium/high), impact (low/medium/high), raised_by (who flagged it), and mitigation.
recommended_actionstringClear, actionable next steps based on the council's combined analysis.
Agent result object
FieldTypeDescription
namestringDisplay name of the agent (e.g. "Chief Strategist").
rolestringAgent's professional role and perspective.
modelstringLLM model used for this agent's analysis.
weightnumberAgent's influence weight in the synthesis (typically 1.0, safety_officer is 2.0).
statusstring"running", "completed", or "failed".
recommendationstringThe agent's recommendation (e.g. "PROCEED WITH CONDITIONS").
confidencenumberConfidence score from 0.0 to 1.0.
reasoningstringDetailed analysis and reasoning behind the recommendation.
key_considerationsstring[]Most important factors the agent weighed.
risksstring[]Risks identified by this agent.
dissenting_pointsstring[]Points where this agent disagrees with the likely consensus.
durationnumberTime in seconds this agent took to respond.
tokensnumberTotal tokens used by this agent (prompt + completion).
# Poll for results curl https://meta-council.com/api/council/sessions/ses_a1b2c3d4 \ -H "Authorization: Bearer <jwt_token>" # Response (completed) { "session_id": "ses_a1b2c3d4", "status": "completed", "query": "Should we acquire CompanyX for $50M?", "panel": "default", "duration": 18.4, "synthesis": { "executive_summary": "The council recommends proceeding with caution...", "detailed_analysis": "After analysis from three perspectives...", "consensus_points": [ "The acquisition target has strong product-market fit", "Current valuation is within acceptable range" ], "dissenting_views": [ "Risk Analyst flags integration complexity as underestimated" ], "risk_matrix": [ { "description": "Integration timeline exceeds 12 months", "likelihood": "medium", "impact": "high", "raised_by": "Risk Analyst", "mitigation": "Hire dedicated integration PM before closing" } ], "recommended_action": "Proceed to LOI with a 10% holdback..." }, "agents": { "Chief Strategist": { "name": "Chief Strategist", "role": "Strategic advisor", "model": "claude-haiku-4-5-20251001", "weight": 1.0, "status": "completed", "recommendation": "PROCEED WITH CONDITIONS", "confidence": 0.82, "reasoning": "The acquisition aligns with...", "key_considerations": ["Market position", "Team retention"], "risks": ["Integration complexity"], "dissenting_points": [], "duration": 6.2, "tokens": 2840 } } }

GET /api/panels

List all available panels with their agent compositions, descriptions, and metadata. Use the returned slugs as the panel parameter in POST /api/council/run.

# List panels curl https://meta-council.com/api/panels \ -H "Authorization: Bearer <jwt_token>"

GET /api/agents

List all 290+ available agents with their metadata, expertise tags, default weights, and descriptions. Useful for building custom panels or understanding which specialists are available.

# List agents curl https://meta-council.com/api/agents \ -H "Authorization: Bearer <jwt_token>"

GET /api/council/platform-status

Check the current default model being used by the platform. Returns the active model name and whether the platform is using the primary model or a fallback.

# Check platform status curl https://meta-council.com/api/council/platform-status \ -H "Authorization: Bearer <jwt_token>"

GET /api/council/model-specs

Get context window sizes for all supported models. Useful for determining which models fit your query length requirements.

# Get model specifications curl https://meta-council.com/api/council/model-specs \ -H "Authorization: Bearer <jwt_token>"

Workflow API

Multi-step decision pipelines with human checkpoints. Chain multiple council sessions together in a structured sequence.

GET /api/workflows/templates

List all available workflow templates (built-in and custom). Returns template name, slug, description, step count, and domain for each.

# List workflow templates curl https://meta-council.com/api/workflows/templates \ -H "Authorization: Bearer <jwt_token>"

GET /api/workflows/templates/{slug}

Get full details for a specific workflow template, including all steps, the agent template used per step, and example queries.

# Get template details curl https://meta-council.com/api/workflows/templates/due_diligence \ -H "Authorization: Bearer <jwt_token>"

POST /api/workflows/start

Start a new workflow session from a template. The first step begins immediately. Use the returned session ID to poll for progress and advance through checkpoints.

Request body
FieldTypeRequiredDescription
workflowstringYesWorkflow template slug (e.g. "due_diligence", "coding_tdd").
querystringYesUser-provided context and goal for the workflow. This is injected into every step.
step_modelsobjectNoOptional per-step model overrides, keyed by step index as a string (e.g. {"0": "claude-sonnet-4-6", "2": "gpt-4o"}). Each model id is validated against the platform's model catalog — unknown ids or out-of-range indices return 400. Retargets individual steps; does not apply one model to every step.
# Start a due diligence workflow curl -X POST https://meta-council.com/api/workflows/start \ -H "Authorization: Bearer <jwt_token>" \ -H "Content-Type: application/json" \ -d '{ "workflow": "due_diligence", "query": "Evaluating acquisition of CompanyX, a B2B SaaS company with $5M ARR" }' # Response { "session_id": "wf_x7y8z9", "status": "running", "current_step": 0, "total_steps": 4 }

GET /api/workflows/sessions/{session_id}

Poll a workflow session for status. Returns current step, completed step results, and whether a human checkpoint is pending approval.

# Poll workflow progress curl https://meta-council.com/api/workflows/sessions/wf_x7y8z9 \ -H "Authorization: Bearer <jwt_token>"

POST /api/workflows/sessions/{session_id}/advance

Approve or reject a checkpoint in a workflow. When a step completes, the workflow pauses at a checkpoint for human review. Call this to advance to the next step or reject and re-run the current step with adjusted context.

Request body
FieldTypeRequiredDescription
actionstringYes"approve" to advance to the next step, or "reject" to re-run the current step.
human_notesstringNoOptional feedback or adjusted context. Injected into the next step's prompt.
# Approve a checkpoint and advance curl -X POST https://meta-council.com/api/workflows/sessions/wf_x7y8z9/advance \ -H "Authorization: Bearer <jwt_token>" \ -H "Content-Type: application/json" \ -d '{"action": "approve", "human_notes": "Focus more on regulatory risk in the next step"}'

POST /api/workflows/parse-goal

Submit a natural language goal and get a recommended workflow template match. Useful for building chat-style interfaces where users describe what they want to accomplish.

Request body
FieldTypeRequiredDescription
goalstringYesNatural language description of what the user wants to accomplish.
# Match a goal to a workflow curl -X POST https://meta-council.com/api/workflows/parse-goal \ -H "Authorization: Bearer <jwt_token>" \ -H "Content-Type: application/json" \ -d '{"goal": "I need to do a thorough evaluation of a company we might buy"}'

POST /api/workflows/templates

Create a custom workflow template. Define the steps, panels, checkpoint rules, and context injection for each stage. The template's slug is derived automatically from name (server-side slugify) and returned in the response — it is not an input field. Available on any authenticated tier, up to 50 custom templates per account; scheduling (POST /schedules) and publishing to the public gallery (POST /templates/{slug}/publish) require Pro or Enterprise.

# Create a custom workflow template curl -X POST https://meta-council.com/api/workflows/templates \ -H "Authorization: Bearer <jwt_token>" \ -H "Content-Type: application/json" \ -d '{ "name": "My Custom Process", "description": "A 3-step evaluation pipeline", "steps": [...] }'

PUT /api/workflows/templates/{slug}

Update an existing custom workflow template. You can only update templates you own.

DELETE /api/workflows/templates/{slug}

Delete a custom workflow template. Built-in templates cannot be deleted.

Workflow Schedules API

Schedule workflows to run automatically on a recurring basis. Useful for periodic reviews, monitoring, and automated reporting.

GET /api/workflows/schedules

List all your workflow schedules with their configuration, next run time, and status.

# List workflow schedules curl https://meta-council.com/api/workflows/schedules \ -H "Authorization: Bearer <jwt_token>"

POST /api/workflows/schedules

Create a new workflow schedule. Specify the workflow, query, and recurrence (frequency, day, hour, timezone) for execution. New schedules are always created active; to create a disabled one, create it first and then call PUT /api/workflows/schedules/{schedule_id} with "is_active": false.

Request body
FieldTypeRequiredDescription
workflow_slugstringYesWorkflow template to execute on schedule.
querystringYesQuery/context passed to the workflow on each run.
frequencystringNoOne of "daily", "weekly", "monthly". Default: "weekly".
day_of_weekintegerNo0 (Mon) to 6 (Sun) for weekly schedules; day of month (clamped 1–28) for monthly. Default: 1.
hourintegerNoHour of day, 0–23, in the schedule's timezone. Default: 9.
timezonestringNoIANA timezone name. Default: "America/Los_Angeles".
# Schedule a weekly competitive analysis curl -X POST https://meta-council.com/api/workflows/schedules \ -H "Authorization: Bearer <jwt_token>" \ -H "Content-Type: application/json" \ -d '{ "workflow_slug": "competitive_analysis", "query": "Review competitor landscape for our SaaS product", "frequency": "weekly", "day_of_week": 1, "hour": 9, "timezone": "America/Los_Angeles" }'

PUT /api/workflows/schedules/{schedule_id}

Update an existing workflow schedule. Change the query, frequency/day_of_week/hour/timezone, or enable/disable it.

DELETE /api/workflows/schedules/{schedule_id}

Delete a workflow schedule. Any currently running instance will complete, but no new runs will be triggered.

History & Sharing

Access past council sessions and their full results. Public sessions are accessible at /s/{session_id} in the browser.

GET /api/history

List your past council sessions with metadata (query, panel, timestamp, status), most recent first. Histories are private: each account sees only its own sessions, and unauthenticated calls return an empty list. Returns a fixed window of your 50 most recent sessions, with no limit/offset/page/cursor parameters.

# List session history curl https://meta-council.com/api/history \ -H "Authorization: Bearer <jwt_token>"

GET /api/history/{session_id}

Get the full results of a past session -- the same data that powers the /s/{session_id} shareable link. Includes the complete synthesis, all agent results, and metadata.

# Get full session results curl https://meta-council.com/api/history/ses_a1b2c3d4 \ -H "Authorization: Bearer <jwt_token>"

Settings & Keys

Manage your account settings, provider API keys, model preferences, and developer API keys.

GET /api/settings

Get your current settings including configured provider API keys (masked) and default model preference. Synthesis strategy is served separately via GET /api/synthesis-strategy.

# Get current settings curl https://meta-council.com/api/settings \ -H "Authorization: Bearer <jwt_token>"

PUT /api/settings

Update your settings. Set provider API keys (Anthropic, OpenAI, Google, etc.), default model, and other preferences. Keys are stored encrypted.

# Set your Anthropic API key and default model curl -X PUT https://meta-council.com/api/settings \ -H "Authorization: Bearer <jwt_token>" \ -H "Content-Type: application/json" \ -d '{ "anthropic_api_key": "sk-ant-...", "preferred_model": "claude-sonnet-4-6" }'

POST /api/v1/keys

Generate a scoped developer API key with a 1–365 day lifetime (90 days by default). Requires JWT auth (not API key auth). The key is returned once and cannot be retrieved again -- store it immediately.

Request body
FieldTypeRequiredDescription
namestringNoA descriptive name for the key (e.g. "Production server", "CI pipeline"). Defaults to "Default" if omitted.
scopesstring[]NoLeast-privilege grants. The default includes catalog, council, and workflow read/run access but excludes clinical, Laws & Regulations (legal:run), Accounting, Marketing, Consulting, approval, settings, outreach, and tickets:validate scopes.
expires_in_daysintegerNo1–365; defaults to 90.
# Generate a new API key (requires JWT auth) curl -X POST https://meta-council.com/api/v1/keys \ -H "Authorization: Bearer <jwt_token>" \ -H "Content-Type: application/json" \ -d '{"name":"Production server","scopes":["catalog:read","councils:read","councils:run"],"expires_in_days":90}' # Response -- store the key immediately, it won't be shown again { "id": "a7dce37d-ef2e-4dc8-9497-00a3936e5f04", "name": "Production server", "key": "mc_a1b2c3d4e5f6...", "scopes": ["catalog:read", "councils:read", "councils:run"], "expires_at": "2026-10-09T12:00:00" }

GET /api/v1/keys

List your developer API keys. Returns key ID, name, creation date, and last-used timestamp. The full key is not returned (only the prefix).

# List your API keys curl https://meta-council.com/api/v1/keys \ -H "Authorization: Bearer <jwt_token>"

Developer API (v1)

A simplified interface for programmatic access. Uses the /api/v1/ prefix with API key authentication for every endpoint except key management (create/list/revoke), which requires your account JWT. Designed for integrations, automation pipelines, and AI agent toolchains.

The v1 endpoints mirror the core council API but are optimized for machine-to-machine use. Authenticate every request with Authorization: Bearer mc_<your_key>. The three key-management endpoints — POST /api/v1/keys, GET /api/v1/keys, DELETE /api/v1/keys/{key_id} — are the exception: they require your account JWT (Authorization: Bearer <jwt_token>), not an mc_ API key.

Endpoint summary

MethodEndpointDescription
POST /api/v1/councils/run Start a council query via API key auth. Unlike /api/council/run, v1 sessions are always private (is_private cannot be overridden) and council_id is not supported — only a named panel slug can be used.
GET /api/v1/councils/sessions/{id} Poll session status and retrieve full results.
POST /api/v1/query Runs the real council and waits up to wait_seconds (default/max 90). Returns results inline if complete, otherwise a real job_id to poll.
POST /api/v1/query/async Starts the real council pipeline and returns its owner-scoped session as job_id. Poll with GET /api/v1/query/{job_id}.
GET /api/v1/query/{job_id} Get results for an async query job.
GET /api/v1/agents List all available agents with metadata and expertise tags.
GET /api/v1/agents/{slug} Get detailed info for a specific agent.
GET /api/v1/panels List all available panels with agent counts and descriptions.
GET /api/v1/settings Get your account settings.
PUT /api/v1/settings Update provider API keys and model preferences.
POST /api/v1/keys Create a new API key (requires JWT auth).
GET /api/v1/keys List your API keys (requires JWT auth).
DELETE /api/v1/keys/{key_id} Revoke an API key (requires JWT auth).

Quick start: end-to-end cURL example

# 1. Start a council query SESSION=$(curl -s -X POST https://meta-council.com/api/v1/councils/run \ -H "Authorization: Bearer mc_your_key_here" \ -H "Content-Type: application/json" \ -d '{"query": "Should we migrate to microservices?", "panel": "software_engineering"}' \ | python3 -c "import sys,json; print(json.load(sys.stdin)['session_id'])") echo "Session: $SESSION" # 2. Poll until complete (check every 3 seconds) while true; do RESULT=$(curl -s https://meta-council.com/api/v1/councils/sessions/$SESSION \ -H "Authorization: Bearer mc_your_key_here") STATUS=$(echo $RESULT | python3 -c "import sys,json; print(json.load(sys.stdin)['status'])") echo "Status: $STATUS" [ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ] && break sleep 3 done # 3. Print the executive summary echo $RESULT | python3 -c " import sys, json data = json.load(sys.stdin) print(data['synthesis']['executive_summary']) "

Request body: /api/v1/councils/run

FieldTypeRequiredDescription
query string Yes The question or decision to deliberate on.
panel string No Panel slug (default: "default"). "auto" and "dynamic" currently resolve identically and are gated purely by account tier, not by which literal you pass: Pro/Enterprise accounts get MMR-based dynamic agent matching across all agents; Free accounts get the best pre-built panel match instead, with no error or notice.
model string No Override the model for all agents in this run (requires matching API key in settings).
is_private boolean N/A Not currently accepted by this endpoint. Every session created via POST /api/v1/councils/run is always private (the server hardcodes is_private=True); there is no way to make a v1-created session public via the request body.

Session status values

StatusMeaning
runningAgents are analyzing the query in parallel.
synthesizingAll agents finished; the synthesis step is combining results.
completedDone. The synthesis and agents fields contain full results.
failedAn error occurred. Check the error field.

MCP Server

Use Meta Council as a tool from Claude Code, Cursor, Windsurf, or any MCP-compatible AI agent.

The hosted MCP source candidate defines 108 tools for councils, workflows, catalog discovery, deterministic LOCUS calculation, citation-grounded Laws & Regulations research, settings reads, governed Sales/outreach, the private ticket board, feature feedback, and owner-private Accounting, Invoicing, Marketing, and Consulting workspaces. The current repository transport identifies as server 2.5.0; that version and this tool count are source facts, and neither by itself proves what production currently serves — an endpoint one release behind serves the previous count. Ticket planning and atomic batch tools use preview tokens, caller-stable idempotency keys, and deterministic IDs so uncertain commit retries cannot duplicate a tree. Separately scoped ticket validation records immutable evidence-backed results without fetching evidence locators or echoing evidence payloads. Accounting runs deterministic analysis with encrypted audit records and explicit stable-ticket preview/commit; it never files, pays, or sends externally. Marketing covers brands, audiences, campaigns, immutable content revisions, a planning calendar, draft submission, and separately scoped approval. Consulting covers clients, engagements, revision-safe proposals and SOWs, milestones, and internal deliverables with independent approval. None of these workspaces publishes, shares, sends, or deletes beyond its explicit private lifecycle controls. Long-running tools start asynchronously and return a session ID to poll. Authenticated sessions, audit runs, and artifacts are private by default.

Hosted Streamable HTTP

# Claude Code; other HTTP MCP clients use the same URL and header claude mcp add --transport http meta-council https://meta-council.com/mcp \ --header "Authorization: Bearer mc_your_key_here"

The hosted endpoint uses scoped, expiring developer keys. Four catalog tools (list_panels, list_agents, list_workflows, and get_agent_detail) are anonymous; every query-bearing, tenant-bearing, clinical, Laws & Regulations, Accounting, Marketing, Consulting, ticketing, settings, or outreach operation requires the relevant scope. MCP OAuth is not implemented yet, so clients that require OAuth account linking need a compatible HTTP-to-stdio bridge.

The hosted server is active in the official MCP Registry as com.meta-council/decision-intelligence version 1.4.0. Configure the URL and scoped key explicitly because the listing does not provision credentials.

Regulated data embargo: Meta Council is not currently approved for PHI/ePHI. Use synthetic or properly HIPAA-de-identified clinical data only.

Common MCP tools

ToolDescription
run_councilStart a private council run and return a session ID to poll.
run_workflowRun a multi-step workflow pipeline end to end, feeding each step's output into the next.
list_workflowsList available workflow pipelines (due diligence, market intelligence, coding, and more).
advance_workflowAdvance a workflow past a human checkpoint (approve or reject the current step).
get_workflow_sessionGet the step-by-step state of a running or finished workflow.
score_locus_caseScore an adult mental-health / addiction case against the LOCUS level-of-care framework.
locus_determine_from_scoresCompute a LOCUS Level of Care from dimension ratings you already have (deterministic, no LLM).
ask_legalRun fixed Themis retrieval and attach a proposed agent/source/synthesis plan whose routes remain planned_not_run; requires legal:run and provides research only, with no legal advice or decision authority.
list_panelsList available panels with descriptions.
list_agentsList available agents with expertise tags.
recommend_panelAI-powered panel recommendation for a given query.
get_sessionRetrieve results from a past session.
get_visualizationRetrieve an owner-authorized chart artifact; it is not a public bearer link.
get_agent_detailGet full details for a specific agent.
get_settingsView current account settings.
get_deal_healthScore the caller's open deals for staleness, overdue work, missing next steps, and close-date risk. Requires outreach:read.

Laws & Regulations: agent-first research

The product surface is Laws & Regulations. The stable MCP tool remains ask_legal and requires legal:run. The equivalent REST routes remain POST /api/legal/plan for a deterministic provider-free proposed plan and POST /api/legal/ask for fixed Themis retrieval with that unexecuted plan attached. The plan's agent, model/effort, source, and synthesis routes report planned_not_run; the planner does not execute them.

InputAccepted valuePurpose
questionstring, requiredBounded laws or regulations research question; never include credentials or secrets.
contextstring, default emptyOptional factual context, treated as supplied and unverified.
jurisdictionauto, federal, california, or bothSupported corpus filter; unresolved local or other jurisdiction facts remain visible.
max_sectionsinteger 1–20, optionalBounds supporting sections.
research_modecheck_law or themisCheck the law (check_law) is fixed source-first retrieval; See what Themis says (themis) explicitly requests fail-closed neutral generation.
qualityfast, balanced, or deepChanges the proposed, unexecuted model-quality and reasoning-effort routes; default balanced. It is not a confidence score.
domainsstring[], up to 8Optional hints such as osha, building_codes, or sports_regulation.
requested_agentsstring[], up to 7Catalog additions to the proposed specialist set; the baseline agent reserves one of eight total slots.
model_overridesobject, up to 8 entriesAgent-slug to catalog model-ID overrides for proposed, unexecuted routes.
reasoning_effort_overridesobject, up to 8 entriesAgent-slug to low, medium, high, or max overrides for proposed, unexecuted routes.

See what Themis says (research_mode: "themis") requires a signed-in user, the exact operator capability THEMIS_NEUTRAL_SCHEMA_VERSION=themis_neutral_research/v1, the LEGAL_ALLOW_LLM gate, and an atomic reservation from the finite daily spend breaker. Themis must return that exact neutral evidence schema: provider assertions contain only IDs, enumerated kind/topic codes, and evidence IDs; gaps are enum codes. The server expands fixed neutral templates, and every referenced quote must be verified. Missing capability or policy admission fails with 503; free-form or otherwise nonconforming generated material fails with 502 and is withheld. A valid extractive fallback is labeled check_law with a degradation_reason. Legacy verdict and answer_text prose is never exposed.

The result includes bounded source/citation records and evidence_graph (legal_evidence_graph/v1), whose assertions link to evidence IDs and whose gaps preserve missing or unverified support. It also adds workflow_plan (proposed domains/jurisdictions, agents, model/effort routing, source checks, and neutral synthesis constraints, all unexecuted), research_metadata (requested/effective mode, quality, degradation, and corpus_status), and platform_disclaimer. If no valid corpus-update timestamp is reported, freshness is not_reported and must be treated as unknown—not inferred from deployment time or model confidence.

Research software only. Laws & Regulations can accelerate source collection, issue spotting, and context preparation for qualified human review. It does not determine whether anything is legal or compliant, provide legal advice, consulting, recommendations, representation, approvals, filings, or decisions, create an attorney-client or consulting relationship, or replace verification by qualified counsel and the relevant regulator or authority.

Accounting: private deterministic audit runs and stable tickets

Six owner-scoped tools analyze supported textual records, retain an encrypted audit trail, and explicitly preview/commit dollar-free work-plan projections onto the private ticket board. Grant accounting:read for list/get, accounting:write for create/delete, and combine accounting:read with tickets:read for preview or tickets:write for commit. These grants never appear on default or legacy keys.

ToolDescription
create_accounting_runAnalyze 1–50 textual .txt, .md, .text, .eml, .csv, .ofx, .qfx, or .qif records and save an encrypted run. Requires accounting:write.
list_accounting_runsList only your audit metadata; raw input and results stay omitted. Requires accounting:read.
get_accounting_runGet one owned run's deterministic estimates, professional-review disclaimer, engine revision, and timestamps. Decrypted input is opt-in. Requires accounting:read.
delete_accounting_runPermanently delete one Accounting audit run you own. Requires accounting:write.
preview_accounting_ticket_syncPreview stable-ticket creates, updates, preserved edits to generated content fields, and conflicts without writing. Requires accounting:read plus tickets:read; tickets:write satisfies ticket read.
sync_accounting_ticketsIdempotently commit the exact preview using its required expected_plan_hash. Requires accounting:read plus tickets:write.
Estimate and review only. Accounting tools do not file a return, move money, or send records to an external accounting service. Preview before ticket commit: tickets are owner-private but are not stored in the encrypted Accounting payload. Full source documents and Accounting amount fields are not copied, but work-plan text itself may reproduce source-derived filenames, merchant/date snippets, column headers, or parser details. Once committed, that text is readable by the owner's agents and API keys with tickets:read, even without accounting:read. Sync uses the encrypted run's immutable source/item/rule identity rather than WRITEOff's positional ID or visible merchant target; runs created before that contract must be reprocessed. Human edits to generated content fields remain authoritative, and sync never resets status, assignee, hierarchy, or completion; accounting_run and workflow_session_id are system-owned newest-linked-run mirrors. Confirm every result with a qualified tax professional.

Outreach: read the pipeline

Six read tools let an agent inspect your sales pipeline. All require the outreach:read scope and are strictly scoped to your own campaigns and leads.

ToolDescription
list_outreach_campaignsList your campaigns with live lead / sent / reply counts.
search_outreach_leadsSearch your leads by text, pipeline status, and/or campaign.
outreach_analyticsTotals across your book — leads, sent, replied, reply rate.
campaign_pipeline_statsPer-stage breakdown for one campaign (total / sent / won / lost).
list_campaign_triggersList a campaign's automation triggers.
list_campaign_repliesList a campaign's sent / received emails, newest first.

Outreach: drive the pipeline (governed writes)

Six write tools let an agent move the pipeline forward — create a campaign, add and organize leads, advance a lead's status, and draft copy. They all require the dedicated outreach:agent_write scope and are governed by design:

  • Least-privilege scope. These tools use outreach:agent_write, a scope that is deliberately narrower than outreach:write: a key granted only outreach:agent_write can drive the pipeline through MCP but cannot call the REST live-send or delete endpoints (those still require the broader outreach:write). Grant your agent this scope alone to keep sending and deletion off the table entirely. A full outreach:write key remains a superset and also works.
  • Auth-gated & user-scoped. Every write is filtered by your user id / campaign owner id — an agent can only touch your own campaigns, leads, and pitches.
  • Honest provenance. Leads and pitches created over MCP are stamped source="agent" server-side. The caller cannot override this — source is not an accepted argument, so an agent can never label its work as human-authored.
  • Reversible only. No destructive operations are exposed over MCP — there are no delete tools. Everything an agent creates can be reviewed and removed from the dashboard.
  • No live send. There is deliberately no send tool. An agent can draft and stage a lead all the way to "ready," but a human triggers the actual email send from the dashboard.
ToolDescription
create_outreach_campaignCreate a new campaign owned by you. Returns the campaign id.
add_outreach_leadAdd a single lead (stamped source="agent"). Does not send anything.
assign_leads_to_campaignAssign one or more of your leads to one of your campaigns.
update_outreach_lead_statusAdvance a lead's pipeline status and, optionally, record a reply / pitch / notes.
draft_outreach_emailSave a draft subject / body onto a lead for human review. Never sends.
create_outreach_pitchCreate a reusable pitch template (stamped source="agent").
Sending stays human. The write tools take a lead all the way to a reviewed, ready-to-send state, but the send itself is a human, dashboard-triggered action — MCP agents cannot email your prospects on your behalf.

Marketing workspace

Twenty-one owner-scoped tools cover Brand, Audience, Marketing Campaign, Content Asset, revision, calendar, and review workflows. marketing:read reads private context; marketing:agent_write creates/updates/submits drafts; the separate marketing:approve scope approves or rejects an exact submitted revision.

  • Immutable review. Submitting freezes the revision. Approval records the exact SHA-256 content hash; later edits become a new draft revision.
  • Separation of duties. Draft authority cannot approve, and reviewer authority cannot author drafts unless the key is explicitly granted both scopes.
  • Private and non-destructive. Every lookup is filtered to the API-key owner. No Marketing delete/archive tool is exposed over MCP.
  • No publishing side effect. Calendar dates are planning metadata. There is no publish or send tool or scope.
ToolsDescription
list_marketing_brands / get_marketing_brand / create_marketing_brand / update_marketing_brandBrand voice, value proposition, and guidelines.
list_marketing_audiences / get_marketing_audience / create_marketing_audience / update_marketing_audienceReusable audience definitions, pain points, and channels.
list_marketing_campaigns / get_marketing_campaign / create_marketing_campaign / update_marketing_campaignContent campaigns distinct from Sales outreach campaigns.
list_content_assets / get_content_asset / get_content_calendarPrivate revision history, review hashes, and planned dates.
create_content_asset / update_content_asset / create_content_asset_revision / submit_content_assetGoverned draft workflow under marketing:agent_write.
approve_content_asset / reject_content_assetReview under the separately granted marketing:approve scope. Neither action publishes.

Ticket board

Ten tools expose the in-platform ticket board. The two read tools require the tickets:read scope; seven planning and mutation tools require tickets:write, which is a superset that also satisfies tickets:read. The tenth, ticket_validation_finalize, requires the separate opt-in tickets:validate scope and does not imply read or write access. A prompt-only ticket_plan preview additionally requires councils:run because it invokes the configured planner and may consume model budget; supplied-plan preview and commit are provider-free. Plan and batch preview return a normalized commit_payload, deterministic IDs, and an exact preview_token. Commit combines those values with the caller-held idempotency key; retrying the exact commit returns the same IDs without duplicates. Per-owner ingress, weighted-row, live-ticket, and durable idempotency-ledger quotas bound bulk use while preserving exact replay at the storage cap.

ticket_list returns owner/filter-bound cursor pages of at most 200 rows. Reuse next_cursor with unchanged filters. Stable creation-time/UUID ordering keeps a full-board walk exact while already-returned tickets are edited, reordered, or moved. This is not a database snapshot: concurrent creation/deletion or hierarchy changes that alter recursive-subtree membership can affect later pages. With recursive=true, an owned UUID parent_id returns every descendant as one flat, cycle-safe set and excludes the anchor; the default remains direct children. scope selects active (the default), archived, or all; archiving is a flag rather than a status, so an archived ticket keeps whatever status it had and ticket_get still resolves it by id or unambiguous prefix.

ticket_validation_finalize commits one terminal verdict for an exact scenario version and lowercase SHA-256 scenario hash. Owner and actor are derived from the API key; callers cannot supply either. Evidence payloads are bounded opaque JSON: locator-looking URLs and paths are never fetched, opened, or resolved. Public adapters admit at most 10,000 JSON nodes per payload and 100,000 evidence JSON nodes across a request. An exact visible-ASCII idempotency-key retry by the same credential actor returns the original committed run; a rotated key is a different actor, and changed actor or content returns a stable conflict. Receipts are compact and never echo payloads: they contain evidence sequence/kind/digest entries plus the evidence count and manifest hash. The REST request is capped at 5 MiB before parsing; REST source-IP and credential/session actors are rate-limited independently. Hosted MCP retains its own transport IP/key ceilings plus the validation-actor ceiling. Durable limits retain at most 10,000 runs, 100,000 evidence items, and 268,435,456 canonical evidence-JSON characters per owner, plus 1,000 runs per scenario; the character ceiling bounds UTF-8 storage to at most four times that count.

The equivalent REST route is POST /api/tickets/{ticket_id}/scenarios/{scenario_id}/validation-runs. It accepts a user JWT or an API key carrying tickets:validate; both owner and actor still come only from that verified credential/session. The server acknowledges success only after commit.

Create, update, and get share the full ticket field set, including parent, session/workflow metadata links, labels, acceptance criteria, effort points, order index, and external references. Explicit clear flags safely remove optional links and effort points. Jira/Linear synchronization, Accounting, plan, and batch references are protected system metadata and cannot be spoofed, changed, or removed through generic MCP ticket writes. Session/workflow ids are metadata only, not access grants. Creator, comment-author, and mutation-trail identities are stamped server-side as api_key:<UUID> from the key that actually made the request; callers cannot provide them.

ToolDescription
ticket_listPage through your tickets by status, assignee, action type, priority, parent, session/workflow metadata, or free text; optionally traverse all descendants. Returns at most 200 rows and an opaque next cursor. Requires tickets:read.
ticket_getFull detail for one ticket: all metadata, external references, acceptance criteria, subticket progress, and activity trail. Requires tickets:read.
ticket_createCreate a ticket with full metadata, optionally as a subticket via parent_id; acting-key provenance is server-derived. Requires tickets:write.
ticket_updateSafely edit, reparent, clear optional metadata, or move an owned ticket. Status and metadata mutations are audit-trailed with actual-key provenance; system refs remain protected. Requires tickets:write.
ticket_commentAdd a comment or progress update to a ticket's activity trail. Requires tickets:write.
ticket_claimClaim a ticket: sets the assignee and moves it to in-progress in one audit-logged step. Requires tickets:write.
ticket_archiveRetire a ticket and its active subtree from the working set, or restore exactly that cohort, without changing status. Reversible by construction and destroys nothing; the ticket keeps its id, so citations still resolve. An archived ticket is inert: writes are refused until it is restored. Requires tickets:write.
ticket_planPreview a normalized plan, then atomically commit that exact plan without rerunning the planner. Requires tickets:write; prompt-only preview also requires councils:run, while supplied-plan preview and commit are provider-free.
ticket_batch_createProvider-free preview/commit for one explicit ticket tree with stable refs and deterministic IDs. It creates in-platform work records only and never executes them or changes an external system.
ticket_validation_finalizeCommit or exactly replay one evidence-backed terminal result for an exact scenario revision. Requires the separate opt-in tickets:validate scope; opaque evidence is never fetched and only digest receipts are returned.

Consulting workspace

Seventeen tools expose only the API-key owner's consulting records. Reads require consulting:read; drafting and workflow updates require consulting:write (which also satisfies reads); approvals require consulting:approve, the exact fetched version and content_hash, and a credential different from the last editor. Use separate writer and reviewer keys even when both belong to the same account.

ToolsDescription
list/create/update_consulting_clientManage private client records.
list/get/create/update_consulting_engagementManage engagements and inspect their proposals/SOWs, milestones, deliverables, and optional Sales/Accounting references.
create/update/approve_consulting_document_revisionDraft revision-safe proposals/SOWs; approval locks one exact revision and records the approver.
initialize/update_consulting_milestoneIdempotently initialize stable milestone IDs/external refs and advance the work using expected_version compare-and-swap protection.
create/update/submit/reopen/approve_consulting_deliverableRun an explicit internal review state machine. Approval records evidence but never publishes, shares, sends, or creates a client link.

Meta Council Feedback

A platform-feedback channel for reporting bugs, performance failures, and capability gaps in Meta Council itself directly to the platform admins — not for anything about your own business data (deals, invoices, tickets, etc.), which stays in its own tools.

ToolDescription
submit_meta_council_feedbackSubmit platform feedback (bug, performance, missing capability, UX/docs gap) about Meta Council itself. Requires feedback:write; open to any authenticated caller. Write-only — submissions cannot be read back. submit_feedback still works as an unlisted alias for callers integrated before 2026-08-07.
list_meta_council_feedbackAdmin only: list platform-feedback reports across all users for triage. Requires feedback:admin and is additionally gated server-side by the fail-closed ADMIN_EMAILS check. list_feedback still works as an unlisted alias.
triage_meta_council_feedbackAdmin only: set a platform-feedback report's status and admin notes. Requires feedback:admin and the same fail-closed ADMIN_EMAILS check. triage_feedback still works as an unlisted alias.

The meta-council-mcp 0.12.0 stdio package provides 98 tools, three resources, and three prompts; pip install meta-council-mcp installs this release. Accounting synchronization, ticket plan/batch, ticket field-parity, and ticket-validation finalization — source-only in the previous stable PyPI 0.8.0 (93-tool) release — are included. See the MCP setup guide for release status, raw JSON-RPC examples, scopes, polling, and source-run configuration.

Error Handling

All errors return a consistent JSON format with an appropriate HTTP status code.

Error response format

{ "detail": "Human-readable error message" }

HTTP status codes

CodeMeaningCommon causes
400Bad RequestMissing required field, invalid JSON, malformed request body.
401UnauthorizedMissing or invalid Authorization header. JWT expired. API key revoked.
403ForbiddenValid auth but insufficient permissions. Free tier trying to access Pro features.
404Not FoundSession ID, panel slug, or agent slug does not exist.
429Too Many RequestsRate limit exceeded. Check the Retry-After header (seconds) for when to retry. Some fixed per-IP throttles (file upload, signup, workflow triggers, the council-run IP throttle) return 429 with no retry header.
500Internal Server ErrorUnexpected server error. Retry after a brief delay. Contact support if persistent.

Example: handling errors

# Check for rate limiting RESPONSE=$(curl -s -w "\n%{http_code}" https://meta-council.com/api/council/run \ -X POST \ -H "Authorization: Bearer <jwt_token>" \ -H "Content-Type: application/json" \ -d '{"query": "test"}') HTTP_CODE=$(echo "$RESPONSE" | tail -1) BODY=$(echo "$RESPONSE" | head -1) if [ "$HTTP_CODE" = "429" ]; then echo "Rate limited. Retry later." elif [ "$HTTP_CODE" = "401" ]; then echo "Invalid API key." else echo "Success: $BODY" fi

Keyboard Shortcuts

Speed up your workflow with these keyboard shortcuts.

Ctrl + Enter
Submit your query
Escape
Close open modals and dialogs

Self-Hosting & Desktop App BETA

Run Meta Council entirely on your own hardware. Nothing leaves your machine.

Option 1: Docker (Recommended)

One command starts the web app + local AI model:

# After receiving your self-hosted package:
cd meta-council
docker compose up

Open http://localhost:8080. Ollama downloads Qwen 2.5 7B (~4.5 GB) on first run.

RequirementMinimumRecommended
RAM8 GB16 GB+
Disk10 GB free20 GB+
GPUNot requiredNVIDIA (2-10x faster)

Option 2: Desktop App

Native application for Mac, Windows, and Linux. Double-click to launch — auto-detects local Ollama for free inference.

cd desktop
npm install
npm start

Build installers: npm run build:mac / build:win / build:linux

Option 3: Full Offline (Air-Gapped)

For environments with no internet access:

  1. Install Ollama on the target machine
  2. Pull a model: ollama pull qwen2.5:7b
  3. Deploy Meta Council via Docker or the desktop app
  4. No internet required after initial setup

GPU Models

ModelVRAMSpeedQuality
Qwen 2.5 7B (default)6 GB~30 tok/sGood
Qwen 2.5 14B12 GB~15 tok/sBetter
Qwen 3 32B24 GB~8 tok/sBest

Contact [email protected] for self-hosted access and the complete setup guide.

Frequently Asked Questions

Is my data private?
Authenticated sessions are private by default and restricted to the owning account. Anonymous sessions and sessions you explicitly publish are public, so never submit confidential or regulated data anonymously. Queries are sent to the selected model provider under that provider's data terms. Meta Council is not currently approved for PHI/ePHI.
What models do you use?
The free tier runs on Claude Haiku 4.5 — fast, low-cost, and capable. Pro subscribers can bring their own API keys to access premium models like Claude Sonnet, GPT-4, Gemini, and Mistral. You can assign different models to different agents on a panel.
How do I upgrade?
New accounts start with a 90-day free trial of Pro features. After that, Pro is $49/month and includes higher query limits, premium model access (bring your own API keys), and priority processing. Authenticated sessions are private on every tier. You can upgrade from the account settings page. Cancel anytime.
Can I self-host Meta Council?
Yes. A deploy script is included in the repository for self-hosted installations. Run the entire platform -- application, models, and data -- on your own servers with full control. This is recommended for enterprise customers with strict data residency or compliance requirements. See the Enterprise page for details.