Skip to main content

Aragora API Reference

Last Updated: 2026-02-03 (v2.6.3 alignment with repo versions)

This document describes the HTTP and WebSocket APIs for Aragora's control plane for multi-agent vetted decisionmaking across organizational knowledge and channels.

SDK Coverage

SDKVersionMethodsCoverage
TypeScript (@aragora/sdk)2.6.3380 asyncFull API (79 namespaces)
Python (aragora)2.6.3220 async + 420 syncFull API

Versions reflect the current repo tags (see pyproject.toml and aragora/__version__.py). If versions drift, run python scripts/check_version_alignment.py.

Both SDKs provide complete coverage of all API endpoints including:

  • Debates, Agents, Memory, Knowledge
  • Gauntlet, Verification, Workflows
  • Control Plane, RBAC, Tenancy
  • Authentication, Billing, Audit
  • Backups, Expenses, RLM, Unified Inbox, Feedback
DocumentPurposeWhen to Use
API_REFERENCE.md (this)Complete endpoint catalogPrimary reference for all endpoints
API_ENDPOINTS.mdAuto-generated endpoint listCross-check handler coverage
API_EXAMPLES.mdRunnable code examplesLearning API patterns
API_RATE_LIMITS.mdRate limiting detailsUnderstanding throttling
API_VERSIONING.mdVersion strategyAPI migration planning
API_STABILITY.mdStability guaranteesProduction decisions
WEBSOCKET_EVENTS.mdWebSocket event typesReal-time integration

Endpoint Usage Status

Endpoint counts vary by deployment and enabled handlers. To audit the current surface area, run:

python scripts/generate_api_docs.py --format json

OpenAPI Specification

The generated OpenAPI spec lives in docs/api/openapi.json and docs/api/openapi.yaml (JSON-formatted for compatibility). Regenerate them with:

python scripts/export_openapi.py --output-dir docs/api

The canonical spec is produced by aragora/server/openapi and the endpoint definitions under aragora/server/openapi/endpoints/. If you add or change endpoints, update the OpenAPI endpoint definitions and re-export the docs.

Each OpenAPI operation includes x-aragora-stability to indicate whether it is stable, beta, experimental, internal, or deprecated. See docs/API_STABILITY.md for the promotion workflow.

Auth Signup & SSO API

Self-service signup and SSO/OIDC endpoints live under /api/v1/auth. Signup flows are in-memory by default; use a database-backed store for production.

MethodEndpointDescription
POST/api/v1/auth/signupRegister new user
POST/api/v1/auth/verify-emailVerify email address
POST/api/v1/auth/resend-verificationResend verification email
POST/api/v1/auth/setup-organizationCreate org after signup
POST/api/v1/auth/inviteInvite team member
POST/api/v1/auth/accept-inviteAccept invitation
GET/api/v1/auth/check-inviteCheck invitation validity
GET/api/v1/auth/sso/loginGet SSO authorization URL
GET/api/v1/auth/sso/callbackHandle OAuth/OIDC callback
POST/api/v1/auth/sso/refreshRefresh access token
POST/api/v1/auth/sso/logoutLogout from SSO
GET/api/v1/auth/sso/providersList available providers
GET/api/v1/auth/sso/configGet provider configuration

SCIM 2.0 Provisioning API

SCIM 2.0 (RFC 7643/7644) endpoints for automated user and group provisioning from identity providers (Okta, Azure AD, OneLogin, etc.). Endpoints are mounted at /scim/v2/ and use Bearer token authentication.

Authentication: Set SCIM_BEARER_TOKEN environment variable. All requests must include Authorization: Bearer <token> header.

User Endpoints

MethodEndpointDescription
GET/scim/v2/UsersList users with filtering and pagination
POST/scim/v2/UsersCreate a new user
GET/scim/v2/Users/\{id\}Get user by ID
PUT/scim/v2/Users/\{id\}Replace user (full update)
PATCH/scim/v2/Users/\{id\}Partial update user
DELETE/scim/v2/Users/\{id\}Delete user (soft delete by default)

Group Endpoints

MethodEndpointDescription
GET/scim/v2/GroupsList groups with filtering and pagination
POST/scim/v2/GroupsCreate a new group
GET/scim/v2/Groups/\{id\}Get group by ID
PUT/scim/v2/Groups/\{id\}Replace group (full update)
PATCH/scim/v2/Groups/\{id\}Partial update group (add/remove members)
DELETE/scim/v2/Groups/\{id\}Delete group

Query Parameters

ParameterTypeDescriptionDefault
startIndexint1-based pagination offset1
countintPage size (max 1000)100
filterstringSCIM filter expression

Supported Filter Operators

eq, ne, co, sw, ew, pr, gt, ge, lt, le, and, or

Example: filter=userName eq "john@example.com"

Content Type

All responses use application/scim+json media type per RFC 7644.

Dashboard API

Dashboard endpoints return overview stats, activity, and quick actions. Responses are cached in-memory for 30 seconds by default.

MethodEndpointDescription
GET/api/v1/dashboardGet dashboard overview
GET/api/v1/dashboard/statsGet detailed stats
GET/api/v1/dashboard/activityGet recent activity
GET/api/v1/dashboard/inbox-summaryGet inbox summary
GET/api/v1/dashboard/quick-actionsGet available quick actions
POST/api/v1/dashboard/quick-actions/\{action\}Execute quick action

Deliberations API

Active vetted decisionmaking sessions and stats.

MethodEndpointDescription
GET/api/v1/deliberations/activeList active deliberations
GET/api/v1/deliberations/statsDeliberation statistics
GET/api/v1/deliberations/\{id\}Get deliberation details
GET/api/v1/deliberations/streamWebSocket stream of deliberations

Code Review API

Code review endpoints run multi-agent reviews for snippets, diffs, and PRs. Results are stored in-memory by default.

MethodEndpointDescription
POST/api/v1/code-review/reviewReview code snippet
POST/api/v1/code-review/diffReview diff/patch
POST/api/v1/code-review/prReview GitHub PR
GET/api/v1/code-review/results/\{id\}Get review result
GET/api/v1/code-review/historyReview history
POST/api/v1/code-review/security-scanQuick security scan

Devices API

Device registration and push notification endpoints.

MethodEndpointDescription
POST/api/v1/devices/registerRegister a device for push notifications
GET/api/v1/devices/healthDevice connector health
GET/api/v1/devices/user/\{user_id\}List user devices
POST/api/v1/devices/user/\{user_id\}/notifyNotify all user devices
GET/api/v1/devices/\{device_id\}Get device info
DELETE/api/v1/devices/\{device_id\}Unregister device
POST/api/v1/devices/\{device_id\}/notifyNotify a device
POST/api/v1/devices/alexa/webhookAlexa skill webhook
POST/api/v1/devices/google/webhookGoogle Home webhook

A2A (Agent-to-Agent) API

Agent discovery and task execution endpoints.

MethodEndpointDescription
GET/api/v1/a2a/.well-known/agent.jsonAgent discovery card
GET/api/v1/a2a/openapi.jsonA2A OpenAPI spec
GET/api/v1/a2a/agentsList agents
GET/api/v1/a2a/agents/\{name\}Get agent details
POST/api/v1/a2a/tasksSubmit task
GET/api/v1/a2a/tasks/\{id\}Get task status
POST/api/v1/a2a/tasks/\{id\}/streamStream task output

Metrics API

Operational and Prometheus metrics endpoints.

MethodEndpointDescription
GET/api/metricsOperational metrics
GET/api/metrics/healthHealth metrics
GET/api/metrics/cacheCache metrics
GET/api/metrics/systemSystem metrics
GET/api/metrics/verificationVerification metrics
GET/api/metrics/backgroundBackground task metrics
GET/api/metrics/debateDebate metrics
GET/metricsPrometheus export

Plugins API

Plugin management and marketplace endpoints.

MethodEndpointDescription
GET/api/v1/pluginsList plugins
GET/api/v1/plugins/installedList installed plugins
GET/api/v1/plugins/marketplaceMarketplace listings
GET/api/v1/plugins/submissionsList submissions
POST/api/v1/plugins/submitSubmit plugin
GET/api/v1/plugins/\{name\}Plugin details
POST/api/v1/plugins/\{name\}/installInstall plugin
DELETE/api/v1/plugins/\{name\}/installUninstall plugin
POST/api/v1/plugins/\{name\}/runRun plugin action

Cross-Pollination API

Knowledge sharing between debates and Knowledge Mound.

MethodEndpointDescription
GET/api/v1/cross-pollination/statsCross-pollination stats
GET/api/v1/cross-pollination/metricsCross-pollination metrics
GET/api/v1/cross-pollination/subscribersList subscribers
POST/api/v1/cross-pollination/subscribeSubscribe a debate
DELETE/api/v1/cross-pollination/subscribers/\{debate_id\}Unsubscribe a debate
GET/api/v1/cross-pollination/bridgeBridge configuration
PUT/api/v1/cross-pollination/bridgeUpdate bridge config
GET/api/v1/cross-pollination/kmKnowledge Mound status
GET/api/v1/cross-pollination/km/staleness-checkKnowledge staleness check
GET/api/v1/laboratory/cross-pollinations/suggestSuggest cross-pollination

Platform APIs (Advertising, Analytics, CRM, Ecommerce, Support)

These endpoints unify operational data across platforms. They are backed by SecureHandler and respect RBAC permissions.

Advertising

MethodEndpointDescription
GET/api/v1/advertising/platformsList connected platforms
POST/api/v1/advertising/connectConnect a platform
DELETE/api/v1/advertising/\{platform\}Disconnect platform
GET/api/v1/advertising/campaignsCross-platform campaigns
POST/api/v1/advertising/\{platform\}/campaignsCreate campaign
GET/api/v1/advertising/performanceCross-platform performance
POST/api/v1/advertising/analyzePerformance analysis

Analytics

MethodEndpointDescription
GET/api/v1/analytics/platformsList connected platforms
POST/api/v1/analytics/connectConnect a platform
GET/api/v1/analytics/dashboardsCross-platform dashboards
POST/api/v1/analytics/queryExecute unified query
GET/api/v1/analytics/reportsAvailable reports
POST/api/v1/analytics/reports/generateGenerate report
GET/api/v1/analytics/metricsMetrics overview
GET/api/v1/analytics/realtimeReal-time metrics

Endpoint Analytics

MethodEndpointDescription
GET/api/analytics/endpointsAggregated endpoint metrics
GET/api/analytics/endpoints/slowestTop N slowest endpoints
GET/api/analytics/endpoints/errorsTop N endpoints by error rate
GET/api/analytics/endpoints/\{endpoint\}/performanceEndpoint performance detail
GET/api/analytics/endpoints/healthOverall API health summary

CRM

MethodEndpointDescription
GET/api/v1/crm/platformsList connected platforms
POST/api/v1/crm/connectConnect a platform
GET/api/v1/crm/contactsCross-platform contacts
POST/api/v1/crm/\{platform\}/contactsCreate contact
GET/api/v1/crm/companiesCompanies
GET/api/v1/crm/dealsDeals/opportunities
GET/api/v1/crm/pipelineSales pipeline
POST/api/v1/crm/sync-leadSync lead
POST/api/v1/crm/enrichEnrich contact data

Ecommerce

MethodEndpointDescription
GET/api/v1/ecommerce/platformsList connected platforms
POST/api/v1/ecommerce/connectConnect a platform
GET/api/v1/ecommerce/ordersCross-platform orders
GET/api/v1/ecommerce/productsProducts
GET/api/v1/ecommerce/inventoryInventory levels
POST/api/v1/ecommerce/sync-inventorySync inventory
GET/api/v1/ecommerce/fulfillmentFulfillment status
POST/api/v1/ecommerce/shipCreate shipment

Support

MethodEndpointDescription
GET/api/v1/support/platformsList connected platforms
POST/api/v1/support/connectConnect a platform
GET/api/v1/support/ticketsCross-platform tickets
POST/api/v1/support/triageTicket triage
POST/api/v1/support/auto-respondResponse suggestions

Codebase Analysis API

Codebase security and metrics endpoints live under /api/v1/codebase and /api/v1/cve. For full examples and response shapes, see docs/CODEBASE_ANALYSIS.md.

MethodEndpointDescription
POST/api/v1/codebase/\{repo\}/scanRun dependency vulnerability scan
GET/api/v1/codebase/\{repo\}/scan/latestLatest scan result
GET/api/v1/codebase/\{repo\}/scan/\{scan_id\}Scan by ID
GET/api/v1/codebase/\{repo\}/scansList scan history
GET/api/v1/codebase/\{repo\}/vulnerabilitiesVulnerabilities list
GET/api/v1/codebase/package/\{ecosystem\}/\{package\}/vulnerabilitiesPackage advisories
GET/api/v1/cve/\{cve_id\}CVE details
POST/api/v1/codebase/\{repo\}/scan/sastTrigger SAST scan
GET/api/v1/codebase/\{repo\}/scan/sast/\{scan_id\}SAST scan status
GET/api/v1/codebase/\{repo\}/sast/findingsSAST findings
GET/api/v1/codebase/\{repo\}/sast/owasp-summaryOWASP summary
POST/api/v1/codebase/\{repo\}/metrics/analyzeRun metrics analysis
GET/api/v1/codebase/\{repo\}/metricsLatest metrics report
GET/api/v1/codebase/\{repo\}/metrics/\{analysis_id\}Metrics report by ID
GET/api/v1/codebase/\{repo\}/metrics/historyMetrics history
GET/api/v1/codebase/\{repo\}/hotspotsComplexity hotspots
GET/api/v1/codebase/\{repo\}/duplicatesCode duplication summary
GET/api/v1/codebase/\{repo\}/metrics/file/\{file_path\}File-level metrics

Additional codebase analysis endpoints:

MethodEndpointDescription
POST/api/v1/codebase/analyze-dependenciesAnalyze dependencies
POST/api/v1/codebase/scan-vulnerabilitiesScan repo for CVEs
POST/api/v1/codebase/check-licensesLicense compatibility
POST/api/v1/codebase/sbomGenerate SBOM
POST/api/v1/codebase/clear-cacheClear dependency analysis cache
POST/api/v1/codebase/\{repo\}/scan/secretsTrigger secrets scan
GET/api/v1/codebase/\{repo\}/scan/secrets/latestLatest secrets scan
GET/api/v1/codebase/\{repo\}/scan/secrets/\{scan_id\}Secrets scan by ID
GET/api/v1/codebase/\{repo\}/secretsSecrets list
GET/api/v1/codebase/\{repo\}/scans/secretsSecrets scan history

Code Intelligence API

Code intelligence endpoints support AST analysis, call graphs, and audit runs. Canonical endpoints live under /api/v1/codebase with /api/codebase aliases for UI-driven flows.

MethodEndpointDescription
POST/api/v1/codebase/\{repo\}/analyzeAnalyze codebase structure
GET/api/v1/codebase/\{repo\}/symbolsList symbols
GET/api/v1/codebase/\{repo\}/callgraphFetch call graph
GET/api/v1/codebase/\{repo\}/deadcodeFind dead code
POST/api/v1/codebase/\{repo\}/impactImpact analysis
POST/api/v1/codebase/\{repo\}/understandAnswer questions about code
POST/api/v1/codebase/\{repo\}/auditRun comprehensive audit
GET/api/v1/codebase/\{repo\}/audit/\{audit_id\}Audit status/result

Quick Scan API

Quick scan endpoints power the one-click security scan UI.

MethodEndpointDescription
POST/api/codebase/quick-scanRun quick security scan
GET/api/codebase/quick-scan/\{scan_id\}Get quick scan result
GET/api/codebase/quick-scansList quick scans

GitHub PR Review API

GitHub pull request review endpoints live under /api/v1/github/pr. For full details, see docs/GITHUB_PR_REVIEW.md. Register PRReviewHandler in the server handler registry to expose these routes in the unified server.

MethodEndpointDescription
POST/api/v1/github/pr/reviewTrigger a PR review
GET/api/v1/github/pr/\{pr_number\}Get PR details
GET/api/v1/github/pr/review/\{review_id\}Get review status/result
GET/api/v1/github/pr/\{pr_number\}/reviewsList reviews for a PR
POST/api/v1/github/pr/\{pr_number\}/reviewSubmit review to GitHub

GitHub Audit Bridge API

Audit-to-GitHub endpoints live under /api/v1/github/audit.

MethodEndpointDescription
POST/api/v1/github/audit/issuesCreate issues from findings
POST/api/v1/github/audit/issues/bulkBulk create issues
POST/api/v1/github/audit/prCreate PR with fixes
GET/api/v1/github/audit/sync/\{session_id\}Get sync status
POST/api/v1/github/audit/sync/\{session_id\}Sync session to GitHub

Audit Sessions API

Audit session endpoints manage multi-agent document audits. The UI uses /api/audit/sessions; versioned endpoints live under /api/v1/audit/sessions.

MethodEndpointDescription
POST/api/v1/audit/sessionsCreate audit session
GET/api/v1/audit/sessionsList audit sessions
GET/api/v1/audit/sessions/\{session_id\}Get session details
DELETE/api/v1/audit/sessions/\{session_id\}Delete session
POST/api/v1/audit/sessions/\{session_id\}/startStart audit
POST/api/v1/audit/sessions/\{session_id\}/pausePause audit
POST/api/v1/audit/sessions/\{session_id\}/resumeResume audit
POST/api/v1/audit/sessions/\{session_id\}/cancelCancel audit
GET/api/v1/audit/sessions/\{session_id\}/findingsList findings
GET/api/v1/audit/sessions/\{session_id\}/eventsStream SSE events
POST/api/v1/audit/sessions/\{session_id\}/interveneHuman intervention
GET/api/v1/audit/sessions/\{session_id\}/reportExport report

Security Debate API

Trigger multi-agent debates on security vulnerability findings. Debates use the Arena with security-focused agents to analyze vulnerabilities and recommend remediation strategies.

Authentication: Required. Permissions: audit:write (POST), audit:read (GET). Rate limit: 10 requests per minute per user.

MethodEndpointDescription
POST/api/v1/audit/security/debateTrigger security debate on findings
GET/api/v1/audit/security/debate/\{id\}Get security debate status

POST /api/v1/audit/security/debate

Trigger a multi-agent security debate on vulnerability findings.

Request body:

