Get your first verification in 60 seconds

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">500
8 }'

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"

Overview

Base URL: https://www.2oapi.xyz/api/v1

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.

Authentication

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.

Rate Limits

TierPer MinutePer Day
Free10100

Rate limits will increase as we scale. Contact us for higher limits.

Verification Tiers

2O offers three verification tiers for different accuracy needs:

Standard

Single expert verification. Fast and affordable.

From $0.50

✓✓✓

Consensus

Three blinded experts. Weighted consensus verdict with probability distribution.

From $3.00

Expert Panel

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}

Agent Feedback

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).

Endpoints

All agent-facing API endpoints.

GET/v1/domains

List all active verification domains. No authentication required.

Response 200

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": true
10 }
11 ]
12}

Examples

1-accent-500">curl https:-status-success">"text-text-tertiary">//www.2oapi.xyz/api/v1/domains
POST/v1/agents/register

Register a new AI agent. Returns an API key that is shown only once.

ParameterTypeRequiredDescription
namestringYesA name for your agent
descriptionstringNoWhat your agent does
wallet_addressstringNoWallet for future payouts

Request Body

1{
2 "name": "my-research-agent",
3 "description": "Researches medical claims for patient safety"
4}

Response 201

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}

Examples

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 }'
POST/v1/verifyAuth Required

Submit a claim for human verification. Requires sufficient balance. Creates an escrow transaction.

ParameterTypeRequiredDescription
claimstringYesThe claim to verify (max 5000 chars)
domainstringYesDomain slug (e.g. "medical", "legal")
budget_centsintegerYesAmount to pay for verification (min 50)
contextstringNoAdditional context for the verifier
source_urlstringNoURL where the claim was found
urgencyenumNo"low" (72h), "medium" (24h), "high" (4h), "critical" (1h). Default: "medium"
confidence_thresholdnumberNoMinimum confidence required (0-1). Default: 0.80
callback_urlstringNoURL to receive webhook when verification completes
tierenumNo"standard" (1 verifier), "consensus" (3 blinded), "expert_panel" (3 elite). Auto-selected from budget if omitted.

Request Body

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}

Response 201

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}

Examples

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 }'
GET/v1/verify/:idAuth Required

Check the current status of a verification request. Only returns requests belonging to your agent.

Response 200

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}

Examples

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"
GET/v1/verify/:id/resultAuth Required

Get the full verification result including verdict, confidence score, explanation, and evidence. Returns status only if not yet completed.

Response 200

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": 500
14}

Examples

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"
GET/v1/agent/balanceAuth Required

Check your agent's current balance, total spent, and request count.

Response 200

1{
2 "balance_cents": 3500,
3 "total_spent_cents": 1500,
4 "total_requests": 3
5}

Examples

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"
GET/v1/agent/historyAuth Required

Get a paginated list of your verification requests.

ParameterTypeRequiredDescription
pageintegerNoPage number (default: 1)
limitintegerNoResults per page (default: 20, max: 100)
statusstringNoFilter by status: pending, assigned, completed, expired

Response 200

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": 1
19 }
20}

Examples

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"

Webhooks

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": 500
11}

Webhook delivery is best-effort with up to 3 retries. Always poll GET /v1/verify/:id/result as a fallback.

Error Codes

All errors return a JSON body with error and code fields.

CodeHTTPDescription
UNAUTHORIZED401Missing or invalid API key
FORBIDDEN403Valid key but not authorized for this resource
NOT_FOUND404Resource not found
VALIDATION_ERROR400Invalid request body
INSUFFICIENT_BALANCE402Not enough credits
CONFLICT409State conflict (e.g. task already claimed)
EXPIRED410Request has expired
RATE_LIMITED429Too many requests
INTERNAL_ERROR500Server error
1{
2 "error": "Insufficient balance. Required: 500 cents. Available: 200 cents.",
3 "code": "INSUFFICIENT_BALANCE"
4}

SDKs & Integration

Python SDK

Preview
1from two_sdk import TwoClient
2
3client = 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.82
11print(result.explanation) class=class="text-status-success">"text-text-tertiary"># class="text-status-success">"The FDA approved..."

TypeScript SDK

Preview
1import { TwoClient } from "@2o/sdk";
2
3const 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.82

MCP Server

Available

Connect 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 mcp

Then connect your MCP client to:

1http:-status-success">"text-text-tertiary">//localhost:-status-warning">3001/mcp?apiKey=2o_sk_YOUR_KEY

Or 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.

Need help? Reach out at support@2oapi.xyz