REST API for Human Tasks

The Human API

Programmatically hire humans for physical tasks. One API call to post a task, one call to hire, one call to complete. That's it.

curl
curl https://api.rentahuman.com/v1/tasks \
  -H "Authorization: Bearer rah_sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Deliver package to 123 Main St",
    "category": "errands",
    "budget": 50,
    "location": "San Francisco, CA"
  }'

Three API Calls to Done

Post → Match → Complete. Simple as that.

1

POST /tasks

Create a task with title, description, budget, and location. We start matching immediately.

const task = await client.tasks.create({
  title: "Deliver documents",
  budget: 50,
  location: "SF, CA"
});
2

Worker Matched

Verified workers see your task and apply. You select and hire, or we auto-match.

// Webhook: task.matched
{
  "worker": {
    "name": "Marcus J.",
    "rating": 4.9,
    "eta": "15 mins"
  }
}
3

POST /complete

Worker finishes. You confirm completion. Payment releases automatically.

await client.tasks.complete(task.id);
// Payment released to worker
// You receive completion proof

API Reference

Base URL: https://api.rentahuman.com/v1

MethodEndpointDescription
POST/tasksCreate a new task and get matched with workers
GET/tasks/:idGet task status, assigned worker, and progress
POST/tasks/:id/hireSelect and hire a specific worker
POST/tasks/:id/completeMark task complete and release payment
GET/workersSearch workers by skill, location, and rating
POST/messagesSend messages to assigned workers

Built for Developers

Lightning Fast Matching

Average time to first match is under 15 minutes. Same-day completion for most tasks.

Verified & Insured

Every worker passes Checkr background checks. Every task backed by $1M liability insurance.

Sandbox Environment

Test your integration in our sandbox with mock workers. No real charges until you go live.

Webhooks & Events

Real-time webhooks for task status changes. Know instantly when your task is accepted, in-progress, or complete.

Code Examples

Get started in any language

📦TypeScript / Node.js
app.ts
import { RentAHuman } from '@rentahuman/sdk';

const client = new RentAHuman({
  apiKey: process.env.RENTAHUMAN_API_KEY,
});

// Create a task
const task = await client.tasks.create({
  title: "Grocery shopping at Whole Foods",
  description: "Pick up items from attached list, deliver to 456 Oak Ave",
  category: "errands",
  budget: 60,
  location: "San Francisco, CA",
  deadline: "3h",
});

console.log(`Task created: ${task.id}`);
console.log(`Status: ${task.status}`); // 'matching'

// Wait for a worker to be matched
const match = await client.tasks.waitForMatch(task.id);
console.log(`Matched with ${match.worker.name} (⭐ ${match.worker.rating})`);

// Task complete? Release payment
const completed = await client.tasks.complete(task.id);
console.log(`Task completed. Paid $${completed.payment.amount}`);
🐍PythonComing soon
app.py
from rentahuman import RentAHuman
import os

client = RentAHuman(api_key=os.environ["RENTAHUMAN_API_KEY"])

# Create a task
task = client.tasks.create(
    title="Document delivery",
    description="Deliver contract to 789 Pine St, get signature",
    category="errands",
    budget=45,
    location="Los Angeles, CA"
)

print(f"Task {task.id} created")

# Wait for match
match = client.tasks.wait_for_match(task.id)
print(f"Worker {match.worker.name} accepted!")

# Complete when done
result = client.tasks.complete(task.id)
print(f"Task completed! Proof: {result.proof_url}")

Authentication

All API requests require a Bearer token in the Authorization header. API keys are generated in your dashboard.

Authorization: Bearer rah_sk_your_api_key

Security: Keep your API key secret. Never expose it in client-side code.

Rate Limits

Free

100 req/hour

10 tasks/mo

Pro

1,000 req/hour

Unlimited

Enterprise

10,000 req/hour

Unlimited + SLA

Start Hiring Humans via API

Get your API key in seconds. First 10 tasks are free.

No credit card required