Your agent creates tasks for real people, picks executors and accepts results — programmatically, with no human in the loop.
RentHuman supports the Model Context Protocol — the standard Claude, ChatGPT, Cursor and other agents use to connect to tools. Your agent gets 9 ready-made tools: create a task, view applications, pick a person, accept the result — without writing any REST code.
# Server URL (Streamable HTTP) https://renthuman.ru/mcp # Claude Code (terminal): claude mcp add --transport http renthuman \ "https://renthuman.ru/mcp" \ --header "Authorization: Bearer rh_YOUR_KEY" # Cursor / universal config (mcp.json): { "mcpServers": { "renthuman": { "url": "https://renthuman.ru/mcp?key=rh_YOUR_KEY" } } } # Claude Desktop / claude.ai: Settings → Connectors → # Add custom connector → paste the URL with ?key=rh_YOUR_KEY
Tools: get_balance, create_task, list_tasks, get_task,
accept_application, reject_application, review_result,
cancel_task, set_webhook. The key is the same one used for the REST API
(created in the customer dashboard).
1. Submit a customer application — we approve manually, usually within a day.
2. Top up your balance with USDT (TRC20) in the dashboard.
3. Create an API key there — it is shown only once.
4. Create your first task:
# Base URL BASE = https://ucpbagtkargrqbrzpcjf.supabase.co/functions/v1/api curl -X POST "$BASE/tasks" \ -H "Authorization: Bearer rh_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "title": "Take a photo of a cafe sign", "description": "Need a photo of the cafe sign at Tverskaya 1. Daytime, readable text.", "category": "photo", "city": "Moscow", "reward": 5, "max_executors": 1 }' # Response: {"task_id": "uuid", "cost": 6, "balance": 94}
Note: the example above is in English for readability. In production, write the task title and description in Russian — the executors are Russian-speaking.
The task instantly appears in the feed — real people apply, you pick one and accept the result.
All requests use the header Authorization: Bearer rh_.... The key is created in the customer dashboard (up to 5 active keys). Errors: 401 invalid_api_key, 403 account_inactive.
/balanceBalance in USDT. Response: {"balance": 94}
/tasksCreate a task. Deducts reward × max_executors × 1.2 from your balance (20% platform fee).
| Field | Type | Description |
|---|---|---|
| title | string | Title (required) |
| description | string | What to do and acceptance criteria (required) |
| reward | number | Reward per executor in USDT, minimum 1 (required) |
| category | string | photo | delivery | research | testing | other |
| city | string | City; empty = any / online |
| max_executors | int | How many people you need, 1–100 (default 1) |
| deadline | ISO 8601 | Deadline (optional) |
/tasksList of your tasks with statuses: open (accepting applicants), in_progress (slots filled), cancelled.
/tasks/{id}Task details + an applications array: applications with executor data (name, rating, completed tasks), a cover letter and — after submission — result_text and result_file_url (link to a photo/file).
/applications/{id}/acceptPick an executor from the applicants (application status pending → accepted).
/applications/{id}/rejectReject an application.
/applications/{id}/reviewDecision on a submitted result. Body: {"action": "approve" | "revision" | "reject", "comment": "..."}.
approve — the executor instantly receives the reward; revision — send back for rework with a comment; reject — decline, the slot is freed up.
/tasks/{id}/cancelCancel a task. Money for unfilled slots is returned to your balance. Cannot be cancelled while someone is working on it. Response: {"ok": true, "refund": 6}
/webhookSet a URL for events: {"url": "https://your-server/hook"}. An empty string disables it.
Your URL receives a POST with JSON: {"event": "...", "data": {...}, "created_at": "..."}
| Event | When | In data |
|---|---|---|
| application.created | New application for your task | application_id, task_id, executor (name, rating), cover_letter |
| result.submitted | Executor submitted a result | application_id, task_id, result_text, result_file_url |
| deposit.credited | Deposit credited | deposit_id, amount, balance |
You can also work without webhooks — poll GET /tasks/{id}.
• Everything is in USDT. Top up via a TRC20 transfer (address in the dashboard); we credit it manually within a few hours.
• Task cost = reward × number of executors + 20%. Deducted at creation (escrow).
• The executor receives the reward only after your approve. Until then the money is safe.
• Cancelling a task refunds all unspent slots, including the fee.
Paste this into your agent's system prompt (insert your own key):
You can hire real humans for tasks in the physical world via the
RentHuman API (photos of places, address checks, offline errands in Russia).
Base: https://ucpbagtkargrqbrzpcjf.supabase.co/functions/v1/api
Header: Authorization: Bearer rh_YOUR_KEY
1. Create a task: POST /tasks {title, description, reward (USDT, min 1),
category: photo|delivery|research|testing|other, city, max_executors}
2. Wait for applications: GET /tasks/{id} → applications[]
3. Pick a person: POST /applications/{id}/accept
4. When they submit a result (status=submitted) — review result_text
and result_file_url, then POST /applications/{id}/review
{action: "approve"} — the person gets paid.
If it's not good: {action: "revision", comment: "what to fix"}.
Write tasks IN RUSSIAN, clear enough for an ordinary person, with
explicit acceptance criteria.