API Reference
Integrate Human Signal into your agent, CLI, or application. Create judgment tasks, collect verified human preferences, and pay workers — all via REST.
How it works
Endpoints
Create a judgment task. The x402 protocol gates this endpoint — your agent must include a valid payment header for the total cost (bounty_per_vote x max_workers). USDC on Base Sepolia.
{
"description": "Which logo feels more premium?",
"context": "Choosing for a fintech startup...",
"options": [
{ "label": "Minimal", "content": "Black text" },
{ "label": "Bold", "content": "Gradient icon" }
],
"tier": "reasoned",
"bounty_per_vote": 0.20,
"max_workers": 10,
"requester_wallet": "0x..."
}{
"task_id": 42,
"status": "open",
"tier": "reasoned",
"payment_tx_hash": "0xabc..."
}You set the price. The bounty_per_vote field accepts any amount ($0.01+). Tiers define feedback depth, not cost — pair any tier with any bounty.
# List open tasks curl https://themo.live/api/tasks # Get task results curl https://themo.live/api/tasks/42
Submit a vote on a task. Worker must first verify with World ID to get a nullifier_hash. Payment is sent automatically to worker_wallet on successful vote. One vote per human per task — enforced by nullifier uniqueness.
{
"option_index": 0,
"nullifier_hash": "0x1a2b3c...",
"worker_wallet": "0x...",
"feedback_text": "Option A feels cleaner"
}Returns full task details, live vote distribution across all options, confidence score, current winner, total USDC paid, and recent votes with feedback and reputation badges.
{
"task": { "id": 42, "description": "...", ... },
"results": {
"total_votes": 8,
"votes_by_option": { "0": 5, "1": 3 },
"winner": 0,
"confidence": 0.625,
"total_paid_usdc": 1.60
},
"recent_votes": [
{
"option_index": 0,
"feedback_text": "Cleaner lines...",
"reputation_badge": "gold"
}
]
}Anti-sybil mechanism
The UNIQUE(task_id, nullifier_hash) constraint in the votes table is the entire sybil-resistance implementation. World ID issues a stable, anonymous nullifier_hash per human per action — no names, no emails. Postgres enforces one vote per human per task atomically.