{
"findings": [
{
"id": "optional-uuid",
"finding_type": "vulnerability",
"severity": "critical",
"title": "SQL Injection in user handler",
"description": "Unsanitized user input passed to SQL query",
"file_path": "aragora/server/handlers/users.py",
"line_number": 42,
"cve_id": "CVE-2024-1234",
"package_name": "optional-package",
"package_version": "1.2.3",
"recommendation": "Use parameterized queries",
"metadata": {}
}
],
"repository": "repo-name",
"confidence_threshold": 0.7,
"timeout_seconds": 300
}
FieldTypeRequiredDescription
findingsarrayYesList of security findings to debate
repositorystringNoRepository name (default: "unknown")
confidence_thresholdnumberNoDebate confidence threshold, 0.1-1.0 (default: 0.7)
timeout_secondsintegerNoDebate timeout, 30-600 (default: 300)

Response (200):

{
"debate_id": "uuid",
"status": "completed",
"consensus_reached": true,
"confidence": 0.85,
"final_answer": "Remediation recommendations...",
"rounds_used": 3,
"duration_ms": 12500,
"findings_analyzed": 2,
"votes": {
"SecurityAnalyst": "remediate",
"CodeReviewer": "remediate"
}
}

GET /api/v1/audit/security/debate/{id}

Get the status of a previously triggered security debate. Currently debates are synchronous, so this endpoint returns not_found for any ID (placeholder for future async support).

Response (200):

{
"debate_id": "the-id",
"status": "not_found",
"message": "Debate results are not persisted. Use POST to trigger a new debate."
}

Shared Inbox API

Shared inbox endpoints live under /api/v1/inbox. For workflow details, see docs/SHARED_INBOX.md.

MethodEndpointDescription
POST/api/v1/inbox/sharedCreate shared inbox
GET/api/v1/inbox/sharedList shared inboxes
GET/api/v1/inbox/shared/\{id\}Get inbox details
GET/api/v1/inbox/shared/\{id\}/messagesList inbox messages
POST/api/v1/inbox/shared/\{id\}/messages/\{msg_id\}/assignAssign message
POST/api/v1/inbox/shared/\{id\}/messages/\{msg_id\}/statusUpdate status
POST/api/v1/inbox/shared/\{id\}/messages/\{msg_id\}/tagAdd tag
POST/api/v1/inbox/routing/rulesCreate routing rule
GET/api/v1/inbox/routing/rulesList routing rules
PATCH/api/v1/inbox/routing/rules/\{id\}Update routing rule
DELETE/api/v1/inbox/routing/rules/\{id\}Delete routing rule
POST/api/v1/inbox/routing/rules/\{id\}/testTest routing rule

Inbox Command Center API

Command center endpoints power the inbox UI quick actions and daily digest.

MethodEndpointDescription
GET/api/inbox/commandFetch prioritized inbox
POST/api/inbox/actionsExecute quick action
POST/api/inbox/bulk-actionsExecute bulk action
POST/api/inbox/reprioritizeTrigger AI re-prioritization
GET/api/inbox/sender-profileSender profile
GET/api/inbox/daily-digestDaily digest
GET/api/v1/inbox/daily-digestDaily digest (v1 alias)
GET/api/email/daily-digestDaily digest (email alias)

Message Bindings API

Bindings map messages to routing targets (provider/account/pattern). All routes support /api/v1 via version stripping.

MethodEndpointDescription
GET/api/bindingsList all bindings
GET/api/bindings/\{provider\}List bindings for provider
POST/api/bindingsCreate binding
PUT/api/bindings/\{id\}Update binding
DELETE/api/bindings/\{id\}Delete binding
POST/api/bindings/resolveResolve binding for a message
GET/api/bindings/statsRouter statistics

Email Services API

Follow-up tracking, snooze, and category APIs live under /api/v1/email.

MethodEndpointDescription
POST/api/v1/email/followups/markMark follow-up
GET/api/v1/email/followups/pendingList pending follow-ups
POST/api/v1/email/followups/\{id\}/resolveResolve follow-up
POST/api/v1/email/followups/check-repliesCheck for replies
POST/api/v1/email/followups/auto-detectAuto-detect follow-ups
GET/api/v1/email/\{id\}/snooze-suggestionsSnooze suggestions
POST/api/v1/email/\{id\}/snoozeApply snooze
DELETE/api/v1/email/\{id\}/snoozeCancel snooze
GET/api/v1/email/snoozedList snoozed emails
GET/api/v1/email/categoriesList categories
POST/api/v1/email/categories/learnCategory feedback

Gmail Operations API

Gmail labels, threads, drafts, and message operations.

MethodEndpointDescription
POST/api/v1/gmail/labelsCreate label
GET/api/v1/gmail/labelsList labels
PATCH/api/v1/gmail/labels/\{id\}Update label
DELETE/api/v1/gmail/labels/\{id\}Delete label
POST/api/v1/gmail/messages/\{id\}/labelsModify message labels
POST/api/v1/gmail/messages/\{id\}/readMark read/unread
POST/api/v1/gmail/messages/\{id\}/starStar/unstar
POST/api/v1/gmail/messages/\{id\}/archiveArchive message
POST/api/v1/gmail/messages/\{id\}/trashTrash/untrash
POST/api/v1/gmail/filtersCreate filter
GET/api/v1/gmail/filtersList filters
DELETE/api/v1/gmail/filters/\{id\}Delete filter
GET/api/v1/gmail/threadsList threads
GET/api/v1/gmail/threads/\{id\}Get thread
POST/api/v1/gmail/threads/\{id\}/archiveArchive thread
POST/api/v1/gmail/threads/\{id\}/trashTrash thread
POST/api/v1/gmail/threads/\{id\}/labelsModify thread labels
POST/api/v1/gmail/draftsCreate draft
GET/api/v1/gmail/draftsList drafts
GET/api/v1/gmail/drafts/\{id\}Get draft
PUT/api/v1/gmail/drafts/\{id\}Update draft
DELETE/api/v1/gmail/drafts/\{id\}Delete draft
POST/api/v1/gmail/drafts/\{id\}/sendSend draft
GET/api/v1/gmail/messages/\{id\}/attachments/\{attachment_id\}Get attachment

