Verify Service

Multi-model consensus fact verification API

The Verify Service uses multiple AI models to verify factual claims through consensus.

POST /verify/v1/stream

Verify a statement and receive streaming results via Server-Sent Events.

Request

POST https://console.mira.network/verify/v1/stream
Authorization: Bearer mk_verify_YOUR_API_KEY
Content-Type: application/json

Body Parameters

ParameterTypeRequiredDescription
factstringYesThe statement to verify
domainstringNoDomain context: "general" (default) or "legal"
minRequirednumberNoMinimum models for consensus: 2 or 3 (default: 2)
totalModelsnumberNoTotal models to query (default: 3)

Example Request

curl -X POST https://console.mira.network/verify/v1/stream \
  -H "Authorization: Bearer mk_verify_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fact": "Water boils at 100 degrees Celsius at sea level",
    "domain": "general",
    "minRequired": 2
  }'

Response

The response is a stream of Server-Sent Events.

Event Types

starting

Process has begun.

event: starting
data: {"status":"starting"}
extracting_claims

Analyzing the statement to extract verifiable claims.

event: extracting_claims
data: {"status":"extracting_claims"}
claims_extracted

Claims have been identified.

event: claims_extracted
data: {"claims":["Water boils at 100°C at sea level"],"count":1}
verifying_claims

Beginning verification of all claims.

event: verifying_claims
data: {"totalClaims":1}
verifying_claim

Starting verification of a specific claim.

event: verifying_claim
data: {"claimIndex":0,"claim":"Water boils at 100°C at sea level"}
claim_verified

A single claim has been verified.

event: claim_verified
data: {
  "claimIndex": 0,
  "assessment": "TRUE",
  "consensus_answer": "A",
  "model_answers": [
    {"model": "gpt-4", "answer": "A"},
    {"model": "claude-3-sonnet", "answer": "A"},
    {"model": "gpt-4-turbo", "answer": "A"}
  ]
}
completed

Verification complete with full results.

event: completed
data: {
  "requestId": "req_abc123",
  "original_fact": "Water boils at 100 degrees Celsius at sea level",
  "results": [...],
  "tokenUsage": {...},
  "timestamp": "2024-01-15T10:30:00Z"
}

Complete Response Schema

interface VerifyResponse {
  requestId: string;
  original_fact: string;
  results: ClaimResult[];
  timestamp: string;
  tokenUsage: TokenUsage;
  minRequired: number;
}

interface ClaimResult {
  id: string;
  claim: string;
  assessment: 'TRUE' | 'FALSE' | 'NO CONSENSUS';
  original_question: string;
  original_options: Record<string, string>;
  claimed_answer: string;
  model_answers: ModelAnswer[];
  consensus_answer: string;
}

interface ModelAnswer {
  model: string;
  answer: string;
}

interface TokenUsage {
  promptTokens: number;
  completionTokens: number;
  totalTokens: number;
  extractionTokens?: number;
  verificationTokens?: number;
  modelUsage?: ModelTokenUsage[];
}

interface ModelTokenUsage {
  model: string;
  promptTokens: number;
  completionTokens: number;
  totalTokens: number;
}

Assessment Values

ValueMeaning
TRUEModels reached consensus that the claim is true
FALSEModels reached consensus that the claim is false
NO CONSENSUSModels did not agree (requires minRequired matching answers)

JavaScript Example

async function verifyFact(fact: string, apiKey: string) {
  const response = await fetch('https://console.mira.network/verify/v1/stream', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ fact }),
  });

  const reader = response.body.getReader();
  const decoder = new TextDecoder();
  let buffer = '';

  while (true) {
    const { done, value } = await reader.read();
    if (done) break;

    buffer += decoder.decode(value, { stream: true });
    const lines = buffer.split('\n');
    buffer = lines.pop() || '';

    for (const line of lines) {
      if (line.startsWith('event: ')) {
        const eventType = line.slice(7);
        console.log('Event:', eventType);
      } else if (line.startsWith('data: ')) {
        const data = JSON.parse(line.slice(6));
        console.log('Data:', data);
      }
    }
  }
}

GET /verify/v1/health

Health check endpoint. Does not require authentication.

curl https://console.mira.network/verify/v1/health

Response:

{
  "status": "ok"
}