Quickstart
Get a multi-agent consensus verdict in 3 steps.
1. Get an API Key
# Free — no credit card required
curl -X POST https://verdikt.campintl.io/api/keys \
-H "Content-Type: application/json" \
-d '{"owner": "your@email.com"}'
2. Submit a Verdict
curl -X POST https://verdikt.campintl.io/api/verdict \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_KEY" \
-d '{
"domain": "hiring",
"question": "Should we hire a senior engineer who has 8 years experience but changes jobs every 12 months?",
"context": "50-person startup, need frontend lead, strong portfolio",
"agentCount": 5
}'
3. Get the Verdict
{
"success": true,
"verdict": {
"id": "VDK-MMMKGG6C-CB970138",
"verdict": "MAYBE",
"strength": "MODERATE",
"confidence": 60,
"percentages": { "YES": 0, "NO": 47, "MAYBE": 53 },
"agents": [
{ "name": "Culture Fit Analyst", "action": "NO", "confidence": 80, "reasoning": "..." },
{ "name": "Technical Evaluator", "action": "NO", "confidence": 80, "reasoning": "..." },
// ... more agents
],
"dissent": [ /* agents who voted against the consensus */ ],
"meta": { "elapsedMs": 559, "engine": "VERDIKT v1.0" }
}
}
Authentication
All API requests require an API key in the X-API-Key header.
X-API-Key: vdk_free_abc123...
Keys are prefixed by tier: vdk_free_, vdk_pro_, vdk_ent_.
Tiers & Limits
| Feature | Free | Pro ($49/mo) | Enterprise ($299/mo) |
|---|---|---|---|
| Verdicts/day | 10 | 500 | Unlimited |
| Agents/verdict | 5 | 15 | 57 |
| Domains | 3 (hiring, product, investment) | All 6 | All 6 |
| Custom domains | - | 10 domains, 20 agents each | 10 domains, 20 agents each |
| Webhooks | - | - | 5 endpoints, HMAC signed |
| Accuracy tracking | Yes | Yes | Yes |
| Rate limit | 5/min | 30/min | 100/min |
Error Handling
Errors return JSON with an error field:
{
"error": "Daily limit reached (10 verdicts). Upgrade tier for more."
}
| Status | Meaning |
|---|---|
| 400 | Bad request — missing or invalid fields |
| 401 | Unauthorized — missing or invalid API key |
| 403 | Forbidden — tier doesn't have access |
| 404 | Not found — verdict ID doesn't exist |
| 409 | Conflict — outcome already recorded |
| 429 | Rate limited — slow down |
| 500 | Server error — engine failure |
Submit Verdict
Submit a question for multi-agent consensus analysis. Each agent independently evaluates the question through its specialized lens, then votes are weighted to produce a consensus verdict.
Request Body
| Field | Type | Description |
|---|---|---|
| domainrequired | string | Domain key: hiring, product, legal, investment, sports, realestate, or custom |
| questionrequired | string | The question to analyze (10-5000 chars) |
| contextoptional | string | Additional context, background, or data |
| agentCountoptional | number | Number of agents (capped by tier limit) |
Response
| Field | Description |
|---|---|
| verdict.id | Unique verdict ID (e.g., VDK-MMMKGG6C-CB970138) |
| verdict.verdict | Consensus action: YES/NO/MAYBE (or domain-specific: BUY/SELL/HOLD) |
| verdict.strength | WEAK, MODERATE, STRONG, or VERY_STRONG |
| verdict.confidence | Average confidence of winning action (0-100) |
| verdict.percentages | Weighted vote percentages per action |
| verdict.agents[] | Each agent's vote, confidence, and reasoning |
| verdict.dissent[] | Agents who voted against the consensus |
| verdict.meta | Tier, agent count, elapsed time, timestamp |
List Verdicts
List recent verdicts. Returns summary view (not full agent votes).
| Param | Type | Description |
|---|---|---|
| limitoptional | number | Max results (1-100, default 20) |
Get Verdict Detail
Retrieve the full verdict including all agent votes, reasoning, and dissent.
List Agents
List all domains and their agent counts. Use /api/agents/:domain for agent details.
Create Custom Domain
Define a custom domain with your own agents, prompts, and voting actions.
Request Body
| Field | Type | Description |
|---|---|---|
| namerequired | string | Domain display name (2-50 chars) |
| descriptionrequired | string | What this domain evaluates |
| agentsrequired | array | 2-20 agent definitions |
| agents[].idrequired | string | Unique agent ID within domain |
| agents[].namerequired | string | Agent display name |
| agents[].promptrequired | string | Agent system prompt (20-2000 chars) |
| agents[].styleoptional | string | Perspective label (default: analytical) |
| agents[].weightoptional | number | Vote weight 0.1-5.0 (default: 1.0) |
| actionsoptional | string[] | Custom actions, 2-5 items (default: YES/NO/MAYBE) |
Example
curl -X POST /api/domains \
-H "X-API-Key: YOUR_PRO_KEY" \
-d '{
"name": "Startup Pitch",
"actions": ["INVEST", "PASS", "FOLLOW_UP"],
"agents": [
{"id": "market", "name": "Market Analyst", "prompt": "Evaluate TAM/SAM/SOM...", "weight": 1.3},
{"id": "team", "name": "Team Evaluator", "prompt": "Assess founding team...", "weight": 1.5}
]
}'
Then use it: POST /api/verdict { "domain": "startup-pitch", ... }
List Custom Domains
List your custom domains and their agent counts.
Update Custom Domain
Update agents, prompts, or actions for an existing custom domain. Same body as POST.
Delete Custom Domain
Permanently delete a custom domain.
Report Outcome
Report what actually happened, so the system can score agent accuracy over time.
| Field | Type | Description |
|---|---|---|
| outcomerequired | string | What actually happened (YES, NO, BUY, SELL, etc.) |
Each agent is scored: correct predictions boost their accuracy, incorrect ones lower it. After 5+ outcomes, agents qualify for the leaderboard.
Agent Leaderboard
Agent accuracy rankings across all domains. Use /api/leaderboard/:domain for domain-specific rankings.
Register Webhook
Register a URL to receive verdict results via webhook. Payloads are HMAC-SHA256 signed for verification.
| Field | Type | Description |
|---|---|---|
| urlrequired | string | HTTPS endpoint to receive webhooks |
| secretrequired | string | Shared secret for HMAC signing (min 16 chars) |
| eventsoptional | string[] | Events: verdict.completed, verdict.outcome, key.usage.warning |
Events
| Event | Fires When |
|---|---|
| verdict.completed | A verdict finishes processing |
| verdict.outcome | An outcome is reported for a verdict |
| key.usage.warning | Daily usage reaches 80% of limit |
List Webhooks
List your registered webhooks with delivery stats.
Webhook Signature Verification
Every webhook delivery includes an X-Verdikt-Signature header containing the HMAC-SHA256 signature of the raw request body.
Node.js
const crypto = require('crypto'); function verifyWebhook(rawBody, signature, secret) { const expected = crypto .createHmac('sha256', secret) .update(rawBody) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expected) ); }
Python
import hmac, hashlib def verify_webhook(raw_body: bytes, signature: str, secret: str) -> bool: expected = hmac.new( secret.encode(), raw_body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(signature, expected)
Webhook Payload Shape
{
"event": "verdict.completed",
"timestamp": "2026-03-11T21:43:57.715Z",
"data": {
"id": "VDK-MMMKGG6C-CB970138",
"domain": "hiring",
"verdict": "MAYBE",
"strength": "MODERATE",
"confidence": 60,
"agentCount": 5,
"question": "Should we hire..."
}
}
Provision API Key
Self-service: get a free API key instantly. No auth required.
| Field | Type | Description |
|---|---|---|
| ownerrequired | string | Your name or email |
Usage Analytics
View your daily usage, remaining quota, and total lifetime usage.
Upgrade Tier
| Field | Type | Description |
|---|---|---|
| tierrequired | string | pro or enterprise |
| stripeTokenoptional | string | Stripe payment token (billing coming soon) |
© 2026 CAMPINTL | THE HAYMAN HYMAN TRUST. All rights reserved.