Notes:

  • Gmail operations require a connected Gmail account via /api/v1/email/gmail/oauth/*.
  • Pass user_id in query params for GET requests and in the JSON body for write requests.

Outlook/M365 API

MethodEndpointDescription
GET/api/v1/outlook/oauth/urlOAuth authorization URL
POST/api/v1/outlook/oauth/callbackOAuth callback
GET/api/v1/outlook/foldersList mail folders
GET/api/v1/outlook/messagesList messages
GET/api/v1/outlook/messages/\{id\}Get message details
GET/api/v1/outlook/conversations/\{id\}Get conversation
POST/api/v1/outlook/sendSend message
POST/api/v1/outlook/replyReply to message
GET/api/v1/outlook/searchSearch messages
POST/api/v1/outlook/messages/\{id\}/readMark read/unread
POST/api/v1/outlook/messages/\{id\}/moveMove message
DELETE/api/v1/outlook/messages/\{id\}Delete message

Accounting (QuickBooks) API

Accounting endpoints live under /api/accounting for QuickBooks Online integration and financial dashboards.

MethodEndpointDescription
GET/api/accounting/statusConnection status + dashboard data
GET/api/accounting/connectStart OAuth connection
GET/api/accounting/callbackOAuth callback
POST/api/accounting/disconnectDisconnect QuickBooks
GET/api/accounting/customersList customers
GET/api/accounting/transactionsList transactions
POST/api/accounting/reportGenerate report

Payroll (Gusto) API

Payroll endpoints live under /api/accounting/gusto for Gusto OAuth and payroll data sync.

MethodEndpointDescription
GET/api/accounting/gusto/statusConnection status
GET/api/accounting/gusto/connectStart OAuth connection
GET/api/accounting/gusto/callbackOAuth callback
POST/api/accounting/gusto/disconnectDisconnect Gusto
GET/api/accounting/gusto/employeesList employees
GET/api/accounting/gusto/payrollsList payroll runs
GET/api/accounting/gusto/payrolls/\{payroll_id\}Payroll run details
POST/api/accounting/gusto/payrolls/\{payroll_id\}/journal-entryGenerate journal entry

Banking (Plaid) API

Banking endpoints live under /api/accounting/plaid for Plaid Link integration and bank account syncing.

MethodEndpointDescription
POST/api/accounting/plaid/link/tokenCreate Link token
POST/api/accounting/plaid/exchangeExchange public token
GET/api/accounting/plaid/statusConnection status
POST/api/accounting/plaid/disconnectDisconnect Plaid
GET/api/accounting/plaid/accountsList bank accounts
GET/api/accounting/plaid/transactionsList transactions
POST/api/accounting/plaid/transactions/syncSync transactions
GET/api/accounting/plaid/balanceGet account balances
GET/api/accounting/plaid/institutions/searchSearch institutions

Xero Accounting API

Xero endpoints live under /api/accounting/xero for Xero OAuth and accounting data sync.

MethodEndpointDescription
GET/api/accounting/xero/statusConnection status
GET/api/accounting/xero/connectStart OAuth connection
GET/api/accounting/xero/callbackOAuth callback
POST/api/accounting/xero/disconnectDisconnect Xero
GET/api/accounting/xero/contactsList contacts
GET/api/accounting/xero/contacts/\{contact_id\}Contact details
POST/api/accounting/xero/contactsCreate contact
GET/api/accounting/xero/invoicesList invoices
GET/api/accounting/xero/invoices/\{invoice_id\}Invoice details
POST/api/accounting/xero/invoicesCreate invoice
GET/api/accounting/xero/accountsList chart of accounts
GET/api/accounting/xero/bank-transactionsList bank transactions
POST/api/accounting/xero/manual-journalsCreate manual journal
GET/api/accounting/xero/paymentsList payments

Cost Visibility API

Cost endpoints live under /api/costs. See docs/COST_VISIBILITY.md for dashboard context.

MethodEndpointDescription
GET/api/costsCost dashboard summary
GET/api/costs/breakdownCost breakdown
GET/api/costs/timelineUsage timeline
GET/api/costs/alertsBudget alerts
POST/api/costs/budgetSet budget limits
POST/api/costs/alerts/\{alert_id\}/dismissDismiss alert

Chat Knowledge Bridge API

Endpoints for chat + knowledge integration:

MethodEndpointDescription
POST/api/v1/chat/knowledge/searchSearch knowledge from chat
POST/api/v1/chat/knowledge/injectInject knowledge into conversation
POST/api/v1/chat/knowledge/storeStore chat as knowledge
GET/api/v1/chat/knowledge/channel/\{id\}/summaryChannel knowledge summary

Knowledge Mound Governance API

Governance endpoints under /api/v1/knowledge/mound/governance.

MethodEndpointDescription
POST/api/v1/knowledge/mound/governance/rolesCreate a role
POST/api/v1/knowledge/mound/governance/roles/assignAssign role to user
POST/api/v1/knowledge/mound/governance/roles/revokeRevoke role from user
GET/api/v1/knowledge/mound/governance/permissions/\{user_id\}Get user permissions
POST/api/v1/knowledge/mound/governance/permissions/checkCheck permissions
GET/api/v1/knowledge/mound/governance/auditQuery audit trail
GET/api/v1/knowledge/mound/governance/audit/user/\{user_id\}User activity audit
GET/api/v1/knowledge/mound/governance/statsGovernance stats

Knowledge Mound Maintenance API

Maintenance endpoints under /api/v1/knowledge/mound.

MethodEndpointDescription
GET/api/v1/knowledge/mound/dedup/clustersFind duplicate clusters
GET/api/v1/knowledge/mound/dedup/reportGenerate dedup report
POST/api/v1/knowledge/mound/dedup/mergeMerge a duplicate cluster
POST/api/v1/knowledge/mound/dedup/auto-mergeAuto-merge exact duplicates
POST/api/v1/knowledge/mound/federation/regionsRegister federated region (admin)
GET/api/v1/knowledge/mound/federation/regionsList federated regions
DELETE/api/v1/knowledge/mound/federation/regions/:idUnregister federated region
POST/api/v1/knowledge/mound/federation/sync/pushPush sync to region
POST/api/v1/knowledge/mound/federation/sync/pullPull sync from region
POST/api/v1/knowledge/mound/federation/sync/allSync with all regions
GET/api/v1/knowledge/mound/federation/statusFederation health status

Threat Intelligence API

Threat intelligence endpoints live under /api/v1/threat.

MethodEndpointDescription
POST/api/v1/threat/urlScan a URL
POST/api/v1/threat/urlsBatch scan URLs
GET/api/v1/threat/ip/\{ip_address\}IP reputation
POST/api/v1/threat/ipsBatch IP reputation
GET/api/v1/threat/hash/\{hash_value\}File hash lookup
POST/api/v1/threat/hashesBatch hash lookup
POST/api/v1/threat/emailScan email content
GET/api/v1/threat/statusService status

Backups API

Disaster recovery and backup management endpoints under /api/v1/backups.

MethodEndpointDescription
POST/api/v1/backupsCreate a new backup
GET/api/v1/backupsList all backups
GET/api/v1/backups/\{backup_id\}Get backup details
DELETE/api/v1/backups/\{backup_id\}Delete a backup
POST/api/v1/backups/\{backup_id\}/restoreRestore from backup
POST/api/v1/backups/\{backup_id\}/verifyVerify backup integrity
GET/api/v1/backups/statusGet backup service status
POST/api/v1/backups/scheduleConfigure backup schedule
GET/api/v1/backups/scheduleGet backup schedule

Expenses API

Receipt management and expense categorization under /api/v1/expenses.

MethodEndpointDescription
POST/api/v1/expenses/receiptsUpload a receipt
GET/api/v1/expenses/receiptsList receipts
GET/api/v1/expenses/receipts/\{receipt_id\}Get receipt details
POST/api/v1/expenses/receipts/\{receipt_id\}/categorizeCategorize receipt
POST/api/v1/expenses/receipts/\{receipt_id\}/approveApprove expense
POST/api/v1/expenses/syncSync with accounting system
GET/api/v1/expenses/categoriesList expense categories
GET/api/v1/expenses/summaryGet expense summary

RLM (Recursive Language Models) API

Context compression and programmatic context management under /api/v1/rlm.

MethodEndpointDescription
POST/api/v1/rlm/compressCompress context
POST/api/v1/rlm/decompressDecompress context
POST/api/v1/rlm/queryQuery compressed context
GET/api/v1/rlm/sessionsList active sessions
GET/api/v1/rlm/sessions/\{session_id\}Get session details
DELETE/api/v1/rlm/sessions/\{session_id\}End session
POST/api/v1/rlm/streamStream compressed output

Unified Inbox API

Multi-provider email management under /api/v1/unified-inbox.

MethodEndpointDescription
GET/api/v1/unified-inboxGet unified inbox messages
GET/api/v1/unified-inbox/accountsList connected accounts
POST/api/v1/unified-inbox/accountsConnect email account
DELETE/api/v1/unified-inbox/accounts/\{account_id\}Disconnect account
GET/api/v1/unified-inbox/messages/\{message_id\}Get message details
POST/api/v1/unified-inbox/messages/\{message_id\}/archiveArchive message
POST/api/v1/unified-inbox/messages/\{message_id\}/replyReply to message
POST/api/v1/unified-inbox/syncSync all accounts
GET/api/v1/unified-inbox/statsGet inbox statistics

Feedback API

User feedback and NPS collection under /api/v1/feedback.

MethodEndpointDescription
POST/api/v1/feedback/npsSubmit NPS feedback
POST/api/v1/feedback/generalSubmit general feedback
GET/api/v1/feedback/nps/summaryGet NPS summary (admin)
GET/api/v1/feedback/promptsGet feedback prompts
GET/api/v1/feedback/historyGet feedback history

New Endpoints (2026-02-03)

EndpointDescriptionStatus
POST /api/testfixer/analyzeAnalyze a failing testNEW
POST /api/testfixer/proposePropose a fix via multi-agent debateNEW
POST /api/testfixer/applyApply a proposed fixNEW
POST /api/testfixer/runRun the full fix loopNEW

New Endpoints (2026-01-27)

EndpointDescriptionStatus
POST /api/debates/:id/intervention/pausePause a debateNEW
POST /api/debates/:id/intervention/resumeResume a debateNEW
POST /api/debates/:id/intervention/injectInject argument or follow‑upNEW
POST /api/debates/:id/intervention/weightsAdjust agent weightNEW
POST /api/debates/:id/intervention/thresholdAdjust consensus thresholdNEW
GET /api/debates/:id/intervention/stateGet intervention stateNEW
GET /api/debates/:id/intervention/logGet intervention logNEW
GET /api/v1/knowledge/mound/dedup/clustersFind duplicate clustersNEW
GET /api/v1/knowledge/mound/dedup/reportGenerate dedup reportNEW
POST /api/v1/knowledge/mound/dedup/mergeMerge a duplicate clusterNEW
POST /api/v1/knowledge/mound/dedup/auto-mergeAuto-merge exact duplicatesNEW
POST /api/v1/knowledge/mound/federation/regionsRegister federated regionNEW
POST /api/v1/knowledge/mound/federation/sync/pushPush to regionNEW
POST /api/v1/knowledge/mound/federation/sync/pullPull from regionNEW
POST /api/v1/knowledge/mound/federation/sync/allSync all regionsNEW
GET /api/v1/knowledge/mound/federation/statusFederation statusNEW

New Endpoints (2026-01-22)

EndpointDescriptionStatus
POST /api/control-plane/deliberationsRun or queue a vetted decisionmaking sessionNEW
GET /api/control-plane/deliberations/:idGet vetted decisionmaking resultNEW
GET /api/control-plane/deliberations/:id/statusGet vetted decisionmaking statusNEW
POST /api/v1/decisionsCreate a decision requestNEW
GET /api/v1/decisions/:idGet decision resultNEW
GET /api/v1/decisions/:id/statusGet decision statusNEW
POST /api/v1/github/pr/reviewTrigger a PR reviewNEW
GET /api/v1/github/pr/:pr_numberGet PR detailsNEW
GET /api/v1/github/pr/review/:review_idGet review statusNEW
GET /api/v1/github/pr/:pr_number/reviewsList PR reviewsNEW
POST /api/v1/github/pr/:pr_number/reviewSubmit review to GitHubNEW
POST /api/v1/github/audit/issuesCreate GitHub issues from findingsNEW
POST /api/v1/chat/knowledge/searchKnowledge search from chatNEW
POST /api/v1/audit/sessionsCreate audit sessionNEW
POST /api/v1/inbox/sharedCreate shared inboxNEW
GET /api/v1/inbox/sharedList shared inboxesNEW
POST /api/v1/inbox/routing/rulesCreate routing ruleNEW
GET /api/costsCost dashboard summaryNEW
GET /api/accounting/statusAccounting dashboard statusNEW
POST /api/codebase/quick-scanOne-click security scanNEW

New Endpoints (2026-01-09)

EndpointDescriptionStatus
POST /api/debates/graphGraph-structured debates with branchingNEW
GET /api/debates/graph/:idGet graph debate by IDNEW
GET /api/debates/graph/:id/branchesGet branches for graph debateNEW
GET /api/debates/graph/:id/nodesGet nodes for graph debateNEW
POST /api/debates/matrixParallel scenario debatesNEW
GET /api/debates/matrix/:idGet matrix debate by IDNEW
GET /api/debates/matrix/:id/scenariosGet scenario resultsNEW
GET /api/debates/matrix/:id/conclusionsGet matrix conclusionsNEW
GET /api/breakpoints/pendingList pending human-in-the-loop breakpointsNEW
GET /api/breakpoints/:id/statusGet breakpoint statusNEW
POST /api/breakpoints/:id/resolveResolve breakpoint with human inputNEW
GET /api/introspection/allGet all agent introspection dataNEW
GET /api/introspection/leaderboardAgents ranked by reputationNEW
GET /api/introspection/agentsList available agentsNEW
GET /api/introspection/agents/:nameGet agent introspectionNEW
GET /api/galleryList public debatesNEW
GET /api/gallery/:idGet public debate detailsNEW
GET /api/gallery/:id/embedGet embeddable debate summaryNEW
GET /api/billing/plansList subscription plansNEW
GET /api/billing/usageGet current usageNEW
GET /api/billing/subscriptionGet subscription statusNEW
POST /api/billing/checkoutCreate Stripe checkoutNEW
POST /api/billing/portalCreate billing portal sessionNEW
POST /api/billing/cancelCancel subscriptionNEW
POST /api/billing/resumeResume subscriptionNEW
POST /api/webhooks/stripeHandle Stripe webhooksNEW
GET /api/v1/memory/analyticsGet comprehensive memory tier analyticsNEW
GET /api/v1/memory/analytics/tier/:tierGet stats for specific tierNEW
POST /api/v1/memory/analytics/snapshotTake manual analytics snapshotNEW
GET /api/evolution/ab-testsList all A/B testsNEW
GET /api/evolution/ab-tests/:idGet specific A/B testNEW
GET /api/evolution/ab-tests/:agent/activeGet active test for agentNEW
POST /api/evolution/ab-testsCreate new A/B testNEW
POST /api/evolution/ab-tests/:id/recordRecord debate resultNEW
POST /api/evolution/ab-tests/:id/concludeConclude testNEW
DELETE /api/evolution/ab-tests/:idCancel testNEW

New Endpoints (2026-01-20)

EndpointDescriptionStatus
GET /api/v1/debates/:id/explanationGet full decision explanationNEW
GET /api/v1/debates/:id/evidenceGet evidence chainNEW
GET /api/v1/debates/:id/votes/pivotsGet vote pivot analysisNEW
GET /api/v1/debates/:id/counterfactualsGet counterfactual scenariosNEW
GET /api/v1/debates/:id/summaryGet human-readable summaryNEW
GET /api/workflow/templatesList workflow templatesNEW
GET /api/workflow/templates/:idGet template detailsNEW
GET /api/workflow/templates/:id/packageGet full template packageNEW
POST /api/workflow/templates/:id/runExecute workflow templateNEW
GET /api/workflow/categoriesList template categoriesNEW
GET /api/workflow/patternsList workflow patternsNEW
POST /api/workflow/patterns/:id/instantiateCreate template from patternNEW
GET /api/gauntlet/receiptsList gauntlet receiptsNEW
GET /api/gauntlet/receipts/:idGet receipt detailsNEW
GET /api/gauntlet/receipts/:id/verifyVerify receipt integrityNEW
GET /api/gauntlet/receipts/:id/exportExport receipt (JSON/HTML/MD/SARIF)NEW
POST /api/gauntlet/receipts/:id/shareCreate shareable receipt linkNEW
GET /api/gauntlet/receipts/statsGet receipt statisticsNEW
POST /api/v1/explainability/batchCreate batch explanation jobNEW
GET /api/v1/explainability/batch/:id/statusGet batch job statusNEW
GET /api/v1/explainability/batch/:id/resultsGet batch job resultsNEW
POST /api/v1/explainability/compareCompare explanations across debatesNEW
GET /api/marketplace/templatesBrowse template marketplaceNEW
GET /api/marketplace/templates/:idGet marketplace template detailsNEW
POST /api/marketplace/templatesPublish template to marketplaceNEW
POST /api/marketplace/templates/:id/rateRate a templateNEW
POST /api/marketplace/templates/:id/reviewReview a templateNEW
POST /api/marketplace/templates/:id/importImport template to workspaceNEW
GET /api/marketplace/featuredGet featured templatesNEW
GET /api/marketplace/trendingGet trending templatesNEW
GET /api/marketplace/categoriesGet marketplace categoriesNEW

New Endpoints (2026-01-18)

EndpointDescriptionStatus
GET /api/auth/oauth/googleStart Google OAuth flowNEW
GET /api/auth/oauth/google/callbackGoogle OAuth callbackNEW
GET /api/auth/oauth/githubStart GitHub OAuth flowNEW
GET /api/auth/oauth/github/callbackGitHub OAuth callbackNEW
POST /api/auth/oauth/linkLink OAuth account to userNEW
DELETE /api/auth/oauth/unlinkUnlink OAuth accountNEW
GET /api/auth/oauth/providersList available OAuth providersNEW
GET /api/user/oauth-providersGet user's linked providersNEW
GET /api/workflowsList workflowsNEW
POST /api/workflowsCreate workflowNEW
GET /api/workflows/:idGet workflow detailsNEW
PUT /api/workflows/:idUpdate workflowNEW
DELETE /api/workflows/:idDelete workflowNEW
POST /api/workflows/:id/executeExecute workflowNEW
GET /api/workflows/:id/versionsGet workflow versionsNEW
GET /api/workflow-templatesList workflow templatesNEW
GET /api/workflow-templates/:idGet workflow templateNEW
GET /api/workflow-executionsList workflow executionsNEW
GET /api/workflow-executions/:idGet execution statusNEW
DELETE /api/workflow-executions/:idCancel executionNEW
GET /api/workflow-approvalsList pending approvalsNEW
POST /api/workflow-approvals/:idSubmit approval decisionNEW
POST /api/retention/policiesCreate retention policyNEW
POST /api/retention/policies/:id/executeExecute retention policyNEW
GET /api/retention/expiringGet expiring itemsNEW
POST /api/classifyClassify content sensitivityNEW
GET /api/classify/policy/:levelGet classification policyNEW
GET /api/audit/entriesQuery audit entriesNEW
GET /api/audit/reportGenerate compliance reportNEW
GET /api/audit/verifyVerify audit log integrityNEW

Recently Connected Endpoints

The following endpoints were identified as unused but are now connected:

EndpointComponentStatus
GET /api/debatesDebateListPanel✅ Connected
GET /api/agent/\{agent\}/profileAgentProfileWrapper✅ Connected
GET /api/agent/compareAgentComparePanel✅ Connected
GET /api/agent/\{agent\}/head-to-head/\{opponent\}AgentProfileWrapper✅ Connected
GET /api/agent/\{agent\}/networkAgentProfileWrapper✅ Connected (includes rivals/allies)
GET /api/history/debatesHistoryPanel✅ Connected (local API fallback)
GET /api/history/summaryHistoryPanel✅ Connected (local API fallback)
GET /api/history/cyclesHistoryPanel✅ Connected (local API fallback)
GET /api/history/eventsHistoryPanel✅ Connected (local API fallback)
GET /api/pulse/trendingTrendingTopicsPanel✅ Connected
GET /api/analytics/disagreementsAnalyticsPanel✅ Connected

Remaining High-Value Endpoints (Ready to Wire)

EndpointFeaturePriority
GET /api/agent/\{agent\}/historyAgent debate historyMEDIUM
GET /api/agent/\{agent\}/rivalsDirect rivals endpointLOW
GET /api/agent/\{agent\}/alliesDirect allies endpointLOW
GET /api/debates/\{id\}Individual debate detail viewLOW

Server Configuration

The unified server exposes HTTP on port 8080 and WebSocket on port 8765 by default.

aragora serve --api-port 8080 --ws-port 8765
# Or directly:
python -m aragora.server.unified_server --api-port 8080 --ws-port 8765

Authentication

API requests may include an Authorization header with a bearer token:

Authorization: Bearer <token>

Rate limiting: 60 requests per minute per token (sliding window).


OAuth Integration

OAuth providers allow users to authenticate with third-party accounts.

GET /api/auth/oauth/google

Start Google OAuth flow. Redirects user to Google consent screen.

Parameters:

  • redirect_url (string, optional): URL to redirect after successful auth (must be in allowlist)

Response: 302 Redirect to Google OAuth consent screen

GET /api/auth/oauth/google/callback

Handle Google OAuth callback after user consent.

Parameters:

  • code (string, required): Authorization code from Google
  • state (string, required): State parameter for CSRF protection
  • error (string, optional): Error code if user denied consent

Response: 302 Redirect to success URL with auth token

GET /api/auth/oauth/github

Start GitHub OAuth flow. Redirects user to GitHub consent screen.

Parameters:

  • redirect_url (string, optional): URL to redirect after successful auth

Response: 302 Redirect to GitHub OAuth consent screen

GET /api/auth/oauth/github/callback

Handle GitHub OAuth callback after user consent.

Parameters:

  • code (string, required): Authorization code from GitHub
  • state (string, required): State parameter for CSRF protection

Response: 302 Redirect to success URL with auth token

POST /api/auth/oauth/link

Link an OAuth provider account to the current authenticated user.

Request Body:

{
"provider": "google",
"code": "authorization_code_from_provider"
}

Response:

{
"success": true,
"message": "Account linked successfully"
}

Remove OAuth provider link from the current user's account.

Parameters:

  • provider (string, required): OAuth provider to unlink (google or github)

Response:

{
"success": true,
"message": "Account unlinked successfully"
}

GET /api/auth/oauth/providers

Get list of configured OAuth providers available for authentication.

Response:

{
"providers": [
{"id": "google", "name": "Google", "enabled": true},
{"id": "github", "name": "GitHub", "enabled": true}
]
}

GET /api/user/oauth-providers

Get list of OAuth providers linked to the current user's account.

Response:

{
"linked_providers": [
{"provider": "google", "email": "user@gmail.com", "linked_at": "2026-01-15T12:00:00Z"}
]
}

Workflow Management

Workflows define multi-step automated debate and audit processes.

GET /api/workflows

List workflows with optional filtering.

Parameters:

  • category (string): Filter by category (debate, analysis, integration, custom)
  • tags (string): Filter by tags (comma-separated)
  • search (string): Search in workflow name and description
  • limit (int, default=50, max=200): Maximum workflows to return
  • offset (int, default=0): Pagination offset

Response:

{
"workflows": [
{
"id": "wf-123",
"name": "Security Audit Workflow",
"description": "Automated security analysis pipeline",
"category": "analysis",
"tags": ["security", "audit"],
"status": "active",
"version": 3,
"created_at": "2026-01-10T10:00:00Z"
}
],
"total": 25
}

POST /api/workflows

Create a new workflow definition.

Request Body:

{
"name": "Code Review Pipeline",
"description": "Automated code review with multi-agent debate",
"category": "analysis",
"tags": ["code", "review"],
"steps": [
{
"id": "step-1",
"type": "debate",
"config": {
"topic": "{{input.code_diff}}",
"agents": ["claude", "gpt-4", "deepseek-r1"],
"rounds": 3
}
},
{
"id": "step-2",
"type": "approval",
"config": {
"required_approvers": 1,
"timeout_hours": 24
}
}
],
"transitions": [
{"from": "step-1", "to": "step-2", "condition": "consensus_reached"}
]
}

GET /api/workflows/:workflow_id

Get detailed workflow definition by ID.

Response:

{
"id": "wf-123",
"name": "Security Audit Workflow",
"description": "...",
"steps": [...],
"transitions": [...],
"input_schema": {...},
"output_schema": {...},
"version": 3,
"created_at": "2026-01-10T10:00:00Z",
"updated_at": "2026-01-15T14:30:00Z"
}

PUT /api/workflows/:workflow_id

Update an existing workflow. Creates a new version.

DELETE /api/workflows/:workflow_id

Delete a workflow definition.

POST /api/workflows/:workflow_id/execute

Start execution of a workflow.

Request Body:

{
"inputs": {
"code_diff": "...",
"repository": "my-repo"
},
"async": true
}

Response (async=true):

{
"execution_id": "exec-456",
"status": "pending",
"workflow_id": "wf-123"
}

GET /api/workflows/:workflow_id/versions

Get version history of a workflow.

Parameters:

  • limit (int, default=20): Maximum versions to return

GET /api/workflow-templates

List workflow templates for quick start.

Parameters:

  • category (string): Filter templates by category

Response:

{
"templates": [
{
"id": "tmpl-security-audit",
"name": "Security Audit",
"description": "Comprehensive security analysis",
"category": "security",
"complexity": "medium"
}
]
}

GET /api/workflow-templates/:template_id

Get a specific workflow template for use as starting point.

GET /api/workflow-executions

List workflow executions for runtime dashboard.

Parameters:

  • workflow_id (string): Filter by workflow ID
  • status (string): Filter by status (pending, running, completed, failed, cancelled)
  • limit (int, default=50): Maximum executions to return

Response:

{
"executions": [
{
"id": "exec-456",
"workflow_id": "wf-123",
"workflow_name": "Security Audit",
"status": "running",
"current_step": "step-2",
"progress": 0.5,
"started_at": "2026-01-18T10:00:00Z"
}
]
}

GET /api/workflow-executions/:execution_id

Get detailed status of a workflow execution.

Response:

{
"id": "exec-456",
"workflow_id": "wf-123",
"status": "running",
"current_step": "step-2",
"step_results": {
"step-1": {"status": "completed", "output": {...}}
},
"context": {...},
"started_at": "2026-01-18T10:00:00Z"
}

DELETE /api/workflow-executions/:execution_id

Cancel a running workflow execution.

GET /api/workflow-approvals

List workflow steps awaiting human approval.

Response:

{
"approvals": [
{
"id": "approval-789",
"execution_id": "exec-456",
"workflow_name": "Security Audit",
"step_name": "Final Review",
"context": {...},
"requested_at": "2026-01-18T11:00:00Z"
}
]
}

POST /api/workflow-approvals/:approval_id

Submit approval decision for a workflow step.

Request Body:

{
"decision": "approve",
"comment": "Looks good, proceeding with deployment"
}

Decisions: approve, reject


HTTP API Endpoints

Health & Status

GET /api/health

Health check endpoint.

Response:

{
"status": "healthy",
"timestamp": "2026-01-04T12:00:00Z"
}

GET /api/nomic/state

Get current nomic loop state.

Response:

{
"phase": "debate",
"stage": "executing",
"cycle": 5,
"total_tasks": 9,
"completed_tasks": 3
}

GET /api/nomic/log

Get recent nomic loop log lines.

Parameters:

  • lines (int, default=100, max=1000): Number of log lines to return

Debates

GET /api/debates

List recent debates.

Parameters:

  • limit (int, default=20, max=100): Maximum debates to return

Response:

{
"debates": [
{
"id": "debate-123",
"topic": "Rate limiter implementation",
"consensus_reached": true,
"confidence": 0.85,
"timestamp": "2026-01-04T12:00:00Z"
}
]
}

GET /api/debates/:slug

Get a specific debate by slug/ID.

POST /api/debate

Start an ad-hoc debate. Rate limited.

Request Body:

{
"question": "Should we use token bucket or sliding window for rate limiting?",
"agents": "anthropic-api,openai-api",
"rounds": 3,
"consensus": "majority"
}

Parameters:

  • question (string, required): Topic/question to debate
  • agents (string, default="grok,anthropic-api,openai-api,deepseek-r1"): Comma-separated agent list (max 10)
  • rounds (int, default=3): Number of debate rounds
  • consensus (string, default="majority"): Consensus method

Available Agent Types:

API (direct):

TypeDefault ModelNotes
anthropic-apiclaude-opus-4-5-20251101Anthropic API, streaming
openai-apigpt-5.2OpenAI API, streaming
geminigemini-3-pro-previewGoogle API, streaming
grokgrok-4-latestxAI API, streaming
mistral-apimistral-large-2512Mistral API
codestralcodestral-latestMistral code model
ollamallama3.2Local Ollama
lm-studiolocal-modelLocal LM Studio
kimimoonshot-v1-8kMoonshot API

OpenRouter:

TypeDefault ModelNotes
openrouterdeepseek/deepseek-chat-v3-0324Model via model parameter
deepseekdeepseek/deepseek-reasonerDeepSeek R1 (reasoning)
deepseek-r1deepseek/deepseek-r1DeepSeek reasoning
llamameta-llama/llama-3.3-70b-instructLlama 3.3 70B
mistralmistralai/mistral-large-2411Mistral Large
qwenqwen/qwen3-maxQwen3 Max
qwen-maxqwen/qwen3-maxQwen3 Max
yi01-ai/yi-largeYi Large

CLI:

TypeDefault ModelNotes
claudeclaude-opus-4-5-20251101Claude CLI
codexgpt-5.2-codexCodex CLI
openaigpt-5.2OpenAI CLI
gemini-cligemini-3-pro-previewGemini CLI
grok-cligrok-4-latestGrok CLI
qwen-cliqwen3-coderQwen CLI
deepseek-clideepseek-v3DeepSeek CLI
kilocodegemini-explorerCodebase explorer

Response:

{
"debate_id": "debate-abc123",
"status": "started",
"message": "Debate started with 2 agents"
}

POST /api/v1/debates/batch

Submit a batch of debates for processing.

Request Body:

{
"items": [
{
"question": "Evaluate rate limiting options",
"agents": "anthropic-api,openai-api",
"rounds": 3,
"consensus": "majority",
"priority": 5
}
],
"webhook_url": "https://example.com/webhooks/batch",
"max_parallel": 5
}

GET /api/v1/debates/batch/{batch_id}/status

Get batch status and item results.

GET /api/v1/debates/batch

List batch requests.

Parameters:

  • limit (int, default=50, max=100): Maximum batches to return
  • status (string, optional): Filter by status (pending, processing, completed, failed)

GET /api/debates/:id/export/:format

Export a debate in various formats.

Path Parameters:

  • id (string, required): Debate slug/ID
  • format (string, required): Export format - json, csv, dot, or html

Query Parameters:

  • table (string, optional): For CSV format only - summary (default), messages, critiques, votes, or verifications

Response (JSON format):

{
"artifact_id": "abc123",
"debate_id": "debate-slug",
"task": "Rate limiter implementation",
"consensus_proof": {
"reached": true,
"confidence": 0.85,
"vote_breakdown": {"anthropic-api": true, "gemini": true}
},
"agents": ["anthropic-api", "gemini"],
"rounds": 3,
"content_hash": "sha256:abcd1234"
}

Response (CSV format): Returns text/csv with debate data table Response (DOT format): Returns text/vnd.graphviz for visualization with GraphViz Response (HTML format): Returns self-contained HTML viewer with interactive graph

POST /api/debates/graph

Run a graph-structured debate with automatic branching.

Request Body:

{
"task": "Design a distributed caching system",
"agents": ["anthropic-api", "openai-api"],
"max_rounds": 5,
"branch_policy": {
"min_disagreement": 0.7,
"max_branches": 3,
"auto_merge": true,
"merge_strategy": "synthesis"
}
}

Response:

{
"debate_id": "uuid",
"task": "Design a distributed caching system",
"graph": {
"nodes": [...],
"edges": [...],
"root_id": "node-123"
},
"branches": [...],
"merge_results": [...],
"node_count": 15,
"branch_count": 2
}

Branch Policy Options:

  • min_disagreement (float): Threshold to trigger branching (default: 0.7)
  • max_branches (int): Maximum concurrent branches (default: 3)
  • auto_merge (bool): Automatically merge converging branches (default: true)
  • merge_strategy (string): "best_path", "synthesis", "vote", "weighted", "preserve_all"

GET /api/debates/graph/:id

Get a graph debate by ID.

GET /api/debates/graph/:id/branches

Get all branches for a graph debate.

GET /api/debates/graph/:id/nodes

Get all nodes in a graph debate.

POST /api/debates/matrix

Run parallel scenario debates with comparative analysis.

Request Body:

{
"task": "Design a rate limiter",
"agents": ["anthropic-api", "openai-api"],
"scenarios": [
{
"name": "High throughput",
"parameters": {"rps": 10000},
"constraints": ["Must handle burst traffic"]
},
{
"name": "Low latency",
"parameters": {"latency_ms": 10},
"constraints": ["P99 under 10ms"]
},
{
"name": "Baseline",
"is_baseline": true
}
],
"max_rounds": 3
}

Response:

{
"matrix_id": "uuid",
"task": "Design a rate limiter",
"scenario_count": 3,
"results": [
{
"scenario_name": "High throughput",
"parameters": {"rps": 10000},
"winner": "anthropic-api",
"final_answer": "...",
"confidence": 0.85,
"consensus_reached": true
}
],
"universal_conclusions": ["All scenarios reached consensus"],
"conditional_conclusions": [
{
"condition": "When High throughput",
"conclusion": "Use token bucket algorithm",
"confidence": 0.85
}
],
"comparison_matrix": {
"scenarios": ["High throughput", "Low latency", "Baseline"],
"consensus_rate": 1.0,
"avg_confidence": 0.82,
"avg_rounds": 2.5
}
}

GET /api/debates/matrix/:id

Get matrix debate results by ID.

GET /api/debates/matrix/:id/scenarios

Get all scenario results for a matrix debate.

GET /api/debates/matrix/:id/conclusions

Get conclusions (universal and conditional) for a matrix debate.

Debate Interventions

Mid‑debate controls for pausing, resuming, injecting user input, and adjusting consensus parameters.

POST /api/debates/{debate_id}/intervention/pause

Pause an active debate.

POST /api/debates/{debate_id}/intervention/resume

Resume a paused debate.

POST /api/debates/{debate_id}/intervention/inject

Inject an argument or follow‑up into the next round.

Request Body:

{
"content": "What about rate limits for burst traffic?",
"type": "follow_up",
"source": "user"
}

POST /api/debates/{debate_id}/intervention/weights

Adjust an agent’s influence weight (0.0–2.0).

Request Body:

{
"agent": "anthropic-api",
"weight": 1.5
}

POST /api/debates/{debate_id}/intervention/threshold

Adjust consensus threshold (0.5–1.0).

Request Body:

{
"threshold": 0.85
}

GET /api/debates/{debate_id}/intervention/state

Get the current intervention state (pause, weights, threshold, pending injections).

GET /api/debates/{debate_id}/intervention/log

Get recent intervention log entries.


History (Supabase)

GET /api/history/cycles

Get cycle history.

Parameters:

  • loop_id (string, optional): Filter by loop ID
  • limit (int, default=50, max=200): Maximum cycles to return

GET /api/history/events

Get event history.

Parameters:

  • loop_id (string, optional): Filter by loop ID
  • limit (int, default=100, max=500): Maximum events to return

GET /api/history/debates

Get debate history.

Parameters:

  • loop_id (string, optional): Filter by loop ID
  • limit (int, default=50, max=200): Maximum debates to return

GET /api/history/summary

Get summary statistics.

Parameters:

  • loop_id (string, optional): Filter by loop ID

Leaderboard & ELO

GET /api/leaderboard

Get agent rankings by ELO.

Parameters:

  • limit (int, default=20, max=50): Maximum agents to return
  • domain (string, optional): Filter by domain

Response:

{
"rankings": [
{
"agent": "anthropic-api",
"elo": 1523,
"wins": 45,
"losses": 12,
"domain": "general"
}
]
}

GET /api/matches/recent

Get recent ELO matches.

Parameters:

  • limit (int, default=10, max=50): Maximum matches to return
  • loop_id (string, optional): Filter by loop ID

GET /api/agent/:name/history

Get an agent's match history.

Parameters:

  • limit (int, default=30, max=100): Maximum matches to return

Insights

GET /api/insights/recent

Get recent debate insights.

Parameters:

  • limit (int, default=20, max=100): Maximum insights to return

Response:

{
"insights": [
{
"type": "pattern",
"content": "Agents prefer incremental implementations",
"confidence": 0.78,
"source_debate": "debate-123"
}
]
}

Flip Detection

Position reversal detection API for tracking agent consistency.

GET /api/flips/recent

Get recent position flips across all agents.

Parameters:

  • limit (int, default=20, max=100): Maximum flips to return

Response:

{
"flips": [
{
"id": "flip-abc123",
"agent_name": "gemini",
"original_claim": "X is optimal",
"new_claim": "Y is optimal",
"flip_type": "contradiction",
"similarity_score": 0.82,
"detected_at": "2026-01-04T12:00:00Z"
}
],
"count": 15
}

GET /api/flips/summary

Get aggregate flip statistics.

Response:

{
"total_flips": 42,
"by_type": {
"contradiction": 10,
"refinement": 25,
"retraction": 5,
"qualification": 2
},
"by_agent": {
"gemini": 15,
"anthropic-api": 12,
"codex": 10,
"grok": 5
},
"recent_24h": 8
}

GET /api/agent/:name/consistency

Get consistency score for an agent.

Response:

{
"agent_name": "anthropic-api",
"total_positions": 150,
"total_flips": 12,
"consistency_score": 0.92,
"contradictions": 2,
"refinements": 8,
"retractions": 1,
"qualifications": 1
}

GET /api/agent/:name/flips

Get flips for a specific agent.

Parameters:

  • limit (int, default=20, max=100): Maximum flips to return

Consensus Memory

Historical consensus data and similarity search.

GET /api/consensus/similar

Find debates similar to a topic.

Parameters:

  • topic (string, required): Topic to search for
  • limit (int, default=5, max=20): Maximum results to return

Response:

{
"query": "rate limiting",
"results": [
{
"topic": "Rate limiter design",
"conclusion": "Token bucket preferred",
"strength": "strong",
"confidence": 0.85,
"similarity": 0.92,
"agents": ["anthropic-api", "gemini"],
"dissent_count": 1,
"timestamp": "2026-01-03T10:00:00Z"
}
],
"count": 3
}

GET /api/consensus/settled

Get high-confidence settled topics.

Parameters:

  • min_confidence (float, default=0.8): Minimum confidence threshold
  • limit (int, default=20, max=100): Maximum topics to return

Response:

{
"min_confidence": 0.8,
"topics": [
{
"topic": "Consensus algorithm choice",
"conclusion": "Weighted voting preferred",
"confidence": 0.95,
"strength": "strong",
"timestamp": "2026-01-04T08:00:00Z"
}
],
"count": 15
}

GET /api/consensus/stats

Get consensus memory statistics.

Response:

{
"total_consensus": 150,
"total_dissents": 42,
"by_strength": {
"strong": 80,
"moderate": 50,
"weak": 20
},
"by_domain": {
"general": 100,
"architecture": 30,
"security": 20
},
"avg_confidence": 0.78
}

GET /api/consensus/dissents

Get dissenting views relevant to a topic.

Parameters:

  • topic (string, required): Topic to search for (max 500 chars)
  • domain (string, optional): Filter by domain

Response:

{
"topic": "rate limiting",
"domain": null,
"similar_debates": [
{
"topic": "Rate limiter design",
"conclusion": "Token bucket preferred",
"confidence": 0.85
}
],
"dissents_by_type": {
"alternative": 3,
"concern": 2,
"objection": 1
},
"unacknowledged_dissents": 2
}

GET /api/consensus/domain/:domain

Get consensus history for a domain.

Parameters:

  • limit (int, default=50, max=200): Maximum records to return

Real-time trending topic ingestion for dynamic debate generation.

GET /api/pulse/trending

Get trending topics from social media platforms.

Parameters:

  • limit (int, default=10, max=50): Maximum topics to return per platform

Response:

{
"topics": [
{
"topic": "AI regulation debate",
"platform": "twitter",
"volume": 15000,
"category": "tech"
}
],
"count": 5
}

POST /api/pulse/debate-topic

Start a debate on a trending topic.

Request Body:

{
"topic": "Should AI be regulated?",
"rounds": 3,
"consensus_threshold": 0.7
}

Response:

{
"debate_id": "pulse-1234567890-abc123",
"topic": "Should AI be regulated?",
"status": "started"
}

Pulse Scheduler

Automated debate creation from trending topics.

GET /api/pulse/scheduler/status

Get current scheduler state and metrics.

Response:

{
"state": "running",
"run_id": "run-1234567890-abc123",
"config": {
"poll_interval_seconds": 300,
"max_debates_per_hour": 6,
"min_volume_threshold": 100,
"min_controversy_score": 0.3,
"dedup_window_hours": 24
},
"metrics": {
"polls_completed": 15,
"topics_evaluated": 120,
"debates_created": 8,
"duplicates_skipped": 5,
"uptime_seconds": 3600
}
}

POST /api/pulse/scheduler/start

Start the pulse debate scheduler.

Response:

{
"status": "started",
"run_id": "run-1234567890-abc123"
}

POST /api/pulse/scheduler/stop

Stop the pulse debate scheduler.

Response:

{
"status": "stopped"
}

POST /api/pulse/scheduler/pause

Pause the scheduler (maintains state but stops polling).

Response:

{
"status": "paused"
}

POST /api/pulse/scheduler/resume

Resume a paused scheduler.

Response:

{
"status": "running"
}

PATCH /api/pulse/scheduler/config

Update scheduler configuration.

Request Body:

{
"max_debates_per_hour": 10,
"min_controversy_score": 0.4
}

Response:

{
"status": "updated",
"config": { ... }
}

GET /api/pulse/scheduler/history

Get history of scheduled debates.

Parameters:

  • limit (int, default=50): Maximum records to return
  • offset (int, default=0): Pagination offset
  • platform (string, optional): Filter by platform
  • category (string, optional): Filter by category

Response:

{
"history": [
{
"id": "sched-123",
"topic_text": "AI ethics debate",
"platform": "hackernews",
"category": "tech",
"debate_id": "pulse-456",
"created_at": 1704067200,
"consensus_reached": true,
"confidence": 0.85
}
],
"total": 100
}

Slack Integration

Slack bot integration for debate notifications and commands.

GET /api/integrations/slack/status

Get Slack integration status.

Response:

{
"enabled": true,
"signing_secret_configured": true,
"bot_token_configured": false,
"webhook_configured": true
}

POST /api/integrations/slack/commands

Handle Slack slash commands (called by Slack).

Supported Commands:

  • /aragora help - Show available commands
  • /aragora status - Get system status
  • /aragora debate "topic" - Start a debate
  • /aragora agents - List top agents by ELO

POST /api/integrations/slack/interactive

Handle Slack interactive components (buttons, menus).

POST /api/integrations/slack/events

Handle Slack Events API callbacks.


Agent Profile (Combined)

GET /api/agent/:name/profile

Get a combined profile with ELO, persona, consistency, and calibration data.

Response:

{
"agent": "anthropic-api",
"ranking": {
"rating": 1523,
"recent_matches": 10
},
"persona": {
"type": "analytical",
"primary_stance": "pragmatic",
"specializations": ["architecture", "security"],
"debate_count": 45
},
"consistency": {
"score": 0.92,
"recent_flips": 2
},
"calibration": {
"brier_score": 0.15,
"prediction_count": 30
}
}

Agent Relationship Network

Analyze agent relationships, alliances, and rivalries.

GET /api/agent/:name/network

Get complete influence/relationship network for an agent.

Response:

{
"agent": "anthropic-api",
"influences": [["gemini", 0.75], ["openai", 0.62]],
"influenced_by": [["codex", 0.58]],
"rivals": [["grok", 0.81]],
"allies": [["gemini", 0.72]]
}

GET /api/agent/:name/rivals

Get top rivals for an agent.

Parameters:

  • limit (int, default=5, max=20): Maximum rivals to return

Response:

{
"agent": "anthropic-api",
"rivals": [["grok", 0.81], ["openai", 0.65]],
"count": 2
}

GET /api/agent/:name/allies

Get top allies for an agent.

Parameters:

  • limit (int, default=5, max=20): Maximum allies to return

Response:

{
"agent": "anthropic-api",
"allies": [["gemini", 0.72], ["codex", 0.55]],
"count": 2
}

Critique Patterns

Retrieve high-impact critique patterns for learning.

GET /api/critiques/patterns

Get critique patterns ranked by success rate.

Parameters:

  • limit (int, default=10, max=50): Maximum patterns to return
  • min_success (float, default=0.5): Minimum success rate threshold

Response:

{
"patterns": [
{
"issue_type": "security",
"pattern": "Consider input validation",
"success_rate": 0.85,
"usage_count": 12
}
],
"count": 5,
"stats": {
"total_critiques": 150,
"total_patterns": 42
}
}

Replays

GET /api/replays

List available debate replays.

Response:

{
"replays": [
{
"id": "nomic-cycle-1",
"name": "Nomic Cycle 1",
"event_count": 245,
"created_at": "2026-01-03T10:00:00Z"
}
]
}

GET /api/replays/:id

Get a specific replay by ID.


Broadcast (Podcast Generation)

Generate audio podcasts from debate traces.

POST /api/debates/:id/broadcast

Generate an MP3 podcast from a debate.

Rate limited. Requires the broadcast module (pip install aragora[broadcast]).

Response:

{
"success": true,
"debate_id": "rate-limiter-2026-01-01",
"audio_path": "/tmp/aragora_debate_rate-limiter.mp3",
"format": "mp3"
}

Error Response (503):

{
"error": "Broadcast module not available"
}

Documents

GET /api/documents

List uploaded documents.

POST /api/documents/upload

Upload a document for processing.

Headers:

  • Content-Type: multipart/form-data
  • X-Filename: document.pdf

Supported formats: PDF, Markdown, Python, JavaScript, TypeScript, Jupyter notebooks

Max size: 10MB

GET /api/documents/formats

Get supported document formats and metadata.

Response:

{
"formats": {
".pdf": {"name": "PDF", "mime": "application/pdf"},
".md": {"name": "Markdown", "mime": "text/markdown"},
".py": {"name": "Python", "mime": "text/x-python"},
".js": {"name": "JavaScript", "mime": "text/javascript"},
".ts": {"name": "TypeScript", "mime": "text/typescript"},
".ipynb": {"name": "Jupyter Notebook", "mime": "application/x-ipynb+json"}
}
}

Debate Analytics

Real-time debate analytics and pattern detection.

GET /api/analytics/disagreements

Get debates with significant disagreements or failed consensus.

Parameters:

  • limit (int, default=20, max=100): Maximum records to return

Response:

{
"disagreements": [
{
"debate_id": "debate-123",
"topic": "Rate limiter design",
"agents": ["anthropic-api", "gemini"],
"dissent_count": 2,
"consensus_reached": false,
"confidence": 0.45,
"timestamp": "2026-01-04T12:00:00Z"
}
],
"count": 5
}

GET /api/analytics/role-rotation

Get agent role assignments across debates.

Parameters:

  • limit (int, default=50, max=200): Maximum rotations to return

Response:

{
"rotations": [
{
"debate_id": "debate-123",
"agent": "anthropic-api",
"role": "proposer",
"timestamp": "2026-01-04T12:00:00Z"
}
],
"summary": {
"anthropic-api": {"proposer": 10, "critic": 8, "judge": 5},
"gemini": {"proposer": 8, "critic": 12, "judge": 3}
},
"count": 50
}

GET /api/analytics/early-stops

Get debates that terminated before completing all planned rounds.

Parameters:

  • limit (int, default=20, max=100): Maximum records to return

Response:

{
"early_stops": [
{
"debate_id": "debate-123",
"topic": "Consensus algorithm",
"rounds_completed": 2,
"rounds_planned": 5,
"reason": "early_consensus",
"consensus_early": true,
"timestamp": "2026-01-04T12:00:00Z"
}
],
"count": 3
}

Learning Evolution

GET /api/learning/evolution

Get learning evolution patterns.


Modes

List available debate and operational modes.

GET /api/modes

Get all available modes.

Response:

{
"modes": [
{
"name": "architect",
"description": "High-level design and planning mode",
"category": "operational",
"tool_groups": ["read", "browser", "mcp"]
},
{
"name": "redteam",
"description": "Adversarial red-teaming for security analysis",
"category": "debate"
}
],
"count": 8
}

Agent Position Tracking

Track agent positions and consistency via truth-grounding system.

GET /api/agent/:name/positions

Get position history for an agent.

Parameters:

  • limit (int, default=50, max=200): Maximum positions to return

Response:

{
"agent": "anthropic-api",
"total_positions": 45,
"avg_confidence": 0.82,
"reversal_count": 3,
"consistency_score": 0.93,
"positions_by_debate": {
"rate-limiter-2026-01-01": 5,
"consensus-algo-2026-01-02": 3
}
}

System Statistics

System-wide metrics and health monitoring.

GET /api/ranking/stats

Get ELO ranking system statistics.

Response:

{
"total_agents": 8,
"total_matches": 245,
"avg_rating": 1523,
"rating_spread": 312,
"domains": ["general", "architecture", "security"],
"active_last_24h": 5
}

GET /api/v1/memory/tier-stats

Get memory tier statistics from continuum memory system.

Response:

{
"tiers": {
"fast": {"count": 50, "avg_importance": 0.85},
"slow": {"count": 200, "avg_importance": 0.65},
"glacial": {"count": 1000, "avg_importance": 0.35}
},
"total_entries": 1250,
"last_consolidation": "2026-01-04T12:00:00Z"
}

GET /api/v1/memory/analytics

Get comprehensive memory tier analytics.

Parameters:

  • days (int, default=30, min=1, max=365): Number of days to analyze

Response:

{
"total_memories": 1000,
"tier_stats": {
"fast": {"count": 100, "avg_importance": 0.8},
"medium": {"count": 300, "avg_importance": 0.6},
"slow": {"count": 400, "avg_importance": 0.4},
"glacial": {"count": 200, "avg_importance": 0.2}
},
"learning_velocity": 0.75,
"promotion_effectiveness": 0.82
}

GET /api/v1/memory/analytics/tier/:tier

Get stats for a specific memory tier.

Path Parameters:

  • tier (string, required): Tier name - fast, medium, slow, or glacial

Parameters:

  • days (int, default=30, min=1, max=365): Number of days to analyze

Response:

{
"tier": "fast",
"count": 100,
"avg_importance": 0.8,
"hit_rate": 0.95,
"promotion_rate": 0.3
}

POST /api/v1/memory/analytics/snapshot

Take a manual analytics snapshot for all memory tiers.

Response:

{
"status": "success",
"message": "Snapshot recorded for all tiers"
}

GET /api/critiques/patterns

Get successful critique patterns for learning.

Parameters:

  • limit (int, default=10, max=50): Maximum patterns to return
  • min_success (float, default=0.5): Minimum success rate filter

Response:

{
"patterns": [
{
"issue_type": "edge_case",
"pattern": "Consider boundary conditions for...",
"success_rate": 0.85,
"usage_count": 23
}
],
"count": 5,
"stats": {"total_patterns": 150, "avg_success_rate": 0.72}
}

GET /api/critiques/archive

Get archive statistics for resolved patterns.

Response:

{
"archived": 42,
"by_type": {
"security": 15,
"performance": 12,
"edge_case": 15
}
}

Agent Reputation

Track agent reliability and voting weights.

GET /api/reputation/all

Get all agent reputations ranked by score.

Response:

{
"reputations": [
{
"agent": "anthropic-api",
"score": 0.85,
"vote_weight": 1.35,
"proposal_acceptance_rate": 0.78,
"critique_value": 0.82,
"debates_participated": 45
}
],
"count": 4
}

GET /api/agent/:name/reputation

Get reputation for a specific agent.

Response:

{
"agent": "anthropic-api",
"score": 0.85,
"vote_weight": 1.35,
"proposal_acceptance_rate": 0.78,
"critique_value": 0.82,
"debates_participated": 45
}

Agent Comparison

Compare agents head-to-head.

GET /api/agent/compare

Get head-to-head comparison between two agents.

Parameters:

  • agent_a (string, required): First agent name
  • agent_b (string, required): Second agent name

Response:

{
"agent_a": "anthropic-api",
"agent_b": "gemini",
"matches": 15,
"agent_a_wins": 9,
"agent_b_wins": 6,
"win_rate_a": 0.6,
"domains": {
"architecture": {"a_wins": 5, "b_wins": 2},
"security": {"a_wins": 4, "b_wins": 4}
}
}

Agent Expertise & Grounded Personas

Evidence-based agent identity and expertise tracking.

GET /api/agent/:name/domains

Get agent's best expertise domains by calibration score.

Parameters:

  • limit (int, default=5, max=20): Maximum domains to return

Response:

{
"agent": "anthropic-api",
"domains": [
{"domain": "security", "calibration_score": 0.89},
{"domain": "api_design", "calibration_score": 0.85}
],
"count": 2
}

GET /api/agent/:name/grounded-persona

Get truth-grounded persona synthesized from performance data.

Response:

{
"agent": "anthropic-api",
"elo": 1523,
"domain_elos": {"security": 1580, "architecture": 1490},
"games_played": 45,
"win_rate": 0.62,
"calibration_score": 0.78,
"position_accuracy": 0.72,
"positions_taken": 128,
"reversals": 8
}

GET /api/agent/:name/identity-prompt

Get evidence-grounded identity prompt for agent initialization.

Parameters:

  • sections (string, optional): Comma-separated sections to include (performance, calibration, relationships, positions)

Response:

{
"agent": "anthropic-api",
"identity_prompt": "## Your Identity: anthropic-api\nYour approach: analytical, thorough...",
"sections": ["performance", "calibration"]
}

Contrarian Views & Risk Warnings

Historical dissenting views and edge case concerns from past debates.

GET /api/consensus/contrarian-views

Get historical contrarian views on a topic.

Parameters:

  • topic (string, required): Topic to search for contrarian views
  • domain (string, optional): Filter by domain
  • limit (int, default=5, max=20): Maximum views to return

Response:

{
"topic": "rate limiting implementation",
"domain": null,
"contrarian_views": [
{
"agent": "gemini",
"position": "Token bucket has edge cases",
"reasoning": "Under burst traffic conditions...",
"confidence": 0.75,
"timestamp": "2026-01-03T10:00:00Z"
}
],
"count": 1
}

GET /api/consensus/risk-warnings

Get risk warnings and edge case concerns from past debates.

Parameters:

  • topic (string, required): Topic to search for risk warnings
  • domain (string, optional): Filter by domain
  • limit (int, default=5, max=20): Maximum warnings to return

Response:

{
"topic": "database migration",
"domain": "infrastructure",
"risk_warnings": [
{
"agent": "anthropic-api",
"warning": "Consider rollback strategy for schema changes",
"severity": "high",
"timestamp": "2026-01-02T15:00:00Z"
}
],
"count": 1
}

Head-to-Head & Opponent Analysis

Detailed comparison and strategic briefings between agents.

GET /api/agent/:agent/head-to-head/:opponent

Get detailed head-to-head statistics between two agents.

Response:

{
"agent": "anthropic-api",
"opponent": "gemini",
"matches": 12,
"agent_wins": 5,
"opponent_wins": 4,
"draws": 3,
"win_rate": 0.42,
"recent_form": "WDLWW"
}

GET /api/agent/:agent/opponent-briefing/:opponent

Get strategic briefing about an opponent for an agent.

Response:

{
"agent": "anthropic-api",
"opponent": "gemini",
"briefing": {
"relationship": "rival",
"strength": 0.7,
"head_to_head": {"wins": 5, "losses": 4, "draws": 3},
"opponent_strengths": ["visual reasoning", "synthesis"],
"opponent_weaknesses": ["consistency", "edge cases"],
"recommended_strategy": "Focus on logical rigor and consistency"
}
}

Calibration Analysis

Detailed calibration curves and prediction accuracy.

GET /api/agent/:name/calibration-curve

Get calibration curve showing expected vs actual accuracy per confidence bucket.

Parameters:

  • buckets (int, default=10, max=20): Number of confidence buckets
  • domain (string, optional): Filter by domain

Response:

{
"agent": "anthropic-api",
"domain": null,
"buckets": [
{
"range_start": 0.0,
"range_end": 0.1,
"total_predictions": 15,
"correct_predictions": 2,
"accuracy": 0.13,
"expected_accuracy": 0.05,
"brier_score": 0.08
},
{
"range_start": 0.9,
"range_end": 1.0,
"total_predictions": 42,
"correct_predictions": 38,
"accuracy": 0.90,
"expected_accuracy": 0.95,
"brier_score": 0.02
}
],
"count": 10
}

Meta-Critique Analysis

Analyze debate quality and identify process issues.

GET /api/debate/:id/meta-critique

Get meta-level analysis of a debate including repetition, circular arguments, and ignored critiques.

Response:

{
"debate_id": "debate-123",
"overall_quality": 0.72,
"productive_rounds": [1, 2, 4],
"unproductive_rounds": [3],
"observations": [
{
"type": "repetition",
"severity": "medium",
"agent": "gemini",
"round": 3,
"description": "Agent repeated similar points from round 1"
}
],
"recommendations": [
"Encourage agents to address critiques directly",
"Consider reducing round count for simple topics"
]
}

Agent Personas

Agent persona definitions and customizations.

GET /api/personas

Get all agent personas.

Response:

{
"personas": [
{
"agent_name": "anthropic-api",
"description": "Analytical reasoner focused on logical consistency",
"traits": ["analytical", "precise", "evidence-focused"],
"expertise": ["security", "architecture"],
"created_at": "2026-01-01T00:00:00Z"
},
{
"agent_name": "grok",
"description": "Creative problem-solver with lateral thinking",
"traits": ["creative", "unconventional", "synthesis-focused"],
"expertise": ["innovation", "edge-cases"],
"created_at": "2026-01-01T00:00:00Z"
}
],
"count": 2
}

Persona Laboratory

Experimental framework for evolving agent personas and detecting emergent traits.

GET /api/laboratory/emergent-traits

Get emergent traits detected from agent performance patterns.

Parameters:

  • min_confidence (float, default=0.5): Minimum confidence threshold
  • limit (int, default=10, max=50): Maximum traits to return

Response:

{
"emergent_traits": [
{
"agent": "anthropic-api",
"trait": "adversarial_robustness",
"domain": "security",
"confidence": 0.85,
"evidence": "Consistently identifies edge cases in security debates",
"detected_at": "2026-01-04T10:00:00Z"
}
],
"count": 1,
"min_confidence": 0.5
}

POST /api/laboratory/cross-pollinations/suggest

Suggest beneficial trait transfers for a target agent.

Request Body:

{
"target_agent": "gemini"
}

Response:

{
"target_agent": "gemini",
"suggestions": [
{
"source_agent": "anthropic-api",
"trait_or_domain": "logical_rigor",
"reason": "Target agent underperforms in formal reasoning domains"
}
],
"count": 1
}

Belief Network Analysis

Bayesian belief network for probabilistic debate reasoning.

GET /api/belief-network/:debate_id/cruxes

Identify key claims that would most impact the debate outcome.

Parameters:

  • top_k (int, default=3, max=10): Number of cruxes to return

Response:

{
"debate_id": "debate-123",
"cruxes": [
{
"claim_id": "claim-456",
"statement": "The proposed architecture scales linearly",
"score": 0.87,
"centrality": 0.9,
"uncertainty": 0.75
}
],
"count": 1
}

Provenance & Evidence Chain

Verify evidence provenance and claim support.

GET /api/provenance/:debate_id/claims/:claim_id/support

Get verification status of all evidence supporting a claim.

Response:

{
"debate_id": "debate-123",
"claim_id": "claim-456",
"support": {
"verified": true,
"evidence_count": 3,
"supporting": [
{
"evidence_id": "ev-001",
"type": "citation",
"integrity_verified": true,
"relevance": 0.92
}
],
"contradicting": []
}
}

Agent Routing & Selection

Optimal agent selection for tasks based on ELO, expertise, and team dynamics.

POST /api/routing/recommendations

Get agent recommendations for a task.

Request Body:

{
"task_id": "design-review",
"primary_domain": "architecture",
"secondary_domains": ["security", "performance"],
"required_traits": ["analytical"],
"limit": 5
}

Response:

{
"task_id": "design-review",
"primary_domain": "architecture",
"recommendations": [
{
"name": "anthropic-api",
"type": "anthropic-api",
"match_score": 0.92,
"domain_expertise": 0.85
}
],
"count": 1
}

Tournament System

Tournament management and standings.

GET /api/tournaments/:tournament_id/standings

Get current tournament standings.

Response:

{
"tournament_id": "round-robin-2026",
"standings": [
{
"agent": "anthropic-api",
"wins": 8,
"losses": 2,
"draws": 1,
"points": 25,
"total_score": 142.5,
"win_rate": 0.73
}
],
"count": 4
}

Team Analytics

Analyze team performance and find optimal combinations.

GET /api/routing/best-teams

Get best-performing team combinations from history.

Parameters:

  • min_debates (int, default=3, max=20): Minimum debates for a team to qualify
  • limit (int, default=10, max=50): Maximum combinations to return

Response:

{
"min_debates": 3,
"combinations": [
{
"agents": ["anthropic-api", "gemini"],
"success_rate": 0.85,
"total_debates": 12,
"wins": 10
}
],
"count": 5
}

Prompt Evolution

Track agent prompt evolution and learning.

GET /api/evolution/:agent/history

Get prompt evolution history for an agent.

Parameters:

  • limit (int, default=10, max=50): Maximum history entries to return

Response:

{
"agent": "anthropic-api",
"history": [
{
"from_version": 1,
"to_version": 2,
"strategy": "pattern_mining",
"patterns_applied": ["logical_rigor", "edge_case_handling"],
"created_at": "2026-01-04T08:00:00Z"
}
],
"count": 3
}

Evolution A/B Testing

Run controlled experiments comparing prompt versions to determine which performs better.

GET /api/evolution/ab-tests

List all A/B tests with optional filters.

Parameters:

  • agent (string, optional): Filter by agent name
  • status (string, optional): Filter by status (active, concluded, cancelled)
  • limit (int, default=50, max=200): Maximum tests to return

Response:

{
"tests": [
{
"id": "test-123",
"agent": "anthropic-api",
"baseline_prompt_version": 1,
"evolved_prompt_version": 2,
"status": "active",
"baseline_wins": 5,
"evolved_wins": 7,
"started_at": "2026-01-10T12:00:00Z"
}
],
"count": 1
}

GET /api/evolution/ab-tests/:id

Get a specific A/B test by ID.

Response:

{
"id": "test-123",
"agent": "anthropic-api",
"baseline_prompt_version": 1,
"evolved_prompt_version": 2,
"status": "active",
"baseline_wins": 5,
"evolved_wins": 7,
"baseline_debates": 10,
"evolved_debates": 10,
"evolved_win_rate": 0.58,
"is_significant": false,
"started_at": "2026-01-10T12:00:00Z",
"concluded_at": null
}

GET /api/evolution/ab-tests/:agent/active

Get the active A/B test for a specific agent.

Response:

{
"agent": "anthropic-api",
"has_active_test": true,
"test": {
"id": "test-123",
"baseline_prompt_version": 1,
"evolved_prompt_version": 2,
"status": "active"
}
}

POST /api/evolution/ab-tests

Create a new A/B test.

Request Body:

{
"agent": "anthropic-api",
"baseline_version": 1,
"evolved_version": 2,
"metadata": {"description": "Test new reasoning patterns"}
}

Response (201 Created):

{
"message": "A/B test created",
"test": {
"id": "test-456",
"agent": "anthropic-api",
"status": "active"
}
}

Error (409 Conflict): Agent already has an active test.

POST /api/evolution/ab-tests/:id/record

Record a debate result for an A/B test.

Request Body:

{
"debate_id": "debate-789",
"variant": "evolved",
"won": true
}

Response:

{
"message": "Result recorded",
"test": {
"id": "test-123",
"baseline_wins": 5,
"evolved_wins": 8
}
}

POST /api/evolution/ab-tests/:id/conclude

Conclude an A/B test and determine the winner.

Request Body:

{
"force": false
}

Response:

{
"message": "A/B test concluded",
"result": {
"test_id": "test-123",
"winner": "evolved",
"confidence": 0.85,
"recommendation": "Adopt evolved prompt",
"stats": {
"evolved_win_rate": 0.65,
"baseline_win_rate": 0.35,
"total_debates": 20
}
}
}

DELETE /api/evolution/ab-tests/:id

Cancel an active A/B test.

Response:

{
"message": "A/B test cancelled",
"test_id": "test-123"
}

Load-Bearing Claims

Identify claims with highest structural importance in debates.

GET /api/belief-network/:debate_id/load-bearing-claims

Get claims with highest centrality (most load-bearing).

Parameters:

  • limit (int, default=5, max=20): Maximum claims to return

Response:

{
"debate_id": "debate-123",
"load_bearing_claims": [
{
"claim_id": "claim-456",
"statement": "The architecture must support horizontal scaling",
"author": "anthropic-api",
"centrality": 0.92
}
],
"count": 3
}

Calibration Summary

Comprehensive agent calibration analysis.

GET /api/agent/:name/calibration-summary

Get comprehensive calibration summary for an agent.

Parameters:

  • domain (string, optional): Filter by domain

Response:

{
"agent": "anthropic-api",
"domain": null,
"total_predictions": 250,
"total_correct": 215,
"accuracy": 0.86,
"brier_score": 0.12,
"ece": 0.05,
"is_overconfident": false,
"is_underconfident": true
}

GET /api/calibration/leaderboard

Get agents ranked by calibration quality (accuracy vs confidence).

Parameters:

  • limit (int, default=10, max=50): Maximum agents to return
  • domain (string, optional): Filter by domain

Response:

{
"agents": [
{
"name": "anthropic-api",
"elo": 1542,
"calibration_score": 0.92,
"brier_score": 0.08,
"accuracy": 0.89,
"games": 45
},
{
"name": "grok",
"elo": 1518,
"calibration_score": 0.88,
"brier_score": 0.11,
"accuracy": 0.85,
"games": 38
}
],
"count": 2
}

Continuum Memory

Multi-timescale memory system with surprise-weighted importance scoring.

Note: /api/memory/* legacy routes are supported as aliases for /api/v1/memory/*.

GET /api/v1/memory/continuum/retrieve

Retrieve memories from the continuum memory system.

Parameters:

  • query (string, optional): Search query for memory content
  • tiers (string, default="fast,medium"): Comma-separated tier names (fast, medium, slow, glacial)
  • limit (int, default=10, max=50): Maximum memories to return
  • min_importance (float, default=0.0): Minimum importance threshold (0.0-1.0)

Response:

{
"query": "error patterns",
"tiers": ["FAST", "MEDIUM"],
"memories": [
{
"id": "mem-123",
"tier": "FAST",
"content": "TypeError pattern in agent responses",
"importance": 0.85,
"surprise_score": 0.3,
"consolidation_score": 0.7,
"success_rate": 0.92,
"update_count": 15,
"created_at": "2026-01-03T10:00:00Z",
"updated_at": "2026-01-04T08:00:00Z"
}
],
"count": 1
}

POST /api/v1/memory/continuum/consolidate

Run memory consolidation and get tier transition statistics.

Response:

{
"consolidation": {
"promoted": 5,
"demoted": 2,
"pruned": 1
},
"message": "Memory consolidation complete"
}

GET /api/v1/memory/search-index

Progressive disclosure stage 1: compact index results with previews and token estimates.

Parameters:

  • q (string, required): Search query
  • tier (string, optional): Comma-separated tier filter
  • limit (int, default=20, max=100): Maximum results
  • min_importance (float, default=0.0): Minimum importance threshold
  • use_hybrid (bool, default=false): Use hybrid vector+keyword search
  • include_external (bool, default=false): Include external memory sources
  • external (string, optional): Comma-separated sources (supermemory, claude-mem)
  • project (string, optional): claude-mem project filter

GET /api/v1/memory/search-timeline

Progressive disclosure stage 2: timeline around an anchor entry.

Parameters:

  • anchor_id (string, required): Memory ID to anchor timeline
  • before (int, default=3, max=50): Entries before anchor
  • after (int, default=3, max=50): Entries after anchor
  • tier (string, optional): Comma-separated tier filter
  • min_importance (float, default=0.0): Minimum importance threshold

GET /api/v1/memory/entries

Progressive disclosure stage 3: full entries by ID.

Parameters:

  • ids (string, required): Comma-separated memory IDs

GET /api/v1/memory/viewer

HTML Memory Viewer UI (uses progressive disclosure endpoints).


Formal Verification

POST /api/verification/formal-verify

Attempt formal verification of a claim using Z3 SMT solver.

Request Body:

{
"claim": "If X > Y and Y > Z, then X > Z",
"claim_type": "logical",
"context": "Transitivity property of greater-than",
"timeout": 30
}

Parameters:

  • claim (required): The claim to verify
  • claim_type (optional): Hint for the type (assertion, logical, arithmetic, constraint)
  • context (optional): Additional context for translation
  • timeout (optional): Timeout in seconds (default: 30, max: 120)

Response:

{
"claim": "If X > Y and Y > Z, then X > Z",
"status": "proof_found",
"is_verified": true,
"language": "z3_smt",
"formal_statement": "(declare-const X Int)...",
"proof_hash": "a1b2c3d4e5f6",
"proof_search_time_ms": 15.2,
"prover_version": "z3-4.12.0"
}

Status Values:

  • proof_found: Claim is formally verified
  • proof_failed: Counterexample found (claim is false)
  • translation_failed: Could not translate to formal language
  • timeout: Solver timed out
  • not_supported: Claim type not suitable for formal proof
  • backend_unavailable: Z3 not installed

Insight Extraction

POST /api/insights/extract-detailed

Extract detailed insights from debate content.

Request Body:

{
"content": "The debate transcript content...",
"debate_id": "debate-123",
"extract_claims": true,
"extract_evidence": true,
"extract_patterns": true
}

Response:

{
"debate_id": "debate-123",
"content_length": 5420,
"claims": [
{
"text": "Therefore, we should adopt this approach",
"position": 12,
"type": "argument"
}
],
"evidence_chains": [
{
"text": "According to the 2024 study",
"type": "citation",
"source": "the 2024 study"
}
],
"patterns": [
{
"type": "causal_reasoning",
"strength": "strong",
"instances": 5
}
]
}

Pattern Types:

  • balanced_comparison: Uses "on one hand... on the other hand"
  • concession_rebuttal: Uses "while... however"
  • enumerated_argument: Uses "first... second..."
  • conditional_reasoning: Uses "if... then"
  • causal_reasoning: Uses "because" (with instance count)

Capability Probing

POST /api/probes/run

Run capability probes against an agent to detect vulnerabilities.

Request Body:

{
"agent": "anthropic-api",
"strategies": ["contradiction", "hallucination"],
"probe_count": 3
}

Response:

{
"agent": "anthropic-api",
"probe_count": 3,
"available_strategies": ["contradiction", "hallucination", "sycophancy", "persistence"],
"status": "ready"
}

Red Team Analysis

POST /api/debates/:id/red-team

Run adversarial analysis on a debate's conclusions.

Request Body:

{
"attack_types": ["steelman", "strawman"],
"intensity": 5
}

Response:

{
"debate_id": "debate-123",
"task": "Security implementation",
"consensus_reached": true,
"intensity": 5,
"available_attacks": ["steelman", "strawman", "edge_case", "assumption_probe", "counterexample"],
"status": "ready"
}

Usage Examples

Common API operations with curl. Replace localhost:8080 with your server address.

Health Check

# Check server health
curl http://localhost:8080/api/health

Starting a Debate

# Start a new debate
curl -X POST http://localhost:8080/api/debates/start \
-H "Content-Type: application/json" \
-d '{
"question": "Is microservices architecture better than monolith?",
"agents": ["anthropic-api", "openai-api", "gemini"],
"rounds": 3
}'

Listing and Viewing Debates

# List recent debates (default limit: 20)
curl http://localhost:8080/api/debates

# List with custom limit
curl "http://localhost:8080/api/debates?limit=50"

# Get specific debate details
curl http://localhost:8080/api/debates/debate-abc123

Exporting Debates

# Export as JSON
curl http://localhost:8080/api/debates/debate-abc123/export?format=json

# Export messages as CSV
curl http://localhost:8080/api/debates/debate-abc123/export?format=csv&table=messages \
-o debate-messages.csv

# Export as standalone HTML
curl http://localhost:8080/api/debates/debate-abc123/export?format=html \
-o debate-report.html

Agent Information

# Get leaderboard
curl http://localhost:8080/api/agent/leaderboard

# Get agent profile
curl http://localhost:8080/api/agent/anthropic-api/profile

# Compare two agents
curl "http://localhost:8080/api/agent/compare?a=anthropic-api&b=openai-api"

# Get head-to-head record
curl http://localhost:8080/api/agent/anthropic-api/head-to-head/openai-api

Nomic Loop Status

# Get current nomic loop state
curl http://localhost:8080/api/nomic/state

# Get nomic loop logs (last 100 lines)
curl http://localhost:8080/api/nomic/log

# Get more log lines
curl "http://localhost:8080/api/nomic/log?lines=500"

Tournaments

# List tournaments
curl http://localhost:8080/api/tournaments

# Get tournament details
curl http://localhost:8080/api/tournaments/tourney-abc123

# Get tournament bracket
curl http://localhost:8080/api/tournaments/tourney-abc123/bracket

Authenticated Requests

# With bearer token
curl http://localhost:8080/api/debates \
-H "Authorization: Bearer your-token-here"

# Tokens in query parameters are not accepted; use Authorization header instead

WebSocket Connection (wscat)

# Connect to WebSocket for real-time events
wscat -c ws://localhost:8765/ws

# With authentication token
wscat -c ws://localhost:8765/ws -H "Authorization: Bearer your-token-here"

WebSocket API

Connect to the WebSocket server for real-time streaming:

const ws = new WebSocket('ws://localhost:8765/ws');

ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log(data.type, data.data);
};

Event Types

WebSocket events use a shared envelope and are documented in docs/WEBSOCKET_EVENTS.md. Filter by loop_id to scope to a single debate.

Common debate lifecycle events:

  • debate_start, round_start, agent_message, critique, vote, consensus, debate_end

Token streaming events:

  • token_start, token_delta, token_end

Control messages (on connect / acknowledgements):

  • connection_info, loop_list, sync, ack, error, auth_revoked

Event Format

{
"type": "agent_message",
"data": { "content": "I disagree...", "role": "critic" },
"timestamp": 1732735053.123,
"round": 2,
"agent": "anthropic-api",
"loop_id": "loop-abc123",
"seq": 42
}

Formal Verification

Formal claim verification using theorem provers.

POST /api/verification/formal-verify

Attempt formal verification of a logical claim.

Request Body:

{
"claim": "If A implies B and B implies C, then A implies C",
"debate_id": "debate-123",
"context": "Optional context for the claim"
}

Response:

{
"verified": true,
"method": "lean",
"proof_sketch": "...",
"confidence": 0.95
}

Detailed Insights

POST /api/insights/extract-detailed

Extract detailed insights from debate content.

Request Body:

{
"debate_id": "debate-123",
"content": "The debate transcript or summary...",
"focus": "security"
}

Response:

{
"insights": [
{
"type": "pattern",
"description": "Security vulnerability pattern detected",
"confidence": 0.85,
"actionable": true
}
],
"count": 3
}

Formal Verification

Attempt formal verification of claims using SMT solvers.

GET /api/verification/status

Get status of formal verification backends.

Response:

{
"available": true,
"backends": [
{"language": "z3_smt", "available": true},
{"language": "lean4", "available": false}
]
}

POST /api/verification/formal-verify

Attempt formal verification of a claim.

Request Body:

{
"claim": "If X > Y and Y > Z, then X > Z",
"claim_type": "logical",
"context": "Transitivity check",
"timeout": 30
}

Response:

{
"status": "proof_found",
"is_verified": true,
"language": "z3_smt",
"formal_statement": "(assert (not (=> (and (> x y) (> y z)) (> x z))))",
"proof_hash": "a1b2c3d4e5f6",
"proof_search_time_ms": 15.4
}

Analytics & Patterns

Analyze debate patterns and agent behavior.

GET /api/analytics/disagreements

Get analysis of agent disagreement patterns.

Parameters:

  • limit (int, default=20, max=100): Maximum entries

Response:

{
"patterns": [
{
"topic": "Error handling strategies",
"agents": ["anthropic-api", "gemini"],
"disagreement_rate": 0.73,
"debates_count": 8
}
]
}

GET /api/analytics/role-rotation

Get role rotation analysis across debates.

Parameters:

  • limit (int, default=50, max=200): Maximum entries

GET /api/analytics/early-stops

Get early termination signals and patterns.

Parameters:

  • limit (int, default=20, max=100): Maximum entries

Agent Network & Relationships

Analyze agent relationships based on debate history.

GET /api/agent/:name/network

Get agent's relationship network with other agents.

Response:

{
"agent": "anthropic-api",
"connections": [
{"agent": "gemini", "relationship": "rival", "strength": 0.8},
{"agent": "deepseek", "relationship": "ally", "strength": 0.65}
]
}

GET /api/agent/:name/rivals

Get agent's top rivals (agents they often disagree with).

Parameters:

  • limit (int, default=5, max=20): Maximum rivals

GET /api/agent/:name/allies

Get agent's top allies (agents they often agree with).

Parameters:

  • limit (int, default=5, max=20): Maximum allies

GET /api/agent/:name/positions

Get agent's historical positions on topics.

Parameters:

  • limit (int, default=50, max=200): Maximum positions

Laboratory & Emergent Traits

Track emergent agent behaviors and traits.

GET /api/laboratory/emergent-traits

Get emergent traits discovered across agents.

Parameters:

  • min_confidence (float, default=0.5): Minimum confidence threshold
  • limit (int, default=10, max=50): Maximum traits

Response:

{
"traits": [
{
"trait": "contrarian_stance",
"agents": ["grok"],
"confidence": 0.82,
"evidence_count": 15
}
]
}

POST /api/laboratory/cross-pollinations/suggest

Suggest trait cross-pollination between agents.


Belief Network

Analyze claim dependencies and belief propagation.

GET /api/belief-network/:debate_id/cruxes

Get debate cruxes (key disagreement points).

Parameters:

  • top_k (int, default=3, max=10): Number of cruxes to return

Response:

{
"debate_id": "debate-123",
"cruxes": [
{
"claim": "Performance matters more than readability",
"centrality": 0.85,
"agents_for": ["gemini"],
"agents_against": ["anthropic-api"]
}
]
}

GET /api/belief-network/:debate_id/load-bearing-claims

Get claims that most influence the debate outcome.

Parameters:

  • limit (int, default=5, max=20): Maximum claims

Tournaments

Agent tournament management.

GET /api/tournaments

List tournaments.

Response:

{
"tournaments": [
{
"id": "t-001",
"name": "Weekly Championship",
"status": "in_progress",
"participants": 8
}
]
}

GET /api/tournaments/:id/standings

Get tournament standings and bracket.


Modes

Available stress-test and interaction modes.

GET /api/modes

List available modes.

Response:

{
"modes": [
{"name": "standard", "description": "Standard decision stress-test (multi-agent debate engine)"},
{"name": "adversarial", "description": "Red-team adversarial mode"},
{"name": "consensus", "description": "Consensus-building mode"}
]
}

Routing & Team Selection

Agent selection and team composition.

GET /api/routing/best-teams

Get best performing agent team combinations.

Parameters:

  • min_debates (int, default=3, max=20): Minimum debates together
  • limit (int, default=10, max=50): Maximum teams

Response:

{
"teams": [
{
"agents": ["anthropic-api", "gemini", "deepseek"],
"win_rate": 0.85,
"debates": 12,
"avg_confidence": 0.82
}
]
}

POST /api/routing/recommendations

Get agent routing recommendations for a topic.

Request Body:

{
"topic": "API security design",
"required_count": 3
}

Error Responses

All endpoints return errors in this format:

{
"error": "Description of the error"
}

Common HTTP status codes:

  • 400 - Bad request (invalid parameters)
  • 403 - Forbidden (access denied)
  • 404 - Not found
  • 500 - Internal server error

CORS Policy

The API allows cross-origin requests from:

  • http://localhost:3000
  • http://localhost:8080
  • https://aragora.ai
  • https://www.aragora.ai

Other origins are blocked by the browser.


Rate Limits

EndpointLimit
General API60 req/min per token
Document upload10 req/min
WebSocketUnlimited messages

Security Notes

  1. Path traversal protection: All file paths are validated to prevent directory traversal attacks
  2. Input validation: All integer/float parameters have bounds checking
  3. Error sanitization: API keys and tokens are redacted from error messages
  4. Origin validation: CORS uses allowlist instead of wildcard
  5. SQL injection prevention: LIKE patterns are escaped to prevent wildcard injection
  6. Rate limiting: Expensive endpoints (debate creation, uploads) are rate limited
  7. Query bounds: Maximum 10 agents per debate, 10 parts per multipart upload
  8. Database timeouts: SQLite connections have 30-second timeout to prevent deadlocks
  9. Content-Length validation: Headers validated to prevent integer parsing attacks

Python Module APIs

The following sections document the Python APIs for extending Aragora.

Plugin System (aragora.plugins)

The plugin system provides a sandboxed execution environment for code analysis, linting, and security scanning extensions.

PluginManifest

Defines plugin metadata and capabilities.

from aragora.plugins.manifest import PluginManifest, PluginCapability, PluginRequirement

manifest = PluginManifest(
name="my-linter",
version="1.0.0",
description="Custom code linter",
entry_point="my_linter:run", # module:function format
capabilities=[PluginCapability.LINT, PluginCapability.CODE_ANALYSIS],
requirements=[PluginRequirement.READ_FILES],
timeout_seconds=30.0,
tags=["python", "lint"],
)

# Validate manifest
valid, errors = manifest.validate()

PluginCapability Enum:

  • CODE_ANALYSIS - Analyze code structure
  • LINT - Check code style/issues
  • SECURITY_SCAN - Security vulnerability detection
  • FORMAT - Code formatting
  • TEST - Test execution

PluginRequirement Enum:

  • READ_FILES - Read file access
  • WRITE_FILES - Write file access
  • NETWORK - Network access
  • SUBPROCESS - Subprocess execution

PluginRunner

Executes plugins in a sandboxed environment with restricted builtins.

from aragora.plugins.runner import PluginRunner, PluginContext

runner = PluginRunner(manifest)

# Create execution context
ctx = PluginContext(
working_dir="/path/to/project",
input_data={"files": ["main.py", "utils.py"]},
)
ctx.allowed_operations = {"read_files"}

# Run plugin
result = await runner.run(ctx, timeout_override=60.0)

if result.success:
print(result.output)
else:
print(result.errors)

Security Features:

  • Restricted builtins (no exec, eval, compile, __import__, open)
  • Path traversal prevention (cannot access parent directories)
  • Configurable timeouts
  • Capability-based permissions

PluginRegistry

Manages plugin discovery and instantiation.

from aragora.plugins.runner import get_registry, run_plugin

# Get global registry
registry = get_registry()

# List all plugins
plugins = registry.list_plugins()

# Get plugins by capability
lint_plugins = registry.list_by_capability(PluginCapability.LINT)

# Run a plugin by name
result = await run_plugin("lint", {"files": ["main.py"]})

Genesis System (aragora.genesis)

The Genesis system implements evolutionary agent algorithms with genetic operators and provenance tracking.

AgentGenome

Represents an agent's genetic makeup with traits, expertise, and fitness tracking.

from aragora.genesis import AgentGenome, generate_genome_id

# Create a genome
genome = AgentGenome(
genome_id=generate_genome_id(
traits={"analytical": 0.8, "creative": 0.6},
expertise={"security": 0.9},
parents=[]
),
name="security-specialist-v1",
traits={"analytical": 0.8, "creative": 0.6},
expertise={"security": 0.9, "backend": 0.7},
model_preference="anthropic-api",
generation=0,
fitness_score=0.5,
)

# Create from existing Persona
genome = AgentGenome.from_persona(persona, model="gemini")

# Convert back to Persona for debate use
persona = genome.to_persona()

# Update fitness based on debate outcome
genome.update_fitness(
consensus_win=True,
critique_accepted=True,
prediction_correct=False
)

# Calculate genetic similarity (0-1)
similarity = genome1.similarity_to(genome2)

GenomeStore

SQLite-based persistence for genomes.

from aragora.genesis import GenomeStore

store = GenomeStore(db_path=".nomic/genesis.db")

# Save genome
store.save(genome)

# Retrieve by ID
genome = store.get("abc123def456")

# Get by name (returns latest generation)
genome = store.get_by_name("security-specialist")

# Get top performers
top_10 = store.get_top_by_fitness(n=10)

# Get lineage (ancestors)
lineage = store.get_lineage(genome_id) # [child, parent, grandparent, ...]

GenomeBreeder

Genetic operators for evolving agent populations.

from aragora.genesis import GenomeBreeder

breeder = GenomeBreeder(
mutation_rate=0.1, # Probability of mutating each trait
crossover_ratio=0.5, # Blend ratio (0.5 = equal parents)
elite_ratio=0.2, # Fraction preserved unchanged
)

# Crossover: blend two parents
child = breeder.crossover(
parent_a=genome1,
parent_b=genome2,
name="hybrid-agent",
debate_id="debate-123"
)

# Mutation: random modifications
mutated = breeder.mutate(genome, rate=0.2)

# Spawn specialist: create domain-focused agent
specialist = breeder.spawn_specialist(
domain="security",
parent_pool=[genome1, genome2, genome3],
debate_id="debate-123"
)

Population

Collection of genomes with aggregate statistics.

from aragora.genesis import Population

pop = Population(
population_id="gen-5",
genomes=[genome1, genome2, genome3],
generation=5,
)

print(f"Size: {pop.size}")
print(f"Average fitness: {pop.average_fitness:.2f}")
print(f"Best: {pop.best_genome.name}")

# Find by ID
genome = pop.get_by_id("abc123")

GenesisLedger

Immutable event log with cryptographic hashing.

from aragora.genesis import GenesisLedger, GenesisEvent, GenesisEventType

ledger = GenesisLedger(db_path=".nomic/genesis.db")

# Events are automatically hashed and linked
# Common event types:
# - DEBATE_START, DEBATE_END, DEBATE_SPAWN, DEBATE_MERGE
# - CONSENSUS_REACHED, TENSION_DETECTED, TENSION_RESOLVED
# - AGENT_BIRTH, AGENT_DEATH, AGENT_MUTATION, AGENT_CROSSOVER
# - FITNESS_UPDATE, POPULATION_EVOLVED, GENERATION_ADVANCE

FractalTree

Tree structure for nested sub-debates.

from aragora.genesis import FractalTree

tree = FractalTree(root_id="main-debate")
tree.add_node("main-debate", parent_id=None, depth=0, success=True)
tree.add_node("sub-1", parent_id="main-debate", tension="scope", depth=1)
tree.add_node("sub-2", parent_id="main-debate", tension="definition", depth=1)

children = tree.get_children("main-debate") # ["sub-1", "sub-2"]
nested_dict = tree.to_dict() # Recursive structure

Evolution System (aragora.evolution)

Prompt evolution enables agents to improve their system prompts based on successful debate patterns.

PromptEvolver

Main class for evolving agent prompts.

from aragora.evolution import PromptEvolver, EvolutionStrategy

evolver = PromptEvolver(
db_path="aragora_evolution.db",
strategy=EvolutionStrategy.HYBRID,
)

# Extract patterns from successful debates
patterns = evolver.extract_winning_patterns(
debates=recent_debates,
min_confidence=0.6,
)

# Store patterns for future use
evolver.store_patterns(patterns)

# Get most effective patterns
top_patterns = evolver.get_top_patterns(
pattern_type="issue_identification",
limit=10,
)

# Evolve an agent's prompt
new_prompt = evolver.evolve_prompt(
agent=my_agent,
patterns=top_patterns,
strategy=EvolutionStrategy.APPEND,
)

# Apply evolution and save version
evolver.apply_evolution(agent, patterns)

# Track performance
evolver.update_performance(
agent_name="anthropic-api",
version=3,
debate_result=result,
)

EvolutionStrategy

Available strategies for prompt evolution:

from aragora.evolution import EvolutionStrategy

# APPEND: Add new learnings section to existing prompt
# REPLACE: Replace old learnings section with new patterns
# REFINE: Use LLM to synthesize patterns into coherent prompt
# HYBRID: Append first, refine if prompt exceeds 2000 chars

Prompt Versioning

Track prompt versions and their performance:

# Save a new version
version = evolver.save_prompt_version(
agent_name="anthropic-api",
prompt="You are a helpful assistant...",
metadata={"source": "manual", "note": "Added security focus"},
)

# Get specific version
v1 = evolver.get_prompt_version("anthropic-api", version=1)

# Get latest version
latest = evolver.get_prompt_version("anthropic-api")

# Get evolution history
history = evolver.get_evolution_history("anthropic-api", limit=10)
# Returns: [{"from_version": 2, "to_version": 3, "strategy": "append", ...}, ...]

Breakpoints API

Human-in-the-loop breakpoint management for debate supervision.

List Pending Breakpoints

GET /api/breakpoints/pending

Returns all breakpoints awaiting human resolution.

Response:

{
"breakpoints": [
{
"id": "bp_abc123",
"debate_id": "debate_xyz",
"type": "consensus_uncertain",
"created_at": "2026-01-09T10:00:00Z",
"context": {
"agents_involved": ["anthropic-api", "openai-api"],
"disagreement_score": 0.85
}
}
]
}

Get Breakpoint Status

GET /api/breakpoints/:id/status

Returns the current status of a specific breakpoint.

Resolve Breakpoint

POST /api/breakpoints/:id/resolve

Resolve a pending breakpoint with human guidance.

Request Body:

{
"resolution": "continue",
"guidance": "The agents should focus on practical implementation",
"override_winner": null
}

Introspection API

Agent self-awareness and reputation metrics.

Get All Agent Introspection

GET /api/introspection/all

Returns introspection data for all agents.

Get Introspection Leaderboard

GET /api/introspection/leaderboard

Returns agents ranked by reputation score.

Response:

{
"rankings": [
{
"agent": "anthropic-api",
"reputation_score": 0.92,
"consistency": 0.88,
"win_rate": 0.67
}
]
}

List Available Agents

GET /api/introspection/agents

Returns list of agents available for introspection.

Get Agent Availability

GET /api/introspection/agents/availability

Returns credential availability for known agent types.

Get Agent Introspection

GET /api/introspection/agents/:name

Returns detailed introspection for a specific agent.


Public debate gallery for sharing and embedding.

List Public Debates

GET /api/gallery

Query Parameters:

ParameterTypeDefaultDescription
limitint20Max debates to return
offsetint0Pagination offset
agentstring-Filter by agent name

Response:

{
"debates": [
{
"id": "gallery_abc123",
"title": "Should AI systems be open-sourced?",
"agents": ["anthropic-api", "openai-api"],
"winner": "anthropic-api",
"created_at": "2026-01-09T10:00:00Z",
"view_count": 1234
}
],
"total": 156,
"has_more": true
}

Get Public Debate

GET /api/gallery/:id

Returns full debate history for a public debate.

Get Embeddable Summary

GET /api/gallery/:id/embed

Returns an embeddable summary suitable for sharing.

Response:

{
"embed_html": "<div class='aragora-embed'>...</div>",
"og_tags": {
"title": "AI Debate: Open Source AI",
"description": "Claude vs GPT-4 debate on open-source AI",
"image": "https://api.aragora.ai/og/gallery_abc123.png"
}
}

Billing API

Subscription and usage management (requires authentication).

List Plans

GET /api/billing/plans

Returns available subscription plans with features and pricing.

Response:

{
"plans": [
{
"id": "free",
"name": "Free",
"price": 0,
"debates_per_month": 10,
"features": ["basic_agents", "public_gallery"]
},
{
"id": "pro",
"name": "Pro",
"price": 29,
"debates_per_month": 500,
"features": ["all_agents", "private_debates", "api_access"]
}
]
}

Get Current Usage

GET /api/billing/usage

Returns current usage for the authenticated user.

Response:

{
"debates_used": 45,
"debates_limit": 500,
"api_calls_used": 1234,
"api_calls_limit": 10000,
"period_ends": "2026-02-01T00:00:00Z"
}

Get Subscription Status

GET /api/billing/subscription

Returns current subscription details.

Create Checkout Session

POST /api/billing/checkout

Create a Stripe checkout session for plan upgrade.

Request Body:

{
"plan_id": "pro",
"success_url": "https://aragora.ai/billing/success",
"cancel_url": "https://aragora.ai/billing/cancel"
}

Response:

{
"checkout_url": "https://checkout.stripe.com/..."
}

Create Billing Portal Session

POST /api/billing/portal

Create a Stripe billing portal session for subscription management.

Cancel Subscription

POST /api/billing/cancel

Cancel subscription at end of current billing period.

Resume Subscription

POST /api/billing/resume

Resume a previously canceled subscription.

Stripe Webhook

POST /api/webhooks/stripe

Handle Stripe webhook events (subscription updates, payment events).


Usage Metering API

Enterprise usage metering endpoints for tracking consumption and quotas.

Get Usage Summary

GET /api/v1/billing/usage
GET /api/v1/billing/usage/summary
Authorization: Bearer <token>

Query Parameters:

  • period: Billing period (hour, day, week, month, quarter, year). Default: month

Returns current usage for the authenticated user's organization.

Response:

{
"usage": {
"period_start": "2026-01-01T00:00:00Z",
"period_end": "2026-01-31T23:59:59Z",
"period_type": "month",
"tokens": {
"input": 500000,
"output": 250000,
"total": 750000,
"cost": "12.50"
},
"counts": {
"debates": 45,
"api_calls": 1500
},
"by_provider": {...},
"limits": {...},
"usage_percent": {...}
}
}

Get Usage Breakdown

GET /api/v1/billing/usage/breakdown
Authorization: Bearer <token>

Query Parameters:

  • start: Start date (ISO format)
  • end: End date (ISO format)

Returns detailed usage breakdown by model, provider, and day.

Response:

{
"breakdown": {
"totals": {
"cost": "125.50",
"tokens": 5000000,
"debates": 150,
"api_calls": 5000
},
"by_model": [...],
"by_provider": [...],
"by_day": [...],
"by_user": [...]
}
}

Get Limits

GET /api/v1/billing/limits
Authorization: Bearer <token>

Returns current tier limits and utilization percentages.

Response:

{
"limits": {
"tier": "enterprise_plus",
"limits": {
"tokens": 999999999,
"debates": 999999,
"api_calls": 999999
},
"used": {
"tokens": 750000,
"debates": 45,
"api_calls": 1500
},
"percent": {
"tokens": 0.075,
"debates": 0.0045,
"api_calls": 0.15
},
"exceeded": {
"tokens": false,
"debates": false,
"api_calls": false
}
}
}

Get Quota Status

GET /api/v1/quotas
Authorization: Bearer <token>

Returns current quota status for all resources using the unified QuotaManager.

Response:

{
"quotas": {
"debates": {
"limit": 100,
"current": 45,
"remaining": 55,
"period": "day",
"percentage_used": 45.0,
"is_exceeded": false,
"is_warning": false,
"resets_at": "2026-01-24T00:00:00Z"
},
"api_requests": {...},
"tokens": {...},
"storage_bytes": {...},
"knowledge_bytes": {...}
}
}

Export Usage

GET /api/v1/billing/usage/export
Authorization: Bearer <token>

Query Parameters:

  • start: Start date (ISO format)
  • end: End date (ISO format)
  • format: Export format (csv or json). Default: csv

Returns usage data as downloadable CSV or JSON.


SME Usage Dashboard API

Comprehensive usage visibility and ROI tracking for SME users.

Get Usage Summary

GET /api/v1/usage/summary
Authorization: Bearer <token>

Query Parameters:

  • period: Time period (hour, day, week, month, quarter, year). Default: month
  • start: Custom start date (ISO format)
  • end: Custom end date (ISO format)

Returns unified usage metrics including debates, costs, tokens, and activity.

Response:

{
"summary": {
"period": {
"type": "month",
"start": "2025-12-27T00:00:00Z",
"end": "2026-01-26T23:59:59Z",
"days": 30
},
"debates": {
"total": 45,
"completed": 40,
"consensus_rate": 85.5
},
"costs": {
"total_usd": "12.50",
"avg_per_debate_usd": "0.28",
"by_provider": {
"anthropic": "8.50",
"openai": "4.00"
}
},
"tokens": {
"total": 750000,
"input": 500000,
"output": 250000
},
"activity": {
"active_days": 15,
"debates_per_day": 1.5,
"api_calls": 1500
}
}
}

Get Usage Breakdown

GET /api/v1/usage/breakdown
Authorization: Bearer <token>

Query Parameters:

  • dimension: Breakdown dimension (agent, model, day, debate). Default: agent
  • period: Time period
  • start: Custom start date
  • end: Custom end date

Returns detailed usage breakdown by the specified dimension.

Response:

{
"breakdown": {
"dimension": "agent",
"period": {
"start": "2025-12-27T00:00:00Z",
"end": "2026-01-26T23:59:59Z"
},
"items": [
{
"name": "claude",
"cost_usd": "8.50",
"percentage": 68.0
},
{
"name": "gpt-4",
"cost_usd": "4.00",
"percentage": 32.0
}
]
}
}

Get ROI Metrics

GET /api/v1/usage/roi
Authorization: Bearer <token>

Query Parameters:

  • benchmark: Industry benchmark (sme, enterprise, tech_startup, consulting). Default: sme
  • period: Time period
  • hourly_rate: Override hourly rate assumption (USD)

Returns ROI analysis comparing AI-assisted decisions with traditional methods.

Response:

{
"roi": {
"period": {
"start": "2025-12-27T00:00:00Z",
"end": "2026-01-26T23:59:59Z"
},
"time_savings": {
"total_hours_saved": 45.0,
"avg_hours_per_debate": 1.5,
"value_of_time_saved_usd": "3375.00"
},
"cost": {
"total_ai_cost_usd": "12.50",
"avg_cost_per_debate_usd": "0.28",
"traditional_cost_estimate_usd": "3500.00"
},
"roi": {
"percentage": 26900,
"net_savings_usd": "3362.50",
"payback_period_debates": 1
},
"quality": {
"consensus_rate": 85.5,
"avg_confidence": 0.87,
"decisions_with_high_confidence": 38
},
"productivity": {
"debates_per_active_day": 3.0,
"time_per_decision_minutes": 5.2,
"traditional_time_per_decision_hours": 4.0
},
"benchmark": {
"name": "sme",
"hourly_rate_usd": "75.00",
"avg_decision_cost_usd": "300.00",
"avg_hours_per_decision": 4.0
}
}
}

Get Budget Status

GET /api/v1/usage/budget-status
Authorization: Bearer <token>

Returns current budget utilization and projections.

Response:

{
"budget": {
"monthly": {
"limit_usd": "100.00",
"spent_usd": "45.50",
"remaining_usd": "54.50",
"percent_used": 45.5,
"days_remaining": 15,
"projected_end_spend_usd": "91.00"
},
"daily": {
"limit_usd": "10.00",
"spent_usd": "1.50"
},
"alert_level": null
}
}

Get Usage Forecast

GET /api/v1/usage/forecast
Authorization: Bearer <token>

Query Parameters:

  • benchmark: Industry benchmark for ROI projections

Returns usage forecast based on current patterns.

Response:

{
"forecast": {
"projected_monthly_debates": 60,
"projected_monthly_cost_usd": "16.80",
"projected_time_savings_hours": 60.0,
"projected_roi_percentage": 28000,
"confidence": 0.85,
"recommendations": [
"Current usage pattern is efficient",
"Consider increasing debate usage for higher ROI"
]
}
}

Get Industry Benchmarks

GET /api/v1/usage/benchmarks
Authorization: Bearer <token>

Returns industry benchmark comparison data.

Response:

{
"benchmarks": {
"sme": {
"name": "Small/Medium Enterprise",
"hourly_rate_usd": "75.00",
"avg_decision_cost_usd": "300.00",
"avg_hours_per_decision": 4.0,
"avg_participants": 3
},
"enterprise": {
"name": "Enterprise",
"hourly_rate_usd": "150.00",
"avg_decision_cost_usd": "1200.00",
"avg_hours_per_decision": 8.0,
"avg_participants": 5
},
"tech_startup": {
"name": "Tech Startup",
"hourly_rate_usd": "100.00",
"avg_decision_cost_usd": "400.00",
"avg_hours_per_decision": 4.0,
"avg_participants": 4
},
"consulting": {
"name": "Consulting",
"hourly_rate_usd": "250.00",
"avg_decision_cost_usd": "2000.00",
"avg_hours_per_decision": 8.0,
"avg_participants": 4
}
}
}

Export Usage Data

GET /api/v1/usage/export
Authorization: Bearer <token>

Query Parameters:

  • format: Export format (csv, json, pdf). Default: csv
  • period: Time period
  • start: Custom start date
  • end: Custom end date
  • include_roi: Include ROI metrics (true/false). Default: false

Returns usage data as downloadable file.

Response (JSON format):

{
"organization": "My Company",
"period": {
"start": "2025-12-27T00:00:00Z",
"end": "2026-01-26T23:59:59Z"
},
"totals": {
"cost_usd": "12.50",
"tokens": 750000,
"api_calls": 1500
},
"by_agent": {
"claude": "8.50",
"gpt-4": "4.00"
},
"by_model": {
"claude-3-opus": "5.00",
"claude-3-sonnet": "3.50",
"gpt-4-turbo": "4.00"
},
"roi": {
"time_saved_hours": 45.0,
"net_savings_usd": "3362.50"
}
}

Job Queue API

Background job queue management for long-running tasks.

Submit Job

POST /api/queue/jobs
Authorization: Bearer <token>
Content-Type: application/json

{
"type": "debate_export",
"payload": {
"debate_id": "debate-123",
"format": "json"
},
"priority": "normal"
}

Response:

{
"job_id": "job-abc123",
"status": "pending",
"position": 3
}

List Jobs

GET /api/queue/jobs?status=pending&limit=20

Query parameters:

  • status: Filter by status (pending, running, completed, failed)
  • type: Filter by job type
  • limit: Max results (default 50)
  • offset: Pagination offset

Get Job Status

GET /api/queue/jobs/\{job_id\}

Response:

{
"job_id": "job-abc123",
"type": "debate_export",
"status": "running",
"progress": 45,
"created_at": "2026-01-18T10:00:00Z",
"started_at": "2026-01-18T10:00:05Z"
}

Retry Failed Job

POST /api/queue/jobs/\{job_id\}/retry
Authorization: Bearer <token>

Cancel Job

DELETE /api/queue/jobs/\{job_id\}
Authorization: Bearer <token>

Queue Statistics

GET /api/queue/stats

Response:

{
"pending": 12,
"running": 3,
"completed_24h": 156,
"failed_24h": 2,
"avg_wait_time_ms": 1250,
"avg_processing_time_ms": 4500
}

Worker Status

GET /api/queue/workers

Response:

{
"workers": [
{
"id": "worker-1",
"status": "busy",
"current_job": "job-abc123",
"jobs_completed": 42
}
]
}

Moments API

Track and query significant debate moments (upsets, reversals, breakthroughs).

Get Moments Summary

GET /api/moments/summary

Response:

{
"total_moments": 156,
"by_type": {
"upset_victory": 23,
"position_reversal": 18,
"consensus_breakthrough": 45,
"calibration_vindication": 12,
"alliance_shift": 8,
"streak_achievement": 30,
"domain_mastery": 20
},
"recent_count_24h": 12
}

Get Moments Timeline

GET /api/moments/timeline?limit=50&offset=0

Response:

{
"moments": [
{
"id": "moment-123",
"type": "upset_victory",
"debate_id": "debate-456",
"agent": "claude-3",
"description": "Won against higher-rated opponent",
"significance": 0.85,
"timestamp": "2026-01-18T10:30:00Z"
}
],
"total": 156
}
GET /api/moments/trending?limit=10

Returns most significant recent moments.

Get Moments by Type

GET /api/moments/by-type/\{type\}

Valid types: upset_victory, position_reversal, calibration_vindication, alliance_shift, consensus_breakthrough, streak_achievement, domain_mastery


Checkpoint API

Pause, checkpoint, and resume debates.

List Checkpoints

GET /api/checkpoints?debate_id=abc123&limit=20

Response:

{
"checkpoints": [
{
"id": "cp-123",
"debate_id": "debate-456",
"round": 3,
"created_at": "2026-01-18T10:00:00Z",
"reason": "manual_pause",
"resumable": true
}
]
}

Get Resumable Checkpoints

GET /api/checkpoints/resumable

Returns checkpoints that can be resumed.

Get Checkpoint Details

GET /api/checkpoints/\{id\}

Response:

{
"id": "cp-123",
"debate_id": "debate-456",
"round": 3,
"state": {
"current_round": 3,
"agents": ["claude-3", "gpt-4"],
"votes": {"claude-3": 2, "gpt-4": 1}
},
"created_at": "2026-01-18T10:00:00Z",
"resumable": true
}

Resume from Checkpoint

POST /api/checkpoints/\{id\}/resume
Authorization: Bearer <token>

Resumes a paused debate from the checkpoint state.

Delete Checkpoint

DELETE /api/checkpoints/\{id\}
Authorization: Bearer <token>

Create Checkpoint for Debate

POST /api/debates/\{id\}/checkpoint
Authorization: Bearer <token>
Content-Type: application/json

{
"reason": "user_requested"
}

Pause Debate

POST /api/debates/\{id\}/pause
Authorization: Bearer <token>

Pauses a running debate and creates a checkpoint automatically.


Workspace API (Enterprise)

Multi-tenant workspace management with data isolation.

Create Workspace

POST /api/workspaces
Authorization: Bearer <token>
Content-Type: application/json

{
"name": "Engineering Team",
"description": "Workspace for engineering debates",
"settings": {
"default_retention_days": 90,
"require_approval": true
}
}

List Workspaces

GET /api/workspaces
Authorization: Bearer <token>

Get Workspace Details

GET /api/workspaces/\{id\}
Authorization: Bearer <token>

Delete Workspace

DELETE /api/workspaces/\{id\}
Authorization: Bearer <token>

Add Workspace Member

POST /api/workspaces/\{id\}/members
Authorization: Bearer <token>
Content-Type: application/json

{
"user_id": "user-123",
"role": "member",
"permissions": ["read", "write"]
}

Remove Workspace Member

DELETE /api/workspaces/\{id\}/members/\{user_id\}
Authorization: Bearer <token>

Retention Policies

GET /api/retention/policies
POST /api/retention/policies
PUT /api/retention/policies/\{id\}
DELETE /api/retention/policies/\{id\}
POST /api/retention/policies/\{id\}/execute
GET /api/retention/expiring

Content Classification

POST /api/classify
Content-Type: application/json

{
"content": "Debate transcript text...",
"context": "internal_review"
}

Response:

{
"level": "confidential",
"confidence": 0.92,
"reasons": ["contains_internal_data"]
}

Audit Log

GET /api/audit/entries?actor=user-123&action=read&limit=100
GET /api/audit/report?start=2026-01-01&end=2026-01-18
GET /api/audit/verify

SOC 2 Controls: CC6.1, CC6.3 - Logical access controls


Privacy API (GDPR/CCPA)

Data export and account deletion for regulatory compliance.

Export User Data

GET /api/v1/privacy/export
Authorization: Bearer <token>

GDPR Article 15, CCPA Right to Know. Exports all user data.

Response:

{
"export_id": "export-123",
"status": "processing",
"estimated_completion": "2026-01-18T10:30:00Z"
}

Get Data Inventory

GET /api/v1/privacy/data-inventory
Authorization: Bearer <token>

Response:

{
"categories": [
{
"name": "debate_history",
"description": "Your debate participation history",
"count": 42,
"retention": "90 days"
},
{
"name": "preferences",
"description": "Account settings and preferences",
"count": 1,
"retention": "Until account deletion"
}
]
}

Delete Account

DELETE /api/v1/privacy/account
Authorization: Bearer <token>
Content-Type: application/json

{
"password": "your-current-password",
"confirm": true,
"reason": "no_longer_needed"
}

GDPR Article 17, CCPA Right to Delete.

Update Privacy Preferences

POST /api/v1/privacy/preferences
Authorization: Bearer <token>
Content-Type: application/json

{
"do_not_sell": true,
"marketing_opt_out": false,
"analytics_opt_out": false,
"third_party_sharing": true
}

CCPA Do Not Sell compliance.

SOC 2 Control: P5-01 - User access to personal data


Training Export API

Export debate data for model fine-tuning.

Export SFT Data

POST /api/training/export/sft
Authorization: Bearer <token>
Content-Type: application/json

{
"filters": {
"min_quality": 0.8,
"start_date": "2026-01-01",
"end_date": "2026-01-18"
},
"format": "jsonl"
}

Supervised Fine-Tuning format export.

Export DPO Data

POST /api/training/export/dpo
Authorization: Bearer <token>
Content-Type: application/json

{
"filters": {
"min_margin": 0.3,
"include_ties": false
},
"format": "jsonl"
}

Direct Preference Optimization format with chosen/rejected pairs.

Export Gauntlet Data

POST /api/training/export/gauntlet
Authorization: Bearer <token>

Adversarial training data from gauntlet challenges.

Get Export Statistics

GET /api/training/stats

Response:

{
"total_debates": 1234,
"exportable_sft": 890,
"exportable_dpo": 456,
"last_export": "2026-01-17T15:00:00Z"
}

List Export Formats

GET /api/training/formats

Response:

{
"formats": [
{"id": "jsonl", "name": "JSON Lines", "extensions": [".jsonl"]},
{"id": "parquet", "name": "Apache Parquet", "extensions": [".parquet"]},
{"id": "csv", "name": "CSV", "extensions": [".csv"]}
]
}

Training Jobs

GET /api/training/jobs
POST /api/training/jobs/\{id\}/start
POST /api/training/jobs/\{id\}/complete
GET /api/training/jobs/\{id\}/metrics
GET /api/training/jobs/\{id\}/artifacts

Explainability API

Get decision explanations, evidence chains, vote pivots, counterfactuals, and summaries.

Get Full Explanation

GET /api/v1/debates/\{debate_id\}/explanation
Authorization: Bearer <token>

Query Parameters:

  • format (string, default: json): json or summary (Markdown)

Response (json):

{
"decision_id": "dec-abc123",
"debate_id": "debate-123",
"conclusion": "Adopt a tiered rate limiting strategy",
"confidence": 0.87,
"consensus_reached": true,
"evidence_chain": [],
"vote_pivots": [],
"counterfactuals": [],
"evidence_quality_score": 0.82
}

Get Evidence Chain

GET /api/v1/debates/\{debate_id\}/evidence
Authorization: Bearer <token>

Query Parameters:

  • limit (int, default: 20)
  • min_relevance (float, default: 0.0)

Response:

{
"debate_id": "debate-123",
"evidence_count": 5,
"evidence_quality_score": 0.82,
"evidence": []
}

Get Vote Pivots

GET /api/v1/debates/\{debate_id\}/votes/pivots
Authorization: Bearer <token>

Query Parameters:

  • min_influence (float, default: 0.0)

Get Counterfactuals

GET /api/v1/debates/\{debate_id\}/counterfactuals
Authorization: Bearer <token>

Query Parameters:

  • min_sensitivity (float, default: 0.0)

Get Summary

GET /api/v1/debates/\{debate_id\}/summary
Authorization: Bearer <token>

Query Parameters:

  • format (string, default: markdown): markdown, json, or html

Batch Explainability

Process multiple debates in a single request for efficiency.

Create Batch Job

POST /api/v1/explainability/batch
Authorization: Bearer <token>
Content-Type: application/json

{
"debate_ids": ["debate-1", "debate-2", "debate-3"],
"options": {
"include_evidence": true,
"include_counterfactuals": false,
"include_vote_pivots": false,
"format": "full" // "full", "summary", or "minimal"
}
}

Response (202 Accepted):

{
"batch_id": "batch-a1b2c3d4e5f6",
"status": "pending",
"total_debates": 3,
"status_url": "/api/v1/explainability/batch/batch-a1b2c3d4e5f6/status",
"results_url": "/api/v1/explainability/batch/batch-a1b2c3d4e5f6/results"
}

Get Batch Status

GET /api/v1/explainability/batch/\{batch_id\}/status
Authorization: Bearer <token>

Response:

{
"batch_id": "batch-a1b2c3d4e5f6",
"status": "processing",
"total_debates": 3,
"processed_count": 2,
"success_count": 2,
"error_count": 0,
"created_at": 1737356400.0,
"started_at": 1737356401.0,
"progress_pct": 66.7
}

Get Batch Results

GET /api/v1/explainability/batch/\{batch_id\}/results
Authorization: Bearer <token>

Query Parameters:

  • include_partial (boolean, default: false): Include results while still processing
  • offset (int, default: 0): Pagination offset
  • limit (int, default: 50, max: 100): Results per page

Response:

{
"batch_id": "batch-a1b2c3d4e5f6",
"status": "completed",
"total_debates": 3,
"processed_count": 3,
"success_count": 3,
"error_count": 0,
"results": [
{
"debate_id": "debate-1",
"status": "success",
"processing_time_ms": 125.4,
"explanation": {
"confidence": 0.87,
"consensus_reached": true,
"contributing_factors": [...]
}
}
],
"pagination": {
"offset": 0,
"limit": 50,
"total": 3,
"has_more": false
}
}

Compare Explanations

Compare decision factors across multiple debates.

POST /api/v1/explainability/compare
Authorization: Bearer <token>
Content-Type: application/json

{
"debate_ids": ["debate-1", "debate-2"],
"compare_fields": ["confidence", "consensus_reached", "contributing_factors", "evidence_quality"]
}

Response:

{
"debates_compared": ["debate-1", "debate-2"],
"comparison": {
"confidence": {
"debate-1": 0.87,
"debate-2": 0.92
},
"confidence_stats": {
"min": 0.87,
"max": 0.92,
"avg": 0.895,
"spread": 0.05
},
"consensus_reached": {
"debate-1": true,
"debate-2": true
},
"consensus_agreement": true,
"contributing_factors": {
"evidence_quality": {
"debate-1": 0.35,
"debate-2": 0.42
}
},
"common_factors": ["evidence_quality", "argument_strength"]
}
}

Workflow Templates API

Manage and execute reusable workflow templates with pre-built patterns.

List Workflow Templates

GET /api/workflow/templates
Authorization: Bearer <token>

Query Parameters:

  • category (string): Filter by category
  • pattern (string): Filter by pattern type (hive_mind, map_reduce, review_cycle, pipeline, parallel)
  • search (string): Search by name or description
  • tags (string): Filter by tags (comma-separated)
  • limit (int, default: 50, max: 100)
  • offset (int, default: 0)

Response:

{
"templates": [
{
"id": "security/code-review",
"name": "Security Code Review",
"description": "Multi-agent security analysis workflow",
"category": "security",
"pattern": "review_cycle",
"tags": ["security", "code", "audit"]
}
],
"total": 15,
"limit": 50,
"offset": 0
}

Get Template Details

GET /api/workflow/templates/\{template_id\}
Authorization: Bearer <token>

Get Template Package

GET /api/workflow/templates/\{template_id\}/package
Authorization: Bearer <token>

Query Parameters:

  • include_examples (boolean, default: true): Include usage examples

Response:

{
"id": "security/code-review",
"name": "Security Code Review",
"description": "Multi-agent security analysis workflow",
"workflow_definition": {
"nodes": [...],
"edges": [...],
"config": {...}
},
"input_schema": {
"type": "object",
"properties": {
"code_path": {"type": "string"},
"severity_threshold": {"type": "string", "enum": ["low", "medium", "high"]}
}
},
"output_schema": {...},
"documentation": "# Security Code Review\n\nThis workflow...",
"examples": [
{
"name": "Basic usage",
"inputs": {"code_path": "src/auth.py"},
"description": "Review authentication module"
}
],
"version": "1.2.0"
}

Run Workflow Template

POST /api/workflow/templates/\{template_id\}/run
Authorization: Bearer <token>
Content-Type: application/json

{
"inputs": {
"code_path": "src/api/handlers.py",
"severity_threshold": "medium"
},
"config": {
"timeout": 300,
"priority": "high",
"async": false
},
"workspace_id": "ws-123"
}

Response (sync):

{
"execution_id": "exec-456",
"status": "completed",
"result": {
"findings": [...],
"summary": "Found 3 potential vulnerabilities"
},
"duration_ms": 45200
}

Response (async):

{
"execution_id": "exec-456",
"status": "running",
"status_url": "/api/workflow-executions/exec-456"
}

List Template Categories

GET /api/workflow/categories

Response:

{
"categories": [
{
"id": "security",
"name": "Security",
"description": "Security analysis workflows",
"template_count": 8,
"icon": "shield"
},
{
"id": "research",
"name": "Research",
"description": "Research and analysis workflows",
"template_count": 12,
"icon": "search"
}
]
}

List Workflow Patterns

GET /api/workflow/patterns

Response:

{
"patterns": [
{
"id": "hive_mind",
"name": "Hive Mind",
"description": "Parallel agent consultation with aggregation",
"available": true,
"use_cases": ["Research", "Brainstorming", "Consensus building"]
},
{
"id": "map_reduce",
"name": "Map-Reduce",
"description": "Distribute work, combine results",
"available": true,
"use_cases": ["Large document analysis", "Batch processing"]
}
]
}

Instantiate Pattern

POST /api/workflow/patterns/\{pattern_id\}/instantiate
Authorization: Bearer <token>
Content-Type: application/json

{
"name": "My Security Review",
"description": "Custom security review workflow",
"category": "security",
"config": {
"max_agents": 5,
"consensus_threshold": 0.7
},
"agents": ["anthropic-api", "openai-api", "mistral-api"]
}

Gauntlet Receipts API

Access and export gauntlet verification receipts with cryptographic integrity verification.

List Gauntlet Receipts

GET /api/gauntlet/receipts
Authorization: Bearer <token>

Query Parameters:

  • verdict (string): Filter by verdict (pass, fail, warn)
  • from_date (string): Start date (ISO 8601)
  • to_date (string): End date (ISO 8601)
  • limit (int, default: 50)
  • offset (int, default: 0)

Response:

{
"receipts": [
{
"id": "receipt-789",
"debate_id": "debate-123",
"verdict": "pass",
"confidence": 0.92,
"timestamp": "2026-01-20T10:30:00Z",
"hash": "sha256:a1b2c3..."
}
],
"total": 42,
"limit": 50,
"offset": 0
}

Get Receipt Details

GET /api/gauntlet/receipts/\{receipt_id\}
Authorization: Bearer <token>

Response:

{
"id": "receipt-789",
"debate_id": "debate-123",
"verdict": "pass",
"confidence": 0.92,
"timestamp": "2026-01-20T10:30:00Z",
"hash": "sha256:a1b2c3d4e5f6...",
"agents": ["anthropic-api", "openai-api"],
"rounds": 3,
"consensus_type": "majority",
"findings": [
{
"type": "security",
"severity": "low",
"description": "Input validation could be strengthened"
}
],
"metadata": {
"duration_ms": 45000,
"token_count": 12500
}
}

Verify Receipt Integrity

GET /api/gauntlet/receipts/\{receipt_id\}/verify
Authorization: Bearer <token>

Response:

{
"valid": true,
"hash": "sha256:a1b2c3d4e5f6...",
"computed_hash": "sha256:a1b2c3d4e5f6...",
"verification_timestamp": "2026-01-20T11:00:00Z"
}

Export Receipt

GET /api/gauntlet/receipts/\{receipt_id\}/export
Authorization: Bearer <token>

Query Parameters:

  • format (string, required): "json", "html", "markdown", or "sarif"

Response (format=sarif):

{
"$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
"version": "2.1.0",
"runs": [
{
"tool": {
"driver": {
"name": "Aragora Gauntlet",
"version": "1.0.0"
}
},
"results": [...]
}
]
}
POST /api/gauntlet/receipts/\{receipt_id\}/share
Authorization: Bearer <token>
Content-Type: application/json

{
"expires_in": 86400,
"allow_download": true
}

Response:

{
"share_url": "https://app.aragora.ai/receipts/share/abc123",
"expires_at": "2026-01-21T11:00:00Z",
"token": "abc123"
}

Get Receipt Statistics

GET /api/gauntlet/receipts/stats
Authorization: Bearer <token>

Query Parameters:

  • period (string): "day", "week", "month"

Response:

{
"period": "week",
"total": 156,
"by_verdict": {
"pass": 120,
"fail": 24,
"warn": 12
},
"average_confidence": 0.87,
"average_duration_ms": 42000
}

Deprecated Endpoints

The following endpoints are deprecated and will be removed in future versions.

EndpointStatusRemovalMigration
GET /api/debates/listDeprecatedv2.0Use GET /api/debates
POST /api/debate/newDeprecatedv2.0Use POST /api/debates/start
GET /api/elo/rankingsDeprecatedv2.0Use GET /api/agent/leaderboard
GET /api/agent/eloDeprecatedv2.0Use GET /api/agent/\{name\}/profile
POST /api/stream/startDeprecatedv2.0Use WebSocket /ws connection

Migration Guide

Debate Listing

# Old (deprecated)
curl http://localhost:8080/api/debates/list

# New (recommended)
curl http://localhost:8080/api/debates

Starting Debates

# Old (deprecated)
curl -X POST http://localhost:8080/api/debate/new \
-d '{"question": "..."}'

# New (recommended)
curl -X POST http://localhost:8080/api/debates/start \
-H "Content-Type: application/json" \
-d '{"question": "...", "agents": ["anthropic-api", "openai-api"]}'

Agent Rankings

# Old (deprecated)
curl http://localhost:8080/api/elo/rankings
curl http://localhost:8080/api/agent/elo?name=anthropic-api

# New (recommended)
curl http://localhost:8080/api/agent/leaderboard
curl http://localhost:8080/api/agent/anthropic-api/profile

Deprecation Timeline

  • v1.5 (Current): Deprecated endpoints still functional, emit deprecation warnings in response headers
  • v2.0 (Planned): Deprecated endpoints return 410 Gone status
  • v2.1 (Planned): Deprecated endpoints removed entirely

Response headers for deprecated endpoints:

Deprecation: true
Sunset: 2026-06-01
Link: </api/debates>; rel="successor-version"

Changelog

2026-01-09

  • Added Graph Debates API (4 endpoints for branching debates)
  • Added Matrix Debates API (4 endpoints for parallel scenarios)
  • Added Breakpoints API (3 endpoints for human-in-the-loop)
  • Added Introspection API (4 endpoints for agent self-awareness)
  • Added Gallery API (3 endpoints for public debate sharing)
  • Added Billing API (8 endpoints for subscription management)
  • Updated endpoint count from 106 to 124

2026-01-05

  • Added CSV and HTML export formats for debates
  • Added token streaming events (token_start, token_delta, token_end)
  • Added phase timeout events (phase_start now includes timeout, added phase_timeout)
  • Added usage examples section with curl commands
  • Added deprecated endpoints documentation with migration guide