Dispatch verified humans for physical tasks with instant claim SLA + webhook proof bundles. Not a marketplace—a deterministic execution layer.
Task claimed in 60 seconds or auto-cancel + full refund. No waiting for bids.
Completion returns machine-parseable evidence: photos + GPS + timestamps + structured fields.
Escrow, refunds, verification tiers, audit trails. Fiat-first, production-grade.
Agent creates task with template, location, deadline, budget
Human claims within SLA window. Webhook fires immediately.
Verified human completes checklist, uploads proof with GPS/timestamp
Webhook delivers proof bundle. Funds release from escrow.
GET /v1/coverage returns confidence + expected claim time instantly. Know before you commit.
// Response
{
"coverage_confidence": 0.82,
"eligible_humans": 12,
"expected_claim_seconds": {
"p50": 18,
"p90": 55
},
"recommended_budget_cents": 4500,
"notes": ["Higher confidence 9am-9pm local"]
}Structured templates with required proof fields. No "anything goes" tasks.
Verify physical conditions with geotagged, timestamped photos
photos[], gps{lat,lng}, timestamp_utc, fields{}Confirm physical presence with periodic check-ins
check_in_photos[], location_pings[], duration_minutes, final_confirmationREST API with webhook confirmations. Idempotency keys required on create.
curl -X POST https://api.humanforhire.net/v1/tasks \
-H "Authorization: Bearer $HFH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"external_task_id": "agent-123",
"template": "PHOTO_VERIFICATION",
"title": "Verify storefront signage",
"instructions": "Take 2 photos: wide shot + close-up of posted hours.",
"location": {
"address": "123 Market St, San Francisco, CA",
"lat": 37.78,
"lng": -122.41
},
"deadline_utc": "2026-02-10T02:00:00Z",
"budget_cents": 4500,
"webhook_url": "https://agent.example.com/hfh-webhook"
}'{
"task_id": "tsk_abc123",
"status": "open",
"claim_by_utc": "2026-02-09T01:23:45Z",
"coverage": {
"coverage_confidence": 0.82,
"expected_claim_seconds": { "p50": 18, "p90": 55 }
}
}{
"event": "task.completed",
"sent_at_utc": "2026-02-09T02:15:00Z",
"task": {
"task_id": "tsk_abc123",
"external_task_id": "agent-123",
"status": "completed"
},
"human": {
"human_id": "h_01",
"display_name": "Sam",
"verification_tier": 2,
"rating": 4.9
},
"proof": {
"photos": [
"https://cdn.humanforhire.net/proof/tsk_abc123_1.jpg",
"https://cdn.humanforhire.net/proof/tsk_abc123_2.jpg"
],
"gps": { "lat": 37.7801, "lng": -122.4103 },
"timestamp_utc": "2026-02-09T02:14:32Z",
"fields": {
"hours_visible": "yes",
"sign_condition": "good"
}
}
}Fetch task status + proof bundle
Cancel task + trigger refund
Check coverage before posting
All webhooks signed with HMAC-SHA256. Retried with exponential backoff up to 24h.
Human claimed the task. Includes human info.
Task done. Includes full proof bundle.
Human couldn't complete. Includes reason.
SLA missed or manual cancel. Auto-refund.
Use HumanForHire directly from Claude, Cursor, or any MCP-compatible agent.
Check coverage + expected claim time before posting
Create task with 60s claim SLA
Get task status + proof bundle
Cancel task + trigger refund
npm install @humanforhire/mcp-server{
"mcpServers": {
"humanforhire": {
"command": "npx",
"args": ["@humanforhire/mcp-server"],
"env": {
"HFH_API_KEY": "your_api_key_here"
}
}
}
}User: "Verify the hours posted at 123 Market St, San Francisco"
Agent calls: humanforhire_create_task({
external_task_id: "verify-hours-001",
template: "PHOTO_VERIFICATION",
title: "Verify posted hours",
instructions: "Take 2 photos of the hours sign",
location: {
address: "123 Market St, San Francisco, CA",
lat: 37.78,
lng: -122.41
},
deadline_utc: "2026-02-09T18:00:00Z",
budget_cents: 3500
})
// Returns task_id, human claims in <60s, proof bundle on completionRequest an API key and start dispatching humans in minutes.
Questions? api@humanforhire.net