1. Register an agent
1-accent-500">curl -X POST https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/agents/register \2 -H -status-success">"Content-Type: application/json" \3 -d -status-success">'{-status-success">"name": -status-success">"my-research-agent"}'2. Submit a verification request
1-accent-500">curl -X POST https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/verify \2 -H -status-success">"Authorization: Bearer 2o_sk_YOUR_KEY_HERE" \3 -H -status-success">"Content-Type: application/json" \4 -d '{5 -status-success">"claim": -status-success">"The FDA approved Ozempic for weight loss in June -status-warning">2021",6 -status-success">"domain": -status-success">"medical",7 -status-success">"budget_cents": -status-warning">5008 }'3. Check the result
1-accent-500">curl https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/verify/REQUEST_ID/result \2 -H -status-success">"Authorization: Bearer 2o_sk_YOUR_KEY_HERE"2O provides a REST API for AI agents to request human verification of claims, facts, and real-world information. Submit a claim, a qualified human expert verifies it, and you get back a structured, quality-scored response.
All requests use JSON. All responses use JSON. All monetary values are in USD cents.
Authenticate your requests by including your API key in the Authorization header.
1Authorization: Bearer 2o_sk_a1b2c3d4e5f6...Your API key is shown only once at registration. Store it securely. If lost, you'll need to register a new agent.
| Tier | Per Minute | Per Day |
|---|---|---|
| Free | 10 | 100 |
Rate limits will increase as we scale. Contact us for higher limits.
2O offers three verification tiers for different accuracy needs:
Single expert verification. Fast and affordable.
From $0.50
Three blinded experts. Weighted consensus verdict with probability distribution.
From $3.00
Three top-rated experts (reputation 80+). Highest accuracy.
From $10.00
Tier is auto-selected based on budget, or specify explicitly with the tier parameter.
1{2 "claim": "The FDA approved Ozempic for weight loss in June 2021",3 "domain": "medical",4 "budget_cents": 500,5 "tier": "consensus"6}After receiving a verification result, you can provide feedback to help improve verifier quality. Feedback affects verifier reputation scores.
1-accent-500">curl -X POST https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/verify/REQUEST_ID/feedback \2 -H -status-success">"Authorization: Bearer 2o_sk_YOUR_KEY" \3 -H -status-success">"Content-Type: application/json" \4 -d -status-success">'{-status-success">"feedback": -status-success">"accepted"}'Options: accepted or disputed (with optional reason string).
All agent-facing API endpoints.
/v1/domainsList all active verification domains. No authentication required.
1{2 "domains": [3 {4 "id": "uuid",5 "slug": "medical",6 "name": "Medical & Health",7 "description": "Medical claims, drug interactions, health advice verification",8 "avg_payout_cents": 500,9 "is_active": true10 }11 ]12}1-accent-500">curl https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/domains/v1/agents/registerRegister a new AI agent. Returns an API key that is shown only once.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | A name for your agent |
| description | string | No | What your agent does |
| wallet_address | string | No | Wallet for future payouts |
1{2 "name": "my-research-agent",3 "description": "Researches medical claims for patient safety"4}1{2 "id": "550e8400-e29b-41d4-a716-446655440000",3 "name": "my-research-agent",4 "api_key": "2o_sk_a1b2c3d4e5f6789012345678901234567890abcdef1234",5 "balance_cents": 500,6 "created_at": "2026-02-24T12:00:00Z"7}1-accent-500">curl -X POST https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/agents/register \2 -H -status-success">"Content-Type: application/json" \3 -d '{4 -status-success">"name": -status-success">"my-research-agent",5 -status-success">"description": -status-success">"Researches medical claims for patient safety"6 }'/v1/verifyAuth RequiredSubmit a claim for human verification. Requires sufficient balance. Creates an escrow transaction.
| Parameter | Type | Required | Description |
|---|---|---|---|
| claim | string | Yes | The claim to verify (max 5000 chars) |
| domain | string | Yes | Domain slug (e.g. "medical", "legal") |
| budget_cents | integer | Yes | Amount to pay for verification (min 50) |
| context | string | No | Additional context for the verifier |
| source_url | string | No | URL where the claim was found |
| urgency | enum | No | "low" (72h), "medium" (24h), "high" (4h), "critical" (1h). Default: "medium" |
| confidence_threshold | number | No | Minimum confidence required (0-1). Default: 0.80 |
| callback_url | string | No | URL to receive webhook when verification completes |
| tier | enum | No | "standard" (1 verifier), "consensus" (3 blinded), "expert_panel" (3 elite). Auto-selected from budget if omitted. |
1{2 "claim": "The FDA approved Ozempic for weight loss in June 2021",3 "domain": "medical",4 "budget_cents": 500,5 "context": "Patient asked their AI health assistant about this drug",6 "source_url": "https:">//example.com/article",7 "urgency": "high",8 "confidence_threshold": 0.85,9 "tier": "consensus",10 "callback_url": "https:">//myagent.dev/webhooks/2o"11}1{2 "id": "550e8400-e29b-41d4-a716-446655440000",3 "status": "pending",4 "estimated_wait_minutes": 60,5 "expires_at": "2026-02-24T16:00:00Z",6 "created_at": "2026-02-24T12:00:00Z"7}1-accent-500">curl -X POST https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/verify \2 -H -status-success">"Authorization: Bearer 2o_sk_YOUR_KEY" \3 -H -status-success">"Content-Type: application/json" \4 -d '{5 -status-success">"claim": -status-success">"The FDA approved Ozempic for weight loss in June -status-warning">2021",6 -status-success">"domain": -status-success">"medical",7 -status-success">"budget_cents": -status-warning">500,8 -status-success">"urgency": -status-success">"high"9 }'/v1/verify/:idAuth RequiredCheck the current status of a verification request. Only returns requests belonging to your agent.
1{2 "id": "550e8400-e29b-41d4-a716-446655440000",3 "status": "assigned",4 "domain": "medical",5 "claim": "The FDA approved Ozempic for weight loss in June 2021",6 "urgency": "high",7 "budget_cents": 500,8 "created_at": "2026-02-24T12:00:00Z",9 "expires_at": "2026-02-24T16:00:00Z",10 "assigned_at": "2026-02-24T12:05:00Z"11}1-accent-500">curl https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/verify/REQUEST_ID \2 -H -status-success">"Authorization: Bearer 2o_sk_YOUR_KEY"/v1/verify/:id/resultAuth RequiredGet the full verification result including verdict, confidence score, explanation, and evidence. Returns status only if not yet completed.
1{2 "id": "550e8400-e29b-41d4-a716-446655440000",3 "status": "completed",4 "verdict": "partially_verified",5 "confidence": 0.82,6 "explanation": "The FDA approved Ozempic (semaglutide) for chronic weight management in adults in June 2021. However, the initial 2017 approval was for type 2 diabetes. The claim conflates the two approvals.",7 "evidence_urls": [8 "https:">//www.fda.gov/news-events/press-announcements/fda-approves-new-drug-treatment-chronic-weight-management",9 "https:">//pubmed.ncbi.nlm.nih.gov/33567185/"10 ],11 "verifier_reputation": 87.50,12 "completed_at": "2026-02-24T12:45:00Z",13 "cost_cents": 50014}1-accent-500">curl https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/verify/REQUEST_ID/result \2 -H -status-success">"Authorization: Bearer 2o_sk_YOUR_KEY"/v1/agent/balanceAuth RequiredCheck your agent's current balance, total spent, and request count.
1{2 "balance_cents": 3500,3 "total_spent_cents": 1500,4 "total_requests": 35}1-accent-500">curl https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/agent/balance \2 -H -status-success">"Authorization: Bearer 2o_sk_YOUR_KEY"/v1/agent/historyAuth RequiredGet a paginated list of your verification requests.
| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | No | Page number (default: 1) |
| limit | integer | No | Results per page (default: 20, max: 100) |
| status | string | No | Filter by status: pending, assigned, completed, expired |
1{2 "requests": [3 {4 "id": "550e8400-e29b-41d4-a716-446655440000",5 "domain": "medical",6 "claim": "The FDA approved Ozempic for weight loss in June 2021",7 "urgency": "high",8 "budget_cents": 500,9 "status": "completed",10 "created_at": "2026-02-24T12:00:00Z",11 "completed_at": "2026-02-24T12:45:00Z"12 }13 ],14 "pagination": {15 "page": 1,16 "limit": 20,17 "total": 1,18 "total_pages": 119 }20}1-accent-500">curl -status-success">"https:-text-tertiary-status-success">">//www.2oapi.xyz/api/v1/agent/history?page=-status-warning">1&limit=-status-warning">20&status=completed" \2 -H -status-success">"Authorization: Bearer 2o_sk_YOUR_KEY"When submitting a verification request, you can provide a callback_url. When the verification is complete, 2O will POST the result to that URL.
1{2 "id": "550e8400-e29b-41d4-a716-446655440000",3 "status": "completed",4 "verdict": "partially_verified",5 "confidence": 0.82,6 "explanation": "The FDA approved Ozempic (semaglutide) for chronic weight management...",7 "evidence_urls": ["https:">//www.fda.gov/..."],8 "verifier_reputation": 87.50,9 "completed_at": "2026-02-24T12:45:00Z",10 "cost_cents": 50011}Webhook delivery is best-effort with up to 3 retries. Always poll GET /v1/verify/:id/result as a fallback.
All errors return a JSON body with error and code fields.
| Code | HTTP | Description |
|---|---|---|
| UNAUTHORIZED | 401 | Missing or invalid API key |
| FORBIDDEN | 403 | Valid key but not authorized for this resource |
| NOT_FOUND | 404 | Resource not found |
| VALIDATION_ERROR | 400 | Invalid request body |
| INSUFFICIENT_BALANCE | 402 | Not enough credits |
| CONFLICT | 409 | State conflict (e.g. task already claimed) |
| EXPIRED | 410 | Request has expired |
| RATE_LIMITED | 429 | Too many requests |
| INTERNAL_ERROR | 500 | Server error |
1{2 "error": "Insufficient balance. Required: 500 cents. Available: 200 cents.",3 "code": "INSUFFICIENT_BALANCE"4}1from two_sdk import TwoClient23client = TwoClient(api_key=class="text-status-success">"2o_sk_...")4result = client.verify(5 class="text-status-success">"The FDA approved Ozempic for weight loss in June class="text-status-warning">2021",6 domain=class="text-status-success">"medical",7 budget_cents=class="text-status-warning">500,8)9print(result.verdict) class=class="text-status-success">"text-text-tertiary"># class="text-status-success">"partially_verified"10print(result.confidence) class=class="text-status-success">"text-text-tertiary"># class="text-status-warning">0.8211print(result.explanation) class=class="text-status-success">"text-text-tertiary"># class="text-status-success">"The FDA approved..."1import { TwoClient } from "@2o/sdk";23const client = new TwoClient("2o_sk_...");4const result = await client.verify({5 claim: "The FDA approved Ozempic for weight loss in June 2021",6 domain: "medical",7 budgetCents: 500,8});9console.log(result.verdict); "text-text-tertiary">// "partially_verified"10console.log(result.confidence); "text-text-tertiary">// 0.82Connect 2O directly to your agent via Model Context Protocol. Your agent will be able to call verify, check_status, and get_result as native tools.
Start the standalone MCP server:
1-accent-500">npm run mcpThen connect your MCP client to:
1http:-status-success">"text-text-tertiary">//localhost:-status-warning">3001/mcp?apiKey=2o_sk_YOUR_KEYOr add to your Claude Code / MCP settings:
1{2 "mcpServers": {3 "2o": {4 "url": "http:">//localhost:3001/mcp?apiKey=2o_sk_YOUR_KEY"5 }6 }7}See Integration Guides for detailed setup with OpenClaw, Claude Code, LangChain, and more.