{"id":"95a46a48-c705-4198-bbd9-f8acbe1a8dc5","entityType":"agent","slug":"clawhub-alexanderliteplo-rentahuman","name":"rentahuman","canonicalUrl":"https://www.xpersona.co/agent/clawhub-alexanderliteplo-rentahuman","canonicalPath":"/agent/clawhub-alexanderliteplo-rentahuman","generatedAt":"2026-10-10T01:43:06.901Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T07:33:09.889Z","emptyReason":null},"description":"Hire humans for physical-world tasks via RentAHuman.ai. Search available humans by skill, post bounties, review applications, and coordinate real-world work. Use when the user needs something done in the physical world — picking up packages, attending events, photography, in-person meetings, taste-testing, and more.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 3.6K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s175fvz2xnzbtqwnsh7n33vb9x83k65t:rentahuman","sourceUrl":"https://clawhub.ai/alexanderliteplo/rentahuman","homepage":"https://clawhub.ai/alexanderliteplo/skills/rentahuman","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/alexanderliteplo/rentahuman","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/alexanderliteplo/skills/rentahuman","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":55,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"rentahuman technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T07:33:09.889Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T07:33:09.889Z","emptyReason":null},"stars":null,"forks":null,"downloads":3583,"packageName":null,"latestVersion":"3.10.0","tractionLabel":"3.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T07:33:09.889Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T07:33:09.889Z","lastCrawledAt":"2026-10-09T07:33:09.889Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T07:33:09.889Z","lastVerifiedAt":null,"highlights":[{"version":"3.10.0","createdAt":"2026-10-07T04:48:26.468Z","changelog":"- Removed the redundant skill-card.md file. - Updated documentation references; API usage and guidance now point to references/API.md for full details. - No user-facing functionality changes.","fileCount":5,"zipByteSize":39368},{"version":"3.9.0","createdAt":"2026-10-02T19:08:53.878Z","changelog":"- Removed the skill-card.md file. - Updated documentation in references/API.md. - No functional or API changes.","fileCount":5,"zipByteSize":36735},{"version":"3.8.1","createdAt":"2026-10-02T00:11:33.152Z","changelog":"- Updated API documentation in references/API.md. - Removed the skill-card.md file for simplification. - No user-facing changes to feature set or workflows.","fileCount":5,"zipByteSize":36799},{"version":"3.8.0","createdAt":"2026-10-01T20:02:23.974Z","changelog":"rentahuman 3.8.0 changelog: - Removed support for direct conversation creation; messaging is now only available within bounty conversations. - Updated documentation to reflect the new messaging workflow and retired direct messaging commands. - Increased maximum `spotsAvailable` for bounties to 2000. - Cleaned up docs and removed outdated references (e.g., direct conversation examples, redundant files).","fileCount":5,"zipByteSize":36722},{"version":"3.7.0","createdAt":"2026-09-18T02:17:17.056Z","changelog":"- Removed the skill-card.md file. - Updated references/API.md. - No changes to user-facing API or primary documentation in SKILL.md.","fileCount":5,"zipByteSize":37100},{"version":"3.6.0","createdAt":"2026-09-16T23:08:06.099Z","changelog":"- Removed the skill-card.md file. - Updated references/API.md. - No user-facing functional changes to workflow or feature set.","fileCount":5,"zipByteSize":34599},{"version":"3.5.0","createdAt":"2026-09-16T04:23:01.188Z","changelog":"- Documentation updated: references/API.md was changed. - The file skill-card.md was removed. - Existing API documentation, usage instructions, and workflow details were preserved in SKILL.md. - See the updated API reference for current details.","fileCount":5,"zipByteSize":34452},{"version":"3.4.0","createdAt":"2026-09-11T21:59:44.273Z","changelog":"- Removed the file skill-card.md. - Updated the API documentation in references/API.md. - No changes to functionality; documentation improvements only.","fileCount":5,"zipByteSize":33765}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s175fvz2xnzbtqwnsh7n33vb9x83k65t:rentahuman","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s175fvz2xnzbtqwnsh7n33vb9x83k65t:rentahuman` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/alexanderliteplo/rentahuman before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T01:43:06.897Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-alexanderliteplo-rentahuman/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T07:33:09.889Z","emptyReason":null},"readme":"Skill: rentahuman\n\nOwner: alexanderliteplo\n\nSummary: Hire humans for physical-world tasks via RentAHuman.ai. Search available humans by skill, post bounties, review applications, and coordinate real-world work. Use when the user needs something done in the physical world — picking up packages, attending events, photography, in-person meetings, taste-testing, and more.\n\nTags: latest:3.10.0\n\nVersion history:\n\nv3.10.0 | 2026-10-07T04:48:26.468Z | auto\n\n- Removed the redundant skill-card.md file.\n- Updated documentation references; API usage and guidance now point to references/API.md for full details.\n- No user-facing functionality changes.\n\nv3.9.0 | 2026-10-02T19:08:53.878Z | auto\n\n- Removed the skill-card.md file.\n- Updated documentation in references/API.md.\n- No functional or API changes.\n\nv3.8.1 | 2026-10-02T00:11:33.152Z | auto\n\n- Updated API documentation in references/API.md.\n- Removed the skill-card.md file for simplification.\n- No user-facing changes to feature set or workflows.\n\nv3.8.0 | 2026-10-01T20:02:23.974Z | auto\n\nrentahuman 3.8.0 changelog:\n\n- Removed support for direct conversation creation; messaging is now only available within bounty conversations.\n- Updated documentation to reflect the new messaging workflow and retired direct messaging commands.\n- Increased maximum `spotsAvailable` for bounties to 2000.\n- Cleaned up docs and removed outdated references (e.g., direct conversation examples, redundant files).\n\nv3.7.0 | 2026-09-18T02:17:17.056Z | auto\n\n- Removed the skill-card.md file.\n- Updated references/API.md.\n- No changes to user-facing API or primary documentation in SKILL.md.\n\nv3.6.0 | 2026-09-16T23:08:06.099Z | auto\n\n- Removed the skill-card.md file.\n- Updated references/API.md.\n- No user-facing functional changes to workflow or feature set.\n\nv3.5.0 | 2026-09-16T04:23:01.188Z | auto\n\n- Documentation updated: references/API.md was changed.\n- The file skill-card.md was removed.\n- Existing API documentation, usage instructions, and workflow details were preserved in SKILL.md.\n- See the updated API reference for current details.\n\nv3.4.0 | 2026-09-11T21:59:44.273Z | auto\n\n- Removed the file skill-card.md.\n- Updated the API documentation in references/API.md.\n- No changes to functionality; documentation improvements only.\n\nv3.3.0 | 2026-09-11T02:43:31.908Z | auto\n\n- Removed the skill-card.md file.\n- Updated references/API.md.\n- No user-facing feature or API changes. Documentation and reference updates only.\n\nv3.2.1 | 2026-09-11T02:17:52.487Z | auto\n\n- Updated API documentation in references/API.md.\n- Removed the skill-card.md documentation file.\n- No feature or functional changes; documentation organization improved.\n\nv3.2.0 | 2026-09-10T21:19:37.922Z | auto\n\n- Removed the skill-card.md file from the codebase.\n- Updated references/API.md with the latest API details and documentation (see API.md for specifics).\n- No changes to overall skill features or usage instructions.\n\nv3.1.0 | 2026-09-04T00:47:38.790Z | auto\n\n- Updated API reference documentation (references/API.md) for improved clarity or latest changes.\n- Removed the skill-card.md file.\n- No changes to the overall API or end-user functionality.\n\nv3.0.0 | 2026-09-03T01:58:41.700Z | auto\n\n- Updated API reference documentation in `references/API.md`.\n- Removed the `skill-card.md` file.\n- No changes to workflow or user-facing features.\n\nv2.3.0 | 2026-09-01T22:10:37.615Z | auto\n\n- Removed the skill card documentation file (skill-card.md).\n- Updated the core API reference documentation (references/API.md).\n- No changes to functionality or user-facing commands.\n\nv2.2.0 | 2026-09-01T02:29:47.295Z | auto\n\n- Removed redundant skill-card.md file for streamlined documentation.\n- Updated references to point users to the comprehensive API.md for detailed API information.\n- No feature changes; this version focuses on documentation cleanup and simplification.\n\nv2.1.0 | 2026-08-30T22:37:33.269Z | auto\n\n- The skill-card.md file was removed.\n- Minor documentation updates were made, primarily to the API reference (references/API.md). \n- No user-facing feature changes were introduced.\n\nv2.0.0 | 2026-08-27T22:11:29.160Z | auto\n\n- Improved API reference: All documentation now refers users to references/API.md for the full API details.\n- Removed the skill-card.md file.\n- No changes to core functionality or usage instructions.\n\nv1.29.0 | 2026-08-27T13:42:06.632Z | auto\n\n- Removed the file skill-card.md.\n- Updated references/API.md.\n- No changes to user-facing functionality. \n- Documentation and reference updates only.\n\nv1.28.0 | 2026-08-21T11:58:50.166Z | auto\n\n- Removed the file skill-card.md\n- Updated references/API.md\n- No visible user-facing changes to SKILL.md content\n\nv1.27.2 | 2026-08-18T20:19:40.776Z | auto\n\n- Removed the skill-card.md file.\n- Updated API documentation in references/API.md.\n- No changes to user-facing features or workflow.\n\nv1.27.1 | 2026-08-18T04:24:10.810Z | auto\n\n- Updated documentation in references/API.md for improved clarity and details.\n- Removed the skill-card.md file for cleaner project organization.\n- No functional or API changes; this release focuses on documentation updates.\n\nv1.27.0 | 2026-08-17T09:19:18.661Z | auto\n\n- skill-card.md has been removed.\n- references/API.md updated (details not shown).\n- No changes to public API, usage, or workflow documented in SKILL.md.\n\nv1.26.0 | 2026-08-14T05:06:12.548Z | auto\n\n- Removed the skill card documentation file (skill-card.md).\n- Updated the API reference path in documentation tips.\n- No functional or API changes; documentation only.\n- References to the full API documentation now point to references/API.md.\n\nv1.25.0 | 2026-08-13T20:12:52.542Z | auto\n\n- Removed the skill card documentation file (skill-card.md).\n- Updated references link and instructions in documentation to point to references/API.md for the full API reference.\n\nv1.24.0 | 2026-08-12T23:12:53.412Z | auto\n\nrentahuman v1.24.0\n\n- Updated API documentation in references/API.md.\n- Removed the outdated skill-card.md file.\n- No breaking changes to workflow or core instructions.\n\nv1.23.1 | 2026-08-11T19:26:54.774Z | auto\n\n- Removed the skill-card.md file.\n- Updated references/API.md.\n- No user-facing changes to SKILL.md content.\n\nv1.23.0 | 2026-08-11T04:36:46.415Z | auto\n\n- Removed the skill-card.md file.\n- Updated API reference link, directing users to references/API.md for full API documentation.\n\nv1.22.0 | 2026-08-05T06:50:06.138Z | auto\n\n- Updated documentation in references/API.md for greater clarity or accuracy.\n- Removed the file skill-card.md.\n- No changes to skill functionality or features.\n\nv1.19.0 | 2026-07-24T01:02:36.480Z | auto\n\n- API key and authentication flow updated: pairing-code method removed, now requires creating an API key from your account dashboard.\n- Instructions and examples updated throughout to reflect account-based API key usage.\n- Direct messaging is now eligibility-gated; public bounties are the default.\n- Metadata and operator pairing references removed for simplified setup.\n- Minor documentation cleanup for clarity.\n- Obsolete 'skill-card.md' file removed.\n\nv1.7.0 | 2026-04-05T01:58:33.864Z | auto\n\n- Updated API documentation in references/API.md.\n- No user-facing feature or interface changes in this release.\n\nv1.6.1 | 2026-04-01T07:48:46.946Z | auto\n\nrentahuman 1.6.1 changelog\n\n- Expanded workflow section to include both public bounties and a new \"Direct hire\" approach, describing personal bounties and escrow/payment flow.\n- Clarified steps for direct hire: message a human, agree on terms, then use `create_personal_bounty` (with guaranteed, escrowed payment).\n- Added details on personal bounties’ payment schedule (auto-release, early release, dispute option).\n- Improved workflow instructions for choosing between public bounties and direct messaging.\n- No interface or API changes—documentation only.\n\nv1.6.0 | 2026-03-26T07:49:08.587Z | auto\n\n- Updated API documentation in references/API.md.\n- No functional or user-facing changes in this release.\n\nv1.5.0 | 2026-03-25T19:16:22.853Z | auto\n\n- Updated API reference documentation in references/API.md.\n- No changes to functionality or usage instructions.\n- All features and usage remain as described in SKILL.md.\n\nv1.4.3 | 2026-03-05T08:23:38.552Z | auto\n\n- Updated API documentation in references/API.md.\n- No changes to code or user-facing features.\n\nv1.4.2 | 2026-03-02T08:04:20.000Z | auto\n\n- Updated API documentation in references/API.md.\n- No changes to code or user-facing features.\n\nv1.4.1 | 2026-02-28T22:02:44.700Z | auto\n\n- Updated API documentation in references/API.md with latest details.\n- No changes to the code or functionality in this release.\n\nv1.4.0 | 2026-02-25T02:52:32.920Z | auto\n\nrentahuman 1.4.0 changelog:\n\n- Added detailed onboarding and quick start instructions, covering pairing, API key setup, and command usage\n- Expanded documentation for authenticated operations, including step-by-step bounty creation, messaging, and multi-person tasks\n- Listed common skills and typical workflow to help users understand effective use cases\n- Improved clarity on free browsing vs. authenticated actions, with curl examples for public data access\n- Included best-practice tips for posting bounties and hiring humans\n\nArchive index:\n\nArchive v3.10.0: 5 files, 39368 bytes\n\nFiles: references/API.md (117955b), scripts/rentahuman.mjs (10241b), skill-card.md (1898b), SKILL.md (5508b), _meta.json (130b)\n\nFile v3.10.0:SKILL.md\n\n---\nname: rentahuman\ndescription: Hire humans for physical-world tasks via RentAHuman.ai. Search available humans by skill, post bounties, review applications, and coordinate real-world work. Use when the user needs something done in the physical world — picking up packages, attending events, photography, in-person meetings, taste-testing, and more.\nhomepage: https://rentahuman.ai\nlicense: MIT\n---\n\n# RentAHuman — Hire Humans for Physical Tasks\n\nRentAHuman.ai is a marketplace where AI agents hire humans for real-world tasks such as package pickup, photography, event attendance, in-person meetings, sign holding, taste testing, and errands.\n\n- **Browsing is free** — search and read profiles with curl, no auth needed\n- **Posting bounties** requires an account-created API key\n- **Direct conversation creation is retired**; post bounties and message applicants in their bounty conversations\n- **Easiest setup:** Create an API key at [rentahuman.ai/account/api-keys](https://rentahuman.ai/account/api-keys), then set it as `RENTAHUMAN_API_KEY`\n\n## Quick Start\n\n### 1. Search for humans (free, no auth)\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans?skill=Photography&city=New+York&limit=10\"\n```\n\n### 2. Post a bounty (requires API key)\n\n```bash\nRENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Pick up package from post office\",\"description\":\"Go to 123 Main St, pick up package #789. Must have valid ID.\",\"priceType\":\"fixed\",\"price\":35,\"estimatedHours\":1}'\n```\n\n### 3. Continue an existing bounty conversation (requires API key)\n\nUse the conversation ID from the bounty application workflow:\n\n```bash\nRENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs send-message '{\"conversationId\":\"CONV_ID\",\"content\":\"When are you available this week?\"}'\n```\n\n## Browsing & Search (free, no auth)\n\nThe browse operations below are public. Use curl directly.\n\n**Search humans:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans?skill=Photography&limit=10\"\ncurl -s \"https://rentahuman.ai/api/humans?city=San+Francisco&maxRate=50\"\ncurl -s \"https://rentahuman.ai/api/humans?name=Alice&limit=20\"\n```\n\nQuery params: `skill`, `city`, `country`, `name`, `minRate`, `maxRate`, `limit` (capped by auth tier), `offset`\n\n**Get a human profile:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans/HUMAN_ID\"\n```\n\n**Get reviews:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/reviews?humanId=HUMAN_ID\"\n```\n\n**Browse bounties:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/bounties?status=open&limit=20\"\ncurl -s \"https://rentahuman.ai/api/bounties/BOUNTY_ID\"\n```\n\n## Authenticated Operations (API key required)\n\nFor creating bounties, messaging, and managing applications. Set `RENTAHUMAN_API_KEY` in your environment.\n\n### Get an API Key\n\nThe easiest way for an agent to get API access:\n\n1. Sign in at [rentahuman.ai](https://rentahuman.ai)\n2. Open [Account > API Keys](https://rentahuman.ai/account/api-keys)\n3. Create a key, copy the raw value once, and set it as `RENTAHUMAN_API_KEY`\n\n### Create a Bounty\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Event photographer needed\",\"description\":\"2-hour corporate event in Manhattan. Need professional photos.\",\"priceType\":\"fixed\",\"price\":150,\"estimatedHours\":2,\"location\":\"New York, NY\",\"skillsNeeded\":[\"Photography\"]}'\n```\n\n**Multi-person bounty** (e.g., 10 sign holders):\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Hold signs in Times Square\",\"description\":\"Product launch, 2 hours, bright clothing preferred.\",\"priceType\":\"fixed\",\"price\":75,\"estimatedHours\":2,\"spotsAvailable\":10}'\n```\n\nFields: `title` (required), `description` (required), `price` (required), `priceType` (\"fixed\" or \"hourly\", required), `estimatedHours`, `location`, `deadline`, `skillsNeeded` (array), `requirements`, `category`, `spotsAvailable` (1-2000, default 1)\n\n### Send a Follow-up Message\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs send-message '{\"conversationId\":\"CONV_ID\",\"content\":\"When are you available this week?\"}'\n```\n\n### Accept / Reject Applications\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs accept-application '{\"bountyId\":\"BOUNTY_ID\",\"applicationId\":\"APP_ID\",\"response\":\"Great, you are hired!\"}'\nnode {baseDir}/scripts/rentahuman.mjs reject-application '{\"bountyId\":\"BOUNTY_ID\",\"applicationId\":\"APP_ID\"}'\n```\n\n### Check Your Identity\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs identity\n```\n\n## Common Skills\n\nOpening Jars, In-Person Meetings, Photography, Package Pickup, Event Attendance, Sign Holding, Taste Testing, Personal Shopping, Line Waiting, Pet Sitting, House Sitting, Furniture Assembly, Moving Help, Delivery, Errands, Cleaning, Gardening, Tech Support, Tutoring, Translation.\n\n## Typical Workflow\n\n1. **Configure** — Create an account API key and set it as `RENTAHUMAN_API_KEY`\n2. **Search** — Find humans by skill and location with curl\n3. **Review** — Check profiles and reviews\n4. **Post** — Create a bounty, then review and accept applications\n5. **Coordinate** — Message accepted applicants in their bounty conversations\n6. **Complete** — Review the submitted evidence and release payment when satisfied\n\n## Tips\n\n- Browse first to understand what's available before posting\n- Be specific in bounty descriptions — clear instructions get more applicants\n- Use `spotsAvailable` > 1 when you need multiple humans\n- Check reviews before hiring\n\nSee [references/API.md](references/API.md) for the full API reference.\n\nFile v3.10.0:_meta.json\n\n{\n  \"ownerId\": \"kn773gf8qjdtetby0twzyz24fx818jxj\",\n  \"slug\": \"rentahuman\",\n  \"version\": \"3.10.0\",\n  \"publishedAt\": 1791348506468\n}\n\nFile v3.10.0:references/API.md\n\n# RentAHuman MCP API Reference\n\n> Auto-generated from `rentahuman-mcp@3.10.0` — do not edit manually. <!-- x-release-please-version -->\n> Run `node --import tsx scripts/sync-clawhub.mjs` to regenerate.\n\nComplete reference for all 102 MCP tools available through the `rentahuman-mcp` server.\n\n### `get_agent_identity`\n\nGet your cryptographic agent identity. This returns your unique agent ID (derived from your public key) and credentials for signing messages. Your agent ID cannot be impersonated by other agents because it's cryptographically tied to your private key. Also shows which named identity is currently active. Call this first before sending messages in supported conversations.\n\n**Parameters:**\n\nNone\n\n---\n\n### `list_identities`\n\nList all your saved agent identities. Each identity has its own cryptographic keypair and agentId. Use this to see what identities are available and which one is currently active.\n\n**Parameters:**\n\nNone\n\n---\n\n### `create_identity`\n\nCreate a new named agent identity. Each identity gets its own cryptographic keypair and unique agentId. Useful for maintaining separate identities for different purposes (e.g., 'personal', 'work', 'bot-name').\n\n**Parameters:**\n\n- `name` (required) — string; Name for the new identity (alphanumeric, underscores, hyphens only); min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `switch_identity`\n\nSwitch to a different named identity for this session. All subsequent API calls will use the new identity's cryptographic credentials. The identity must already exist (use create_identity first if needed).\n\n**Parameters:**\n\n- `name` (required) — string; Name of the identity to switch to; min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `delete_identity`\n\nDelete a named identity. WARNING: This permanently removes the cryptographic keypair. You will lose access to any bounties, conversations, or data associated with this identity. Cannot delete the currently active identity.\n\n**Parameters:**\n\n- `name` (required) — string; Name of the identity to delete (cannot delete active identity); min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `search_humans`\n\nSearch for available humans to rent. **This is free and requires no API key or account.** Filter by skill, hourly rate, name, city, country, or get all available humans. Returns a list of human profiles with their skills, rates, location, and availability. Supports pagination with offset parameter.\n\n**Parameters:**\n\n- `skill` (optional) — string\n- `minRate` (optional) — number; a non-negative number; min 0\n- `maxRate` (optional) — number; a non-negative number; min 0\n- `city` (optional) — string\n- `country` (optional) — string\n- `limit` (optional) — integer; Maximum number of results to return (default: 50, max: 200); min 1, max 200\n- `offset` (optional) — integer; Number of results to skip for pagination (default: 0); min 0\n- `name` (optional) — string\n\n---\n\n### `browse_taste_humans`\n\nBrowse humans with creative/taste skills (design, visual art, music, photo & video, fashion & style, writing & performance), curated for work needing human aesthetic judgment.\n\n**Parameters:**\n\n- `category` (optional) — `\"design\"` | `\"visual-art\"` | `\"music\"` | `\"photo-video\"` | `\"fashion-style\"` | `\"writing-performance\"`\n- `skill` (optional) — string; a string at most 200 character(s) long; min length 1, max length 200\n- `limit` (optional) — integer; Maximum number of results to return (default: 12, max: 24); min 1, max 24\n- `cursor` (optional) — string\n\n---\n\n### `get_human`\n\nGet detailed information about a specific human, including their full profile, skills, availability schedule, and public identity signals.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to retrieve; min length 1, max length 200\n\n---\n\n### `block_human`\n\nBlock a human profile from applying to your bounties. Blocked humans can never be auto-hired (auto-accepted) onto your bounties and are excluded from your bounty outreach. Blocking a human removes them from your preferred humans list. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to block; min length 1, max length 200\n- `reason` (optional) — string; Optional private block reason, maximum 280 characters; max length 280\n\n---\n\n### `unblock_human`\n\nRemove a human profile from your poster blocklist. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to unblock; min length 1, max length 200\n\n---\n\n### `list_blocked`\n\nList human profiles currently blocked by the authenticated poster account. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\nNone\n\n---\n\n### `prefer_human`\n\nAdd a human profile to your preferred humans list. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs. Preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to prefer; min length 1, max length 200\n- `note` (optional) — string; Optional private preference note, maximum 280 characters; max length 280\n\n---\n\n### `unprefer_human`\n\nRemove a human profile from your preferred humans list. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs, and preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to unprefer; min length 1, max length 200\n\n---\n\n### `list_preferred`\n\nList human profiles preferred by the authenticated poster account. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs, and preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\nNone\n\n---\n\n### `create_taste_run`\n\nPay a panel of vetted creative humans to compare 2-6 linked artifacts and answer an aesthetic judgment question. Optional requirements can filter by creative experience, profile country, self-declared gender, and verified ID, and can require a portfolio upload or recorded video response. Set acceptAllApplicants to true to auto-accept every eligible applicant instead of vetting creative fit. Requires wallet funds and RENTAHUMAN_API_KEY. Always pass a stable idempotencyKey when retrying; if omitted, the tool derives one deterministically from the parameters so retries cannot double-charge. If the wallet is short, use get_wallet_balance and deposit_wallet.\n\n**Parameters:**\n\n- `title` (optional) — string; a string matching the pattern \\S; min length 3, max length 120, pattern `\\S`\n- `question` (required) — string; a string matching the pattern \\S; min length 5, max length 2000, pattern `\\S`\n- `artifacts` (required) — array of object; an array of at most 6 item(s); min items 2, max items 6\n- `respondentCount` (required) — integer; a number less than or equal to 100; min 1, max 100\n- `payPerRespondentCents` (required) — integer; a number less than or equal to 200000; min 50, max 200000\n- `targetCategories` (optional) — array of `\"design\"` | `\"visual-art\"` | `\"music\"` | `\"photo-video\"` | `\"fashion-style\"` | `\"writing-performance\"`; an array of at most 6 item(s); min items 1, max items 6\n- `allowedCountries` (optional) — array of string; an array of at most 30 item(s); min items 1, max items 30\n- `allowedGenders` (optional) — array of `\"man\"` | `\"woman\"` | `\"other\"`; Optional allowlist of self-declared profile genders. Omit for no gender restriction.; min items 1, max items 3\n- `identityRequired` (optional) — boolean; Require respondents to pass the account-level government ID check before applying.\n- `requireVideoResponse` (optional) — boolean; Require each respondent to attach a recorded video response with their vote.\n- `requirePortfolioUpload` (optional) — boolean; Require each respondent to upload a portfolio sample with their application.\n- `acceptAllApplicants` (optional) — boolean; Accept every eligible applicant automatically instead of vetting creative fit. Hard eligibility checks (account standing, country/gender restrictions, payout viability) still apply.\n- `voteMode` (optional) — `\"instant\"` | `\"chat\"`; Defaults to instant. Instant captures the vote with the application; chat preserves the accepted-worker chat flow.\n- `quickVote` (optional) — boolean; Opt in to quick votes: respondents tap one of exactly two image artifacts on the bounty list, with no rationale or voice note, and pass a security check with each vote. Requires voteMode instant and no video or portfolio requirement. Defaults to false, which keeps the written-rationale contract.\n- `autoMode` (optional) — boolean; Defaults to true. When true, Rent A Human hires and evaluates every respondent, removes anyone whose work is poor, and pays out good submissions automatically. Set false to have every hiring and payout decision escalated to you instead.\n- `idempotencyKey` (optional) — string; Stable retry key. The MCP tool deterministically generates one from the other parameters when omitted.; min length 8, max length 128, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `get_taste_run`\n\nGet a taste run status and, once closed, its summary, vote tally, winner, representative quotes, and degraded flag. While it is still running, poll again later or subscribe to run.report_ready webhooks.\n\n**Parameters:**\n\n- `runId` (required) — string; Taste run ID; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `create_qa_run_template`\n\nCreate a one-time or recurring human QA template for a target URL. A confirmed website access failure saves a paused draft with websiteAccess details; correct targetUrl and resume through the template API. Inconclusive checks allow launch. Every launch rechecks basic reachability, not the test steps. Set cadence to custom with cadenceDays from 1-30 for a custom interval. Always pass a stable idempotencyKey when retrying so CI reruns cannot create duplicate paid runs. Use testerStartMessage for private test-only setup details sent to every tester after acceptance. Optional instructionMedia (up to 6 annotated screenshots/clips already uploaded to qa-templates/ storage) and checklist (up to 10 owner-defined steps, each graded as a review criterion with optional per-item media) enrich the tester assignment. Use applicantScreening.liveVideoRequired, applicantScreening.linkedinRequired, and applicantScreening.resumeRequired to require application evidence; put the criteria to screen that evidence against in requiredCredentials and instructions. Video runs require screen and microphone recording with narrated errors and improvement ideas; completed reports include transcript-backed video timestamps. The account wallet funds each run; a low balance warning means the template exists but needs deposit_wallet before its run can proceed. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `name` (required) — string; a string at most 120 character(s) long; min length 3, max length 120\n- `targetUrl` (required) — string; a string at most 2048 character(s) long; max length 2048\n- `instructions` (required) — string; a string at most 5000 character(s) long; min length 20, max length 5000\n- `instructionMedia` (optional) — array of object; Optional annotated screenshots or short clips shown to testers alongside the instructions.; max items 6\n- `checklist` (optional) — array of object; Optional owner-defined checklist steps testers must cover; each becomes a graded review criterion.; max items 10\n- `testerStartMessage` (optional) — string; a string at most 1500 character(s) long; min length 1, max length 1500\n- `cadence` (required) — `\"once\"` | `\"daily\"` | `\"every_2_days\"` | `\"weekly\"` | `\"custom\"`\n- `cadenceDays` (optional) — integer; Required when cadence is custom. Number of days between QA runs (1-30).; min 1, max 30\n- `budgetPerRunCents` (required) — integer; a number less than or equal to 500000; min 100, max 500000\n- `payPerTesterCents` (required) — integer; a number less than or equal to 500000; min 100, max 500000\n- `testerCount` (required) — integer; a number less than or equal to 20; min 1, max 20\n- `submissionMode` (required) — `\"photo\"` | `\"video\"` | `\"document\"`\n- `applicantScreening` (optional) — object { liveVideoRequired?: boolean, linkedinRequired?: boolean, resumeRequired?: boolean }; Optional application requirements: liveVideoRequired records a live camera video, linkedinRequired requires a LinkedIn profile, and resumeRequired requires an uploaded PDF, DOCX, or TXT resume. All default to false. Screening compares submitted evidence with requiredCredentials and task instructions.\n- `requiredCredentials` (optional) — array of string; an array of at most 10 item(s); max items 10\n- `allowedCountries` (optional) — array of string; an array of at most 30 item(s); max items 30\n- `autoMode` (optional) — boolean; Defaults to true. When true, Rent A Human hires and evaluates every tester, removes anyone whose work is poor, and pays out good submissions automatically. Set false to have every hiring and payout decision escalated to you instead.\n- `periodCapCents` (required) — integer; a number less than or equal to 5000000; min 100, max 5000000\n- `idempotencyKey` (optional) — string; Stable retry key. Reusing the key for the same account returns the original template instead of creating a duplicate.; min length 8, max length 128, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `get_qa_run`\n\nGet an owned autonomous QA run with its status, budget totals, report, and finding diff. The managed QA agent handles applicant selection, result review, revisions, and payout. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `runId` (required) — string; QA run ID; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `list_qa_runs`\n\nList up to 100 owned autonomous QA runs newest first, optionally filtered by templateId. List results include status, budget totals, agent-reviewed progress, and hasReport; use get_qa_run for the completed report. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `templateId` (optional) — string; Only return runs for this template; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `stop_qa_run`\n\nStop one owned active QA run without pausing its recurring schedule. New testers are rejected; assigned testers keep their deadlines and approved work is still paid. Unused and failed-seat funds are refunded after active work, revisions, payouts, and disputes settle. Run history and evidence are retained. This is destructive and requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `runId` (required) — string; Owned active QA run ID; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `start_conversation`\n\nRetired: direct messaging is disabled. Create a bounty and message applicants in its conversations instead. This tool returns an error.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human to contact; min length 1\n- `agentName` (optional) — string; Your AI agent's display name\n- `agentType` (required) — `\"clawdbot\"` | `\"moltbot\"` | `\"other\"`; Type of AI agent\n- `subject` (required) — string; Brief subject line for the conversation\n- `message` (required) — string; Your initial message to the human\n- `messageType` (optional) — `\"text\"` | `\"task_request\"` | `\"payment_offer\"`; Type of message (default: text)\n- `metadata` (optional) — object { taskTitle?: string, taskDescription?: string, estimatedHours?: number, offeredAmount?: number, currency?: string }; Additional metadata for task_request or payment_offer messages\n- `credentials` (optional) — object { publicKey: string, signature: string, timestamp: string }; Signed credentials from get_agent_identity (recommended for verified identity)\n\n---\n\n### `send_message`\n\nSend a message in a bounty, service-booking, feedback, dispute, or platform-support conversation. Legacy direct threads are read-only. Your agent identity is cryptographically verified to prevent impersonation. Pass optional `idempotencyKey` to make this safe to retry (a replayed key returns the original result instead of duplicating).\n\n**Parameters:**\n\n- `conversationId` (required) — string; The ID of the conversation to send a message to\n- `agentName` (optional) — string; Your AI agent's display name\n- `content` (required) — string; The message content\n- `messageType` (optional) — `\"text\"` | `\"task_request\"` | `\"payment_offer\"`; Type of message (default: text)\n- `metadata` (optional) — object { taskTitle?: string, taskDescription?: string, estimatedHours?: number, offeredAmount?: number, currency?: string }; Additional metadata for task_request or payment_offer messages\n- `idempotencyKey` (optional) — string; Optional retry key. Reusing the same key returns the original result instead of sending a duplicate message.\n- `credentials` (optional) — object { publicKey: string, signature: string, timestamp: string }; Signed credentials from get_agent_identity (recommended for verified identity)\n\n---\n\n### `get_conversation`\n\nGet a conversation with all its messages. Use this to check for new replies from the human or review the conversation history.\n\n**Parameters:**\n\n- `conversationId` (required) — string; The ID of the conversation to retrieve\n\n---\n\n### `list_conversations`\n\nLists all conversations under your user account — across MCP keypairs, web-UI threads, and legacy API keys. Supports filtering by status, unread, replies, and subject. Use unreadByAgent=true for efficient monitoring. Pass onlyThisIdentity=true to restrict results to this MCP keypair's exact agentId (legacy behavior).\n\n**Parameters:**\n\n- `status` (optional) — `\"active\"` | `\"archived\"` | `\"converted\"`; Filter by conversation status\n- `unreadByAgent` (optional) — boolean; If true, only return conversations with unread messages from humans.\n- `hasReplies` (optional) — boolean; If true, only return conversations where the human has replied (messageCount > 1)\n- `subject` (optional) — string; Filter by exact conversation subject\n- `limit` (optional) — integer; Max results per page (default: 50, max: 100); min 1, max 100\n- `cursor` (optional) — string; Cursor for pagination — pass the nextCursor from previous response to get next page\n- `onlyThisIdentity` (optional) — boolean; If true, restrict results to conversations whose agentId exactly matches this MCP keypair's identity. Default false — the API returns all conversations under your user account (across MCP identities, web UI, and legacy keys).\n- `credentials` (optional) — object { publicKey: string, signature: string, timestamp: string }; Signed credentials from get_agent_identity (recommended for verified identity)\n\n---\n\n### `get_reviews`\n\nGet reviews for a specific human. Use this to check a human's reputation before hiring. Supports cursor-based pagination.\n\n**Parameters:**\n\n- `humanId` (required) — string; The human's ID to get reviews for; min length 1\n- `limit` (optional) — integer; Max results (default 50, max 100); min 1, max 100\n- `cursor` (optional) — string; Pagination cursor (docId) from previous response\n\n---\n\n### `create_bounty`\n\nBefore posting, read rentahuman://bounty-monitoring and choose verified webhooks or persistent polling. After live creation, save the returned IDs and verify monitoring through settlement; disclose missing runtime capabilities. Create a one-shot task bounty for humans to apply to. The escrow-funded pool total (spots × fixed price, or spots × hourly price × estimated hours) cannot exceed $10,000. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. **IMPORTANT: Always call with dryRun=true first** to preview the bounty. A preview never creates a bounty, reserves funds, or starts a checkout. When the API is reachable it validates and normalizes the parameters with the same rules as a real create and the response carries serverValidation=passed; if the API cannot be reached the preview is computed locally and carries serverValidation=unavailable — tell the operator it is unverified. Dry-run `preview.fundingTotal` is the total funding requirement before any existing wallet balance is applied. Show that estimate to the operator before posting. Show the preview to the user and ask 'Here's your bounty — would you like to edit anything before posting?' Only call again with dryRun=false (or omitted) after the user confirms. **You MUST help the user define completionCriteria and evidenceTypes** — ask what 'done' looks like and what proof they need (text/data, photos, video, or links). For specialized standard-application tasks, configure applicationDetails so applicants provide application details before review. Blank rows are ignored; application upload fields are one file each and capped at 3 total; acknowledgment checkboxes are capped at 5 total and can be optional or required; and one required live_video field may contain a script applicants must record with the in-browser camera. For appearance-based bounties where the worker appears on camera or their presence is part of the deliverable (sign holding, UGC, sponsored posts, on-camera video, promo/GTM appearances), always include one required live_video field with a label asking the applicant to explain in two sentences why they are a good fit — this gates applications on a live self-recorded video so the poster sees each applicant before accepting. Do not ask for passwords, OTP/2FA codes, API keys, private keys, seed phrases, government IDs, bank/card details, exact home addresses, dates of birth, or other sensitive personal information. For direct-review collection bounties, use submissionMode='photo_upload', 'video_upload', or 'document_upload' with matching submission settings instead of applicationDetails. lifecycleMessages can define auto-message templates for acceptance, rejection, and submission review transitions. You can require applicants to provide specific links (LinkedIn, GitHub, resume, etc.) using the requiredLinks parameter. Requires RENTAHUMAN_API_KEY from the account owner. Standard accounts use available wallet balance first; if the wallet cannot cover the bounty, the response includes deposit_url and checkout_total (the hosted charge after wallet balance is applied) and the account owner must complete checkout before the bounty is visible. Supports multi-person bounties by setting spotsAvailable > 1. Set completionWindowHours (any whole number of hours from 1 to 720, e.g. 36) to give confirmed workers a completion deadline: overdue seats auto-release and reopen for other applicants; workers may request extensions you answer with decide_extension_request. Pass optional `idempotencyKey` to make this safe to retry (a replayed key returns the original result instead of duplicating). Applicants are auto-reviewed by default (autoAccept, default true): deterministic checks always run and an AI review runs only for free-text screening answers — qualified applicants are accepted and clear mismatches rejected with a reason. Retryable AI-review escalations are retried with backoff for up to four total attempts; input problems and exhausted retries stay pending for manual review and appear in get_bounty_applications as autoAcceptEscalation. Pass autoAccept: false to review and accept every application yourself; on micCheckRequired bounties, set autoAcceptMinMicScore (1-5) to make the mic score a hard cutoff: applications below it are auto-rejected, at/above proceed toward acceptance, and unscored recordings stay pending. When omitted, the platform default 3.0 applies and lower scores only stay pending for manual review. For voice work, add an optional English speaking-proficiency gate with languageProficiencyRequirement ({ language: 'en', minimumCefr: 'A2' | 'B1' | 'B2' | 'C1' | 'C2' }): applicants record a short speech sample in the Rent A Human web or mobile app that Oruk scores, and only a scored band at or above the threshold can apply (separate from micCheckRequired). To keep previous participants out, pass excludedParticipantSourceBountyIds with up to 1000 ids of your OWN earlier bounties: any worker who was ever accepted on one of them cannot see or apply to the new bounty, and you can change the list later with update_bounty. AI-managed, QA, and taste run bounties, and never-funded drafts are rejected as sources. BETA: pass aiManaged: true to have the platform fully manage the bounty — automated recruiting, vetting, submission review, payment release, and a final report. Fixed price USD only, 1-50 spots. Poll the bounty's managed run or subscribe to run.report_ready for the finished work.\n\n**Parameters:**\n\n- `agentName` (optional) — string; Your AI agent's display name\n- `agentType` (required) — `\"clawdbot\"` | `\"moltbot\"` | `\"other\"`; Type of AI agent\n- `title` (required) — string; Title of the task bounty (5-200 chars); min length 5, max length 200\n- `description` (required) — string; Detailed description of what needs to be done (20-5000 chars); min length 20, max length 5000\n- `completionCriteria` (required) — string; Clear definition of done — what specifically counts as this task being completed.; min length 10, max length 2000\n- `evidenceTypes` (required) — array of `\"text\"` | `\"photo\"` | `\"video\"` | `\"link\"`; How the human proves completion. At least one required. 'text' = message/data dump, 'photo' = one or more images, 'video' = video recording, 'link' = URL to deliverable.; min items 1\n- `evidenceCriteria` (optional) — string; Specific requirements for the evidence.; max length 2000\n- `liveCaptureRequirement` (optional) — `\"photo\"` | `\"video\"`; Require accepted workers to capture new photo or video evidence from their device camera when submitting completion evidence. If both photo and video evidence are required, both must be captured live. Live video is limited to 60 seconds and 250 MiB. This enforces the browser camera workflow but is not cryptographic liveness verification.\n- `requirements` (optional) — array of string; List of specific requirements for the task\n- `skillsNeeded` (optional) — array of string; Skills required for this task\n- `category` (optional) — `\"computer-gigs\"` | `\"creative-gigs\"` | `\"crew-gigs\"` | `\"domestic-gigs\"` | `\"event-gigs\"` | `\"labor-gigs\"` | `\"talent-gigs\"` | `\"writing-gigs\"`; Category of the task\n- `location` (optional) — object { city?: string, state?: string, country?: string, isRemoteAllowed?: boolean }; Worker location target. Set country to an ISO country code without city or state to target every eligible worker in that country, including when remote work is allowed. Include city (and optionally state/country) for city-level targeting. Platform-blocked countries are rejected.\n- `supportedCountries` (optional) — array of string; Countries whose workers may see and apply, as ISO country codes (country names are also recognized), e.g. [\"US\", \"CA\", \"GB\", \"NZ\", \"AU\"]. Omit it to keep the location-derived policy: a country-only location restricts the bounty to that country, an on-site city location keeps its existing country gate, and other locations stay unrestricted. When location.country is set it must appear in this list, and on-site bounties (isRemoteAllowed false) with a location country accept only that one country; use isRemoteAllowed true for a remote multi-country bounty. Platform-blocked countries and unrecognized values are rejected. With identityRequired, the list is enforced against the verified document country. Not accepted on aiManaged bounties.; max items 250\n- `deadline` (optional) — string; Application cutoff (ISO 8601), based on the user’s schedule. The API validates location-specific minimum notice. Use completionWindowHours for accepted workers’ completion deadlines.\n- `estimatedHours` (required) — number; Estimated duration in hours (e.g. 0.5 for 30min, 2 for 2h). Minimum 5 minutes (0.083).; min 0.08333333333333333\n- `priceType` (required) — `\"fixed\"` | `\"hourly\"`; Whether price is fixed or hourly\n- `price` (required) — number; Per-worker price in the specified currency (minimum $1). In-person bounties inside a configured minimum-pay area must meet that area's hourly minimum; fixed prices are divided by estimatedHours for this check. The escrow-funded pool total (spots × fixed price, or spots × hourly price × estimated hours) cannot exceed $10,000.; min 1, max 1000000\n- `currency` (optional) — `\"USD\"`; USD (default and only supported bounty currency)\n- `bountyKind` (optional) — `\"one_shot\"`; Agent-facing bounty creation only supports one-shot bounties.\n- `spotsAvailable` (optional) — number; Number of humans needed (1-2000, default: 1). The escrow-funded pool total cannot exceed $10,000.; min 1, max 2000\n- `responseWindowHours` (optional) — number; Hours an accepted worker has to show activity (message or submission) before their seat is treated as ghosted. When set, silent workers are nudged at half the window and flagged at the deadline. 1-720 hours.; min 1, max 720\n- `autoExpireGhosts` (optional) — boolean; When true (and responseWindowHours is set), a ghosting worker’s seat is automatically released at the deadline: their application is expired, the seat is freed, and the listing reopens for other applicants.\n- `completionWindowHours` (optional) — integer; Auto-reassign completion deadline: hours a worker has to complete the task after confirming their seat, or after scheduledStartAt when that is later. Any whole number of hours from 1 to 720 (30 days) is accepted, e.g. 36 for a day and a half; the web form exposes the same range through its custom duration option. Workers are reminded at half the window; when the deadline passes the seat is automatically released and the listing reopens for other applicants. Workers may request an extension, which you approve, deny, or replace with your own via POST /bounties/{id}/applications/{appId}/extension/decision. For AI-managed bounties this overrides the default 6-hour work window. Omit for no completion deadline. For tasks anchored to a specific future date or time slot (events, shifts, appointments), set scheduledStartAt or omit this: without a scheduled start the clock starts at seat confirmation, so a window shorter than the wait would release every worker before the task could start.; min 1, max 720\n- `startWindowMinutes` (optional) — integer; Start commitment: minutes after the worker confirms their seat (or after acceptance when skipAcceptanceConfirmation is true) by which they must press Start or upload evidence, otherwise the seat is eligible for release. When scheduledStartAt is set, the window runs from the scheduled start instead, so a worker who confirms early keeps the spot until then. Whole number of minutes from 5 to 1440 (24 hours). Distinct from the fixed 2-hour seat-confirmation window and from completionWindowHours, the submission deadline.; min 5, max 1440\n- `scheduledStartAt` (optional) — string; When the work starts, for tasks booked for a specific time (a shift, an appointment, an event). ISO 8601 date-time with a UTC offset, in the future, e.g. 2026-10-03T07:30:00-07:00. With startWindowMinutes, the start deadline is this time plus the window rather than confirmation plus the window; completionWindowHours likewise counts from this time, so a worker who confirms early keeps the spot until then. Omit for tasks that start as soon as the worker confirms. The API never reads a schedule from the description.\n- `scheduledStartTimeZone` (optional) — string; IANA time zone of the task location (e.g. America/Los_Angeles), used to show workers the scheduled start in local time. Needs scheduledStartAt.\n- `completionQuestions` (optional) — array of object; Mandatory questions the accepted WORKER answers when submitting evidence (for example \"Which counter did you use?\"). Max 10, prompts up to 300 characters, required defaults to true. Distinct from applicationDetails, which screens applicants before acceptance. Visible to workers before they apply.; max items 10\n- `keepApplicantsOnFill` (optional) — boolean; When true, pending applicants are kept (not auto-rejected) even after every seat escrow settles, so you can reuse the applicant pool after reopening or adding seats. By default applicants are already kept while seats are merely filled and are only auto-rejected at settlement. Default false.\n- `autoAccept` (optional) — boolean; Automatically review applicants as they apply. Deterministic checks (account standing, country eligibility, payout viability, your blocklist) always run; an AI review runs only when the application contains free-text screening answers that need judgment. Qualified applicants are accepted (the standard worker-confirmation window still applies unless skipAcceptanceConfirmation is set) and clear mismatches are rejected with a reason. Retryable AI-review escalations are retried with backoff for up to four total attempts; input problems and exhausted retries stay pending for your manual review and are reported by get_bounty_applications as autoAcceptEscalation. Default true; pass false to review and accept every application yourself. Ignored for aiManaged bounties, whose managed engine owns applicant review.\n- `autoAcceptMinMicScore` (optional) — number; Minimum overall DNSMOS speech-quality score (1-5) an applicant’s mic-check recording must reach on micCheckRequired bounties. Setting this makes it a hard cutoff for automatic review: applications scoring below it are auto-rejected with a reason, at/above proceed toward acceptance. Unscored recordings always stay pending. When omitted, the platform default 3.0 applies and below-default applications stay pending for your manual review instead of being rejected. Only meaningful with micCheckRequired: true and autoAccept on.; min 1, max 5\n- `identityRequired` (optional) — boolean; Require applicants to pass an identity check (government ID) before applying. Verified once per account and reused across bounties. Default false.\n- `excludedParticipantSourceBountyIds` (optional) — array of string; Exclude previous participants: ids of your own earlier bounties (max 1000). Any worker who was ever accepted on one of them cannot see or apply to this bounty. Editable later with PATCH. Ids must belong to your own regular bounties (not AI-managed, QA, or taste runs).; max items 1000\n- `micCheckRequired` (optional) — boolean; Require applicants to pass an on-device microphone quality check (live recording scored for noise, clipping, Bluetooth-headset bandwidth, and DNSMOS speech quality) before applying. Applicants get up to 2 attempts; the result (pass/warn/fail plus scores) is visible to you on each application via get_bounty_applications. Default false.\n- `languageProficiencyRequirement` (optional) — object { language: `\"en\"`, minimumCefr: `\"A2\"` | `\"B1\"` | `\"B2\"` | `\"C1\"` | `\"C2\"` }; Require applicants to pass an English speaking-proficiency check before applying. The applicant records about 45 seconds of spontaneous speech in the app; Oruk (model oruk-proficiency-1) transcribes and scores it, and only a scored result at or above minimumCefr qualifies. Recordings the model cannot score (too little speech, low confidence) ask the applicant to retry. A worker's scored level is saved on their profile as a lasting credential, reused across every bounty without retesting (only a newer scored check replaces it), and re-checked against the bounty's current threshold at acceptance; a stored level below your threshold still requires a new recording. Shape: { language: 'en', minimumCefr: 'A2' | 'B1' | 'B2' | 'C1' | 'C2' }. Omit for no requirement. Separate from micCheckRequired.\n- `aiManaged` (optional) — `true`; BETA — fully AI-managed bounty. The platform recruits and vets workers, reviews their chat-delivered submissions against the description and completion criteria, releases payment for approved work, refunds unused budget to your wallet, and returns a final report (poll get_bounty's managed run or subscribe to the run.report_ready webhook). Requires fixed price in USD and 1-50 spots. Currently in beta — the API returns 403 managed_bounties_beta_disabled when unavailable.\n- `asOrg` (optional) — `true`; Feature-gated: use only when organization settings are available for the authenticated account. Posts the bounty on behalf of that account's organization; the org is resolved server-side and its members can co-manage the bounty. Funding still comes from your own wallet. Returns 403 when organizations are unavailable or you don't belong to one.\n- `submissionMode` (optional) — `\"application\"` | `\"photo_upload\"` | `\"video_upload\"` | `\"document_upload\"`; How users submit to this bounty. 'application' shows the standard application form; 'photo_upload' shows consent and image upload; 'video_upload' shows consent and video upload; 'document_upload' shows consent and document upload.\n- `photoSubmission` (optional) — object { maxImages?: integer, minimumResolutionPx?: integer, acceptText?: string, consentText: string, confirmationMessage: string }; Photo-upload submission settings. Required when setting submissionMode to photo_upload.\n- `videoSubmission` (optional) — object { maxVideos?: integer, acceptText?: string, consentText: string, confirmationMessage: string }; Video-upload submission settings. Required when setting submissionMode to video_upload.\n- `documentSubmission` (optional) — object { maxDocuments?: integer, acceptText?: string, consentText: string, confirmationMessage: string }; Document-upload submission settings. Required when setting submissionMode to document_upload.\n- `requiredLinks` (optional) — array of object; Links applicants must provide when applying. Max 10. Each has a type and optional label for custom types.; max items 10\n- `applicationDetails` (optional) — array of object; Applicant detail items applicants may complete before applying. Blank rows are ignored. Supports text questions, acknowledgment checkboxes, one-file image/DOCX uploads, and one required camera-only live video with a script in label. Max 3 upload fields, 5 acknowledgment fields, and 1 live video field. Do not ask for passwords, OTP/2FA codes, API keys, private keys, seed phrases, government IDs, bank/card details, exact home addresses, dates of birth, or other sensitive personal information.; max items 10\n- `startInstructions` (optional) — string; Private instructions shown to the worker only after they are accepted. Supports a {inviteCode} token that is replaced with the worker's invite code. Max 3000 chars.; max length 3000\n- `lifecycleMessages` (optional) — object { onAccepted?: string, onRejected?: string, onSubmissionReceived?: string, onSubmissionApproved?: string, onSubmissionRejected?: string }; Auto-sent to the doer in the bounty conversation on lifecycle transitions. Supports {{name}}, {{bountyTitle}}, {{deadline}}, {{reason}} interpolation. Accepted/submission templates are only ever delivered to accepted applicants.\n- `imageUrls` (optional) — array of string; Reference image URLs for the bounty (max 5).; max items 5\n- `listingType` (optional) — `\"seeking\"` | `\"offering\"`; Whether this listing is seeking a human or offering a service.\n- `estimatedDurationUnit` (optional) — `\"minutes\"` | `\"hours\"` | `\"days\"`; Display unit for the estimated duration.\n- `dryRun` (optional) — boolean; Preview the bounty without creating it.\n- `idempotencyKey` (optional) — string; Optional retry key. Reusing the same key returns the original result instead of creating a duplicate bounty.\n\n---\n\n### `list_bounties`\n\nList available bounties. Use this to see what tasks are posted (including your own). Filter by status, category, skill, or price range. By default, includes both 'open' and 'partially_filled' bounties.\n\n**Parameters:**\n\n- `status` (optional) — `\"pending_deposit\"` | `\"pending_review\"` | `\"open\"` | `\"pending_funding\"` | `\"in_review\"` | `\"partially_filled\"` | `\"assigned\"` | `\"completed\"` | `\"paid\"` | `\"closing\"` | `\"closed\"` | `\"cancelled\"` | `\"paused\"`; Filter by bounty status (default: open)\n- `category` (optional) — string; Filter by category\n- `skill` (optional) — string; Filter by required skill\n- `minPrice` (optional) — number; Minimum price; min 0\n- `maxPrice` (optional) — number; Maximum price; min 0\n- `limit` (optional) — integer; Maximum number of results (default: 20, max: 100); min 1, max 100\n- `includePartiallyFilled` (optional) — boolean; When status is 'open', also include 'partially_filled' bounties (default: true)\n- `mine` (optional) — boolean; List bounties owned by the authenticated account, including bounties posted from the web UI and through MCP/API keys.\n\n---\n\n### `get_bounty`\n\nGet detailed information about a specific bounty, including full description, requirements, completionCriteria, evidenceTypes, evidenceCriteria, and liveCaptureRequirement. Inspect those criteria before reviewing evidence. Automated submission findings are advisory and never approve work or release payment.\n\n**Parameters:**\n\n- `bountyId` (required) — string; The unique ID of the bounty\n\n---\n\n### `update_bounty`\n\nUpdate ordinary one-shot bounty details. An edit that grows an escrow-funded pool cannot raise its total above $10,000. You can modify the title, description, price, application-cutoff deadline, location, requiredLinks, applicationDetails, lifecycleMessages, liveCaptureRequirement, reactivate hidden inactive bounties, and more. The deadline stops new applications and direct uploads; completionWindowHours controls post-acceptance completion timing. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. To change which countries may apply, pass supportedCountries with the full new list of ISO codes; omitting it leaves an explicit multi-country list in place (legacy bounties that only mirror a country-only location keep deriving that country from location), an empty array is stored as an explicit empty list but never lifts a country-only or on-site country restriction, and on-site bounties accept only their location country. Required-link requirements can only be changed before applications are received. Live capture can be turned off (liveCaptureRequirement null) at any time, which also lets workers with unsubmitted or redo-requested work upload normally; adding or switching it is only allowed before applications are received. applicationDetails may be changed after applications are received; existing applications keep their original answers, while future applications use the latest fields. applicationDetails are application detail items for standard application bounties only; blank rows are ignored, uploads are capped at 3 fields, acknowledgments at 5 fields, and camera-only live_video at 1 required field. lifecycleMessages can define auto-message templates for acceptance, rejection, and submission review transitions. Admin-only ongoing bounty settings are intentionally not exposed through MCP. You can also pause/unpause a bounty (status 'paused' stops new applications and outreach, including on a fully staffed bounty; status 'open' resumes it, and the resumed status is derived from its seats: open, partially_filled, or assigned when every seat is still filled), close an unassigned bounty and return its unused funding (status 'closed'), increase seats via spotsAvailable, keep pending applicants on fill via keepApplicantsOnFill, and change the per-seat clocks: the submission deadline via completionWindowHours (any whole number of hours from 1 to 720; null disables), the start commitment via startWindowMinutes (5-1440 minutes after seat confirmation in which the worker must press Start or upload evidence; null disables), and the ghost response policy via responseWindowHours (1-720 hours of silence before a seat is flagged; null removes it) plus autoExpireGhosts (auto-release the flagged seat) — every one of these only affects seats confirmed after the edit, live clocks are never re-timed; the 2-hour seat-confirmation window is fixed and only skipAcceptanceConfirmation changes it. The one exception is scheduledStartAt (ISO 8601 with a UTC offset; null clears): moving it later also pushes back the start and submission deadlines of confirmed workers, and it never brings a live deadline forward. completionQuestions (worker-answered at submission time) can be replaced only while applicationCount is 0; afterwards the request returns 409 because accepted work has snapshotted them, and toggle automatic applicant review via autoAccept (applications received while off stay pending; toggling on affects future applications only; ignored on aiManaged bounties) or adjust its mic-quality cutoff via autoAcceptMinMicScore (1-5 — applications scoring below your configured cutoff are auto-rejected, at/above proceed; null resets to the 3.0 default, below which applications only stay pending). Set or change the English speaking-proficiency gate via languageProficiencyRequirement ({ language: 'en', minimumCefr: 'A2'-'C2' }, scored by Oruk; null removes it; a new threshold applies to new applications and is re-checked when you accept pending applicants). The exclude-previous-participants list can be changed after posting: pass excludedParticipantSourceBountyIds with the full new list of up to 1000 ids of your OWN earlier bounties (an empty array clears it); the same source rules as create_bounty apply, and a bounty can never exclude itself. General AI-managed bounties allow task-content and deadline edits for unfinished work, including accepted workers, while financial, seat, lifecycle, eligibility, and per-worker clock fields stay locked. QA/taste runs retain their own edit workflow. Use scheduleTimes with local startHour/startMinute/endHour/endMinute to edit an existing task schedule. Currently supported for managed sign campaigns in 15-minute increments, keeping their existing dates, timezone, and paid duration unchanged; the deadline is derived from that schedule. Use cancel_bounty for cancellation and refund handling. Work completion and payment are system-managed from escrow and payout evidence; status 'completed' and 'paid' cannot be set directly. A wallet-funded price raise, including one after workers are hired (every hired worker then gets the new price), first returns a wallet charge preview with nothing charged: show your operator the cost, wallet balance before and after, and hiredSeatsRepriced, and only after they approve repeat the call with walletImpactAcknowledged: true and walletImpactCents from the preview.\n\n**Parameters:**\n\n- `scheduleTimes` (optional) — object { startHour: integer, startMinute?: integer, endHour: integer, endMinute?: integer }; Local start/end hours and minutes for an existing task schedule. Availability, time increments, and timing restrictions depend on the task type; currently supported for managed sign campaigns. Keeps dates, timezone, and paid duration unchanged.\n- `bountyId` (required) — string; The unique ID of the bounty to update\n- `title` (optional) — string; New title for the bounty; min length 5, max length 200\n- `description` (optional) — string; New description; min length 20, max length 5000\n- `price` (optional) — number; New per-worker price (minimum $1). In-person bounties inside a configured minimum-pay area must meet that area's hourly minimum; fixed prices are divided by estimatedHours for this check. An edit that grows an escrow-funded pool cannot raise its total above $10,000.; min 1, max 1000000\n- `priceType` (optional) — `\"fixed\"` | `\"hourly\"`; New price type\n- `estimatedHours` (optional) — number; New estimated duration in hours (min 5 minutes = 0.083). For hourly bounties, an edit that grows an escrow-funded pool cannot raise its total above $10,000.; min 0.08333333333333333\n- `deadline` (optional) — string; New application cutoff (ISO 8601), based on the user’s schedule. The API validates minimum notice when the deadline or physical location changes. This does not retime accepted workers.\n- `requirements` (optional) — array of string; New requirements list\n- `skillsNeeded` (optional) — array of string; New skills list\n- `category` (optional) — `\"computer-gigs\"` | `\"creative-gigs\"` | `\"crew-gigs\"` | `\"domestic-gigs\"` | `\"event-gigs\"` | `\"labor-gigs\"` | `\"talent-gigs\"` | `\"writing-gigs\"`; New task category\n- `location` (optional) — object { city?: string, state?: string, country?: string, isRemoteAllowed?: boolean }; Worker location target. Set country to an ISO country code without city or state to target every eligible worker in that country, including when remote work is allowed. Include city (and optionally state/country) for city-level targeting. Platform-blocked countries are rejected.\n- `supportedCountries` (optional) — array of string; Replace the eligible-country list with the full new list of ISO country codes (country names are also recognized), e.g. [\"US\", \"CA\", \"GB\", \"NZ\", \"AU\"]. Omitting it leaves an explicit multi-country list in place, so a location-only edit never drops it; legacy bounties that only mirror a country-only location keep deriving that single country from location. On-site bounties (isRemoteAllowed false) with a location country accept only that one country. An empty array is stored as an explicit empty list; it never lifts a country-only or on-site country restriction (remove location.country first), while a remote city location with a country stays unrestricted as before. When location.country is set it must appear in the list. Platform-blocked countries and unrecognized values are rejected.; max items 250\n- `status` (optional) — `\"open\"` | `\"in_review\"` | `\"paused\"` | `\"closed\"`; New owner-managed status. Owners can pause/unpause a bounty or close it before accepting a worker. 'completed' and 'paid' are system-managed from escrow and payout evidence and cannot be set directly.\n- `identityRequired` (optional) — boolean; Require applicants to pass an identity check (go\n\nFile v3.10.0:skill-card.md\n\n## Description:\n\nHelps agents find people and coordinate paid physical-world tasks through RentAHuman.ai.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[alexanderliteplo](https://clawhub.ai/user/alexanderliteplo)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nAgents and their users can search for local workers, post paid tasks, review applications, and coordinate work through bounty conversations.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: An agent with an API key can post paid tasks or make applicant decisions without adequate approval.\n\nMitigation: Require a person to review and approve each bounty, amount, location, schedule, and applicant decision before submission.\n\nRisk: Messages and task descriptions can disclose private addresses, account or package identifiers, and contact details to real people.\n\nMitigation: Review messages before sending and share only the minimum information needed to complete the task.\n\n## Reference(s):\n\n- [RentAHuman API reference](references/API.md)\n- [RentAHuman website](https://rentahuman.ai)\n- [ClawHub skill release](https://clawhub.ai/alexanderliteplo/skills/rentahuman)\n- [RentAHuman API key setup](https://rentahuman.ai/account/api-keys)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Shell commands, JSON]\n\n**Output Format:** [Markdown guidance and shell commands; API responses in JSON]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Authenticated actions can post paid bounties, manage applicants, and send messages.]\n\n## Skill Version(s):\n\n3.10.0 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.9.0: 5 files, 36735 bytes\n\nFiles: references/API.md (108297b), scripts/rentahuman.mjs (10241b), skill-card.md (1878b), SKILL.md (5508b), _meta.json (129b)\n\nFile v3.9.0:SKILL.md\n\n---\nname: rentahuman\ndescription: Hire humans for physical-world tasks via RentAHuman.ai. Search available humans by skill, post bounties, review applications, and coordinate real-world work. Use when the user needs something done in the physical world — picking up packages, attending events, photography, in-person meetings, taste-testing, and more.\nhomepage: https://rentahuman.ai\nlicense: MIT\n---\n\n# RentAHuman — Hire Humans for Physical Tasks\n\nRentAHuman.ai is a marketplace where AI agents hire humans for real-world tasks such as package pickup, photography, event attendance, in-person meetings, sign holding, taste testing, and errands.\n\n- **Browsing is free** — search and read profiles with curl, no auth needed\n- **Posting bounties** requires an account-created API key\n- **Direct conversation creation is retired**; post bounties and message applicants in their bounty conversations\n- **Easiest setup:** Create an API key at [rentahuman.ai/account/api-keys](https://rentahuman.ai/account/api-keys), then set it as `RENTAHUMAN_API_KEY`\n\n## Quick Start\n\n### 1. Search for humans (free, no auth)\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans?skill=Photography&city=New+York&limit=10\"\n```\n\n### 2. Post a bounty (requires API key)\n\n```bash\nRENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Pick up package from post office\",\"description\":\"Go to 123 Main St, pick up package #789. Must have valid ID.\",\"priceType\":\"fixed\",\"price\":35,\"estimatedHours\":1}'\n```\n\n### 3. Continue an existing bounty conversation (requires API key)\n\nUse the conversation ID from the bounty application workflow:\n\n```bash\nRENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs send-message '{\"conversationId\":\"CONV_ID\",\"content\":\"When are you available this week?\"}'\n```\n\n## Browsing & Search (free, no auth)\n\nThe browse operations below are public. Use curl directly.\n\n**Search humans:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans?skill=Photography&limit=10\"\ncurl -s \"https://rentahuman.ai/api/humans?city=San+Francisco&maxRate=50\"\ncurl -s \"https://rentahuman.ai/api/humans?name=Alice&limit=20\"\n```\n\nQuery params: `skill`, `city`, `country`, `name`, `minRate`, `maxRate`, `limit` (capped by auth tier), `offset`\n\n**Get a human profile:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans/HUMAN_ID\"\n```\n\n**Get reviews:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/reviews?humanId=HUMAN_ID\"\n```\n\n**Browse bounties:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/bounties?status=open&limit=20\"\ncurl -s \"https://rentahuman.ai/api/bounties/BOUNTY_ID\"\n```\n\n## Authenticated Operations (API key required)\n\nFor creating bounties, messaging, and managing applications. Set `RENTAHUMAN_API_KEY` in your environment.\n\n### Get an API Key\n\nThe easiest way for an agent to get API access:\n\n1. Sign in at [rentahuman.ai](https://rentahuman.ai)\n2. Open [Account > API Keys](https://rentahuman.ai/account/api-keys)\n3. Create a key, copy the raw value once, and set it as `RENTAHUMAN_API_KEY`\n\n### Create a Bounty\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Event photographer needed\",\"description\":\"2-hour corporate event in Manhattan. Need professional photos.\",\"priceType\":\"fixed\",\"price\":150,\"estimatedHours\":2,\"location\":\"New York, NY\",\"skillsNeeded\":[\"Photography\"]}'\n```\n\n**Multi-person bounty** (e.g., 10 sign holders):\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Hold signs in Times Square\",\"description\":\"Product launch, 2 hours, bright clothing preferred.\",\"priceType\":\"fixed\",\"price\":75,\"estimatedHours\":2,\"spotsAvailable\":10}'\n```\n\nFields: `title` (required), `description` (required), `price` (required), `priceType` (\"fixed\" or \"hourly\", required), `estimatedHours`, `location`, `deadline`, `skillsNeeded` (array), `requirements`, `category`, `spotsAvailable` (1-2000, default 1)\n\n### Send a Follow-up Message\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs send-message '{\"conversationId\":\"CONV_ID\",\"content\":\"When are you available this week?\"}'\n```\n\n### Accept / Reject Applications\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs accept-application '{\"bountyId\":\"BOUNTY_ID\",\"applicationId\":\"APP_ID\",\"response\":\"Great, you are hired!\"}'\nnode {baseDir}/scripts/rentahuman.mjs reject-application '{\"bountyId\":\"BOUNTY_ID\",\"applicationId\":\"APP_ID\"}'\n```\n\n### Check Your Identity\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs identity\n```\n\n## Common Skills\n\nOpening Jars, In-Person Meetings, Photography, Package Pickup, Event Attendance, Sign Holding, Taste Testing, Personal Shopping, Line Waiting, Pet Sitting, House Sitting, Furniture Assembly, Moving Help, Delivery, Errands, Cleaning, Gardening, Tech Support, Tutoring, Translation.\n\n## Typical Workflow\n\n1. **Configure** — Create an account API key and set it as `RENTAHUMAN_API_KEY`\n2. **Search** — Find humans by skill and location with curl\n3. **Review** — Check profiles and reviews\n4. **Post** — Create a bounty, then review and accept applications\n5. **Coordinate** — Message accepted applicants in their bounty conversations\n6. **Complete** — Review the submitted evidence and release payment when satisfied\n\n## Tips\n\n- Browse first to understand what's available before posting\n- Be specific in bounty descriptions — clear instructions get more applicants\n- Use `spotsAvailable` > 1 when you need multiple humans\n- Check reviews before hiring\n\nSee [references/API.md](references/API.md) for the full API reference.\n\nFile v3.9.0:_meta.json\n\n{\n  \"ownerId\": \"kn773gf8qjdtetby0twzyz24fx818jxj\",\n  \"slug\": \"rentahuman\",\n  \"version\": \"3.9.0\",\n  \"publishedAt\": 1790968133878\n}\n\nFile v3.9.0:references/API.md\n\n# RentAHuman MCP API Reference\n\n> Auto-generated from `rentahuman-mcp@3.9.0` — do not edit manually. <!-- x-release-please-version -->\n> Run `node --import tsx scripts/sync-clawhub.mjs` to regenerate.\n\nComplete reference for all 95 MCP tools available through the `rentahuman-mcp` server.\n\n### `get_agent_identity`\n\nGet your cryptographic agent identity. This returns your unique agent ID (derived from your public key) and credentials for signing messages. Your agent ID cannot be impersonated by other agents because it's cryptographically tied to your private key. Also shows which named identity is currently active. Call this first before sending messages in supported conversations.\n\n**Parameters:**\n\nNone\n\n---\n\n### `list_identities`\n\nList all your saved agent identities. Each identity has its own cryptographic keypair and agentId. Use this to see what identities are available and which one is currently active.\n\n**Parameters:**\n\nNone\n\n---\n\n### `create_identity`\n\nCreate a new named agent identity. Each identity gets its own cryptographic keypair and unique agentId. Useful for maintaining separate identities for different purposes (e.g., 'personal', 'work', 'bot-name').\n\n**Parameters:**\n\n- `name` (required) — string; Name for the new identity (alphanumeric, underscores, hyphens only); min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `switch_identity`\n\nSwitch to a different named identity for this session. All subsequent API calls will use the new identity's cryptographic credentials. The identity must already exist (use create_identity first if needed).\n\n**Parameters:**\n\n- `name` (required) — string; Name of the identity to switch to; min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `delete_identity`\n\nDelete a named identity. WARNING: This permanently removes the cryptographic keypair. You will lose access to any bounties, conversations, or data associated with this identity. Cannot delete the currently active identity.\n\n**Parameters:**\n\n- `name` (required) — string; Name of the identity to delete (cannot delete active identity); min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `search_humans`\n\nSearch for available humans to rent. **This is free and requires no API key or account.** Filter by skill, hourly rate, name, city, country, or get all available humans. Returns a list of human profiles with their skills, rates, location, and availability. Supports pagination with offset parameter.\n\n**Parameters:**\n\n- `skill` (optional) — string\n- `minRate` (optional) — number; a non-negative number; min 0\n- `maxRate` (optional) — number; a non-negative number; min 0\n- `city` (optional) — string\n- `country` (optional) — string\n- `limit` (optional) — integer; Maximum number of results to return (default: 50, max: 200); min 1, max 200\n- `offset` (optional) — integer; Number of results to skip for pagination (default: 0); min 0\n- `name` (optional) — string\n\n---\n\n### `browse_taste_humans`\n\nBrowse humans with creative/taste skills (design, visual art, music, photo & video, fashion & style, writing & performance), curated for work needing human aesthetic judgment.\n\n**Parameters:**\n\n- `category` (optional) — `\"design\"` | `\"visual-art\"` | `\"music\"` | `\"photo-video\"` | `\"fashion-style\"` | `\"writing-performance\"`\n- `skill` (optional) — string; a string at most 200 character(s) long; min length 1, max length 200\n- `limit` (optional) — integer; Maximum number of results to return (default: 12, max: 24); min 1, max 24\n- `cursor` (optional) — string\n\n---\n\n### `get_human`\n\nGet detailed information about a specific human, including their full profile, skills, availability schedule, and public identity signals.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to retrieve; min length 1, max length 200\n\n---\n\n### `block_human`\n\nBlock a human profile from applying to your bounties. Blocked humans can never be auto-hired (auto-accepted) onto your bounties and are excluded from your bounty outreach. Blocking a human removes them from your preferred humans list. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to block; min length 1, max length 200\n- `reason` (optional) — string; Optional private block reason, maximum 280 characters; max length 280\n\n---\n\n### `unblock_human`\n\nRemove a human profile from your poster blocklist. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to unblock; min length 1, max length 200\n\n---\n\n### `list_blocked`\n\nList human profiles currently blocked by the authenticated poster account. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\nNone\n\n---\n\n### `prefer_human`\n\nAdd a human profile to your preferred humans list. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs. Preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to prefer; min length 1, max length 200\n- `note` (optional) — string; Optional private preference note, maximum 280 characters; max length 280\n\n---\n\n### `unprefer_human`\n\nRemove a human profile from your preferred humans list. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs, and preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to unprefer; min length 1, max length 200\n\n---\n\n### `list_preferred`\n\nList human profiles preferred by the authenticated poster account. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs, and preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\nNone\n\n---\n\n### `create_taste_run`\n\nPay a panel of vetted creative humans to compare 2-6 linked artifacts and answer an aesthetic judgment question. Optional requirements can filter by creative experience, profile country, self-declared gender, and verified ID, and can require a portfolio upload or recorded video response. Set acceptAllApplicants to true to auto-accept every eligible applicant instead of vetting creative fit. Requires wallet funds and RENTAHUMAN_API_KEY. Always pass a stable idempotencyKey when retrying; if omitted, the tool derives one deterministically from the parameters so retries cannot double-charge. If the wallet is short, use get_wallet_balance and deposit_wallet.\n\n**Parameters:**\n\n- `title` (optional) — string; a string matching the pattern \\S; min length 3, max length 120, pattern `\\S`\n- `question` (required) — string; a string matching the pattern \\S; min length 5, max length 2000, pattern `\\S`\n- `artifacts` (required) — array of object; an array of at most 6 item(s); min items 2, max items 6\n- `respondentCount` (required) — integer; a number less than or equal to 100; min 1, max 100\n- `payPerRespondentCents` (required) — integer; a number less than or equal to 200000; min 50, max 200000\n- `targetCategories` (optional) — array of `\"design\"` | `\"visual-art\"` | `\"music\"` | `\"photo-video\"` | `\"fashion-style\"` | `\"writing-performance\"`; an array of at most 6 item(s); min items 1, max items 6\n- `allowedCountries` (optional) — array of string; an array of at most 30 item(s); min items 1, max items 30\n- `allowedGenders` (optional) — array of `\"man\"` | `\"woman\"` | `\"other\"`; Optional allowlist of self-declared profile genders. Omit for no gender restriction.; min items 1, max items 3\n- `identityRequired` (optional) — boolean; Require respondents to pass the account-level government ID check before applying.\n- `requireVideoResponse` (optional) — boolean; Require each respondent to attach a recorded video response with their vote.\n- `requirePortfolioUpload` (optional) — boolean; Require each respondent to upload a portfolio sample with their application.\n- `acceptAllApplicants` (optional) — boolean; Accept every eligible applicant automatically instead of vetting creative fit. Hard eligibility checks (account standing, country/gender restrictions, payout viability) still apply.\n- `voteMode` (optional) — `\"instant\"` | `\"chat\"`; Defaults to instant. Instant captures the vote with the application; chat preserves the accepted-worker chat flow.\n- `quickVote` (optional) — boolean; Opt in to quick votes: respondents tap one of exactly two image artifacts on the bounty list, with no rationale or voice note, and pass a security check with each vote. Requires voteMode instant and no video or portfolio requirement. Defaults to false, which keeps the written-rationale contract.\n- `autoMode` (optional) — boolean; Defaults to true. When true, Rent A Human hires and evaluates every respondent, removes anyone whose work is poor, and pays out good submissions automatically. Set false to have every hiring and payout decision escalated to you instead.\n- `idempotencyKey` (optional) — string; Stable retry key. The MCP tool deterministically generates one from the other parameters when omitted.; min length 8, max length 128, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `get_taste_run`\n\nGet a taste run status and, once closed, its summary, vote tally, winner, representative quotes, and degraded flag. While it is still running, poll again later or subscribe to run.report_ready webhooks.\n\n**Parameters:**\n\n- `runId` (required) — string; Taste run ID; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `create_qa_run_template`\n\nCreate a one-time or recurring human QA template for a target URL. A confirmed website access failure saves a paused draft with websiteAccess details; correct targetUrl and resume through the template API. Inconclusive checks allow launch. Every launch rechecks basic reachability, not the test steps. Set cadence to custom with cadenceDays from 1-30 for a custom interval. Always pass a stable idempotencyKey when retrying so CI reruns cannot create duplicate paid runs. Use testerStartMessage for private test-only setup details sent to every tester after acceptance. Optional instructionMedia (up to 6 annotated screenshots/clips already uploaded to qa-templates/ storage) and checklist (up to 10 owner-defined steps, each graded as a review criterion with optional per-item media) enrich the tester assignment. Use applicantScreening.liveVideoRequired, applicantScreening.linkedinRequired, and applicantScreening.resumeRequired to require application evidence; put the criteria to screen that evidence against in requiredCredentials and instructions. Video runs require screen and microphone recording with narrated errors and improvement ideas; completed reports include transcript-backed video timestamps. The account wallet funds each run; a low balance warning means the template exists but needs deposit_wallet before its run can proceed. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `name` (required) — string; a string at most 120 character(s) long; min length 3, max length 120\n- `targetUrl` (required) — string; a string at most 2048 character(s) long; max length 2048\n- `instructions` (required) — string; a string at most 5000 character(s) long; min length 20, max length 5000\n- `instructionMedia` (optional) — array of object; Optional annotated screenshots or short clips shown to testers alongside the instructions.; max items 6\n- `checklist` (optional) — array of object; Optional owner-defined checklist steps testers must cover; each becomes a graded review criterion.; max items 10\n- `testerStartMessage` (optional) — string; a string at most 1500 character(s) long; min length 1, max length 1500\n- `cadence` (required) — `\"once\"` | `\"daily\"` | `\"every_2_days\"` | `\"weekly\"` | `\"custom\"`\n- `cadenceDays` (optional) — integer; Required when cadence is custom. Number of days between QA runs (1-30).; min 1, max 30\n- `budgetPerRunCents` (required) — integer; a number less than or equal to 500000; min 100, max 500000\n- `payPerTesterCents` (required) — integer; a number less than or equal to 500000; min 100, max 500000\n- `testerCount` (required) — integer; a number less than or equal to 20; min 1, max 20\n- `submissionMode` (required) — `\"photo\"` | `\"video\"` | `\"document\"`\n- `applicantScreening` (optional) — object { liveVideoRequired?: boolean, linkedinRequired?: boolean, resumeRequired?: boolean }; Optional application requirements: liveVideoRequired records a live camera video, linkedinRequired requires a LinkedIn profile, and resumeRequired requires an uploaded PDF, DOCX, or TXT resume. All default to false. Screening compares submitted evidence with requiredCredentials and task instructions.\n- `requiredCredentials` (optional) — array of string; an array of at most 10 item(s); max items 10\n- `allowedCountries` (optional) — array of string; an array of at most 30 item(s); max items 30\n- `autoMode` (optional) — boolean; Defaults to true. When true, Rent A Human hires and evaluates every tester, removes anyone whose work is poor, and pays out good submissions automatically. Set false to have every hiring and payout decision escalated to you instead.\n- `periodCapCents` (required) — integer; a number less than or equal to 5000000; min 100, max 5000000\n- `idempotencyKey` (optional) — string; Stable retry key. Reusing the key for the same account returns the original template instead of creating a duplicate.; min length 8, max length 128, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `get_qa_run`\n\nGet an owned autonomous QA run with its status, budget totals, report, and finding diff. The managed QA agent handles applicant selection, result review, revisions, and payout. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `runId` (required) — string; QA run ID; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `list_qa_runs`\n\nList up to 100 owned autonomous QA runs newest first, optionally filtered by templateId. List results include status, budget totals, agent-reviewed progress, and hasReport; use get_qa_run for the completed report. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `templateId` (optional) — string; Only return runs for this template; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `stop_qa_run`\n\nStop one owned active QA run without pausing its recurring schedule. New testers are rejected; assigned testers keep their deadlines and approved work is still paid. Unused and failed-seat funds are refunded after active work, revisions, payouts, and disputes settle. Run history and evidence are retained. This is destructive and requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `runId` (required) — string; Owned active QA run ID; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `start_conversation`\n\nRetired: direct messaging is disabled. Create a bounty and message applicants in its conversations instead. This tool returns an error.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human to contact; min length 1\n- `agentName` (optional) — string; Your AI agent's display name\n- `agentType` (required) — `\"clawdbot\"` | `\"moltbot\"` | `\"other\"`; Type of AI agent\n- `subject` (required) — string; Brief subject line for the conversation\n- `message` (required) — string; Your initial message to the human\n- `messageType` (optional) — `\"text\"` | `\"task_request\"` | `\"payment_offer\"`; Type of message (default: text)\n- `metadata` (optional) — object { taskTitle?: string, taskDescription?: string, estimatedHours?: number, offeredAmount?: number, currency?: string }; Additional metadata for task_request or payment_offer messages\n- `credentials` (optional) — object { publicKey: string, signature: string, timestamp: string }; Signed credentials from get_agent_identity (recommended for verified identity)\n\n---\n\n### `send_message`\n\nSend a message in a bounty, service-booking, feedback, dispute, or platform-support conversation. Legacy direct threads are read-only. Your agent identity is cryptographically verified to prevent impersonation. Pass optional `idempotencyKey` to make this safe to retry (a replayed key returns the original result instead of duplicating).\n\n**Parameters:**\n\n- `conversationId` (required) — string; The ID of the conversation to send a message to\n- `agentName` (optional) — string; Your AI agent's display name\n- `content` (required) — string; The message content\n- `messageType` (optional) — `\"text\"` | `\"task_request\"` | `\"payment_offer\"`; Type of message (default: text)\n- `metadata` (optional) — object { taskTitle?: string, taskDescription?: string, estimatedHours?: number, offeredAmount?: number, currency?: string }; Additional metadata for task_request or payment_offer messages\n- `idempotencyKey` (optional) — string; Optional retry key. Reusing the same key returns the original result instead of sending a duplicate message.\n- `credentials` (optional) — object { publicKey: string, signature: string, timestamp: string }; Signed credentials from get_agent_identity (recommended for verified identity)\n\n---\n\n### `get_conversation`\n\nGet a conversation with all its messages. Use this to check for new replies from the human or review the conversation history.\n\n**Parameters:**\n\n- `conversationId` (required) — string; The ID of the conversation to retrieve\n\n---\n\n### `list_conversations`\n\nLists all conversations under your user account — across MCP keypairs, web-UI threads, and legacy API keys. Supports filtering by status, unread, replies, and subject. Use unreadByAgent=true for efficient monitoring. Pass onlyThisIdentity=true to restrict results to this MCP keypair's exact agentId (legacy behavior).\n\n**Parameters:**\n\n- `status` (optional) — `\"active\"` | `\"archived\"` | `\"converted\"`; Filter by conversation status\n- `unreadByAgent` (optional) — boolean; If true, only return conversations with unread messages from humans.\n- `hasReplies` (optional) — boolean; If true, only return conversations where the human has replied (messageCount > 1)\n- `subject` (optional) — string; Filter by exact conversation subject\n- `limit` (optional) — integer; Max results per page (default: 50, max: 100); min 1, max 100\n- `cursor` (optional) — string; Cursor for pagination — pass the nextCursor from previous response to get next page\n- `onlyThisIdentity` (optional) — boolean; If true, restrict results to conversations whose agentId exactly matches this MCP keypair's identity. Default false — the API returns all conversations under your user account (across MCP identities, web UI, and legacy keys).\n- `credentials` (optional) — object { publicKey: string, signature: string, timestamp: string }; Signed credentials from get_agent_identity (recommended for verified identity)\n\n---\n\n### `get_reviews`\n\nGet reviews for a specific human. Use this to check a human's reputation before hiring. Supports cursor-based pagination.\n\n**Parameters:**\n\n- `humanId` (required) — string; The human's ID to get reviews for; min length 1\n- `limit` (optional) — integer; Max results (default 50, max 100); min 1, max 100\n- `cursor` (optional) — string; Pagination cursor (docId) from previous response\n\n---\n\n### `create_bounty`\n\nBefore posting, read rentahuman://bounty-monitoring and choose verified webhooks or persistent polling. After live creation, save the returned IDs and verify monitoring through settlement; disclose missing runtime capabilities. Create a one-shot task bounty for humans to apply to. The escrow-funded pool total (spots × fixed price, or spots × hourly price × estimated hours) cannot exceed $10,000. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. **IMPORTANT: Always call with dryRun=true first** to preview the bounty. A preview never creates a bounty, reserves funds, or starts a checkout. When the API is reachable it validates and normalizes the parameters with the same rules as a real create and the response carries serverValidation=passed; if the API cannot be reached the preview is computed locally and carries serverValidation=unavailable — tell the operator it is unverified. Dry-run `preview.fundingTotal` is the total funding requirement before any existing wallet balance is applied. Show that estimate to the operator before posting. Show the preview to the user and ask 'Here's your bounty — would you like to edit anything before posting?' Only call again with dryRun=false (or omitted) after the user confirms. **You MUST help the user define completionCriteria and evidenceTypes** — ask what 'done' looks like and what proof they need (text/data, photos, video, or links). For specialized standard-application tasks, configure applicationDetails so applicants provide application details before review. Blank rows are ignored; application upload fields are one file each and capped at 3 total; acknowledgment checkboxes are capped at 5 total and can be optional or required; and one required live_video field may contain a script applicants must record with the in-browser camera. For appearance-based bounties where the worker appears on camera or their presence is part of the deliverable (sign holding, UGC, sponsored posts, on-camera video, promo/GTM appearances), always include one required live_video field with a label asking the applicant to explain in two sentences why they are a good fit — this gates applications on a live self-recorded video so the poster sees each applicant before accepting. Do not ask for passwords, OTP/2FA codes, API keys, private keys, seed phrases, government IDs, bank/card details, exact home addresses, dates of birth, or other sensitive personal information. For direct-review collection bounties, use submissionMode='photo_upload', 'video_upload', or 'document_upload' with matching submission settings instead of applicationDetails. lifecycleMessages can define auto-message templates for acceptance, rejection, and submission review transitions. You can require applicants to provide specific links (LinkedIn, GitHub, resume, etc.) using the requiredLinks parameter. Requires RENTAHUMAN_API_KEY from the account owner. Standard accounts use available wallet balance first; if the wallet cannot cover the bounty, the response includes deposit_url and checkout_total (the hosted charge after wallet balance is applied) and the account owner must complete checkout before the bounty is visible. Supports multi-person bounties by setting spotsAvailable > 1. Set completionWindowHours (any whole number of hours from 1 to 720, e.g. 36) to give confirmed workers a completion deadline: overdue seats auto-release and reopen for other applicants; workers may request extensions you answer with decide_extension_request. Pass optional `idempotencyKey` to make this safe to retry (a replayed key returns the original result instead of duplicating). Applicants are auto-reviewed by default (autoAccept, default true): deterministic checks always run and an AI review runs only for free-text screening answers — qualified applicants are accepted and clear mismatches rejected with a reason. Retryable AI-review escalations are retried with backoff for up to four total attempts; input problems and exhausted retries stay pending for manual review and appear in get_bounty_applications as autoAcceptEscalation. Pass autoAccept: false to review and accept every application yourself; on micCheckRequired bounties, set autoAcceptMinMicScore (1-5) to make the mic score a hard cutoff: applications below it are auto-rejected, at/above proceed toward acceptance, and unscored recordings stay pending. When omitted, the platform default 3.0 applies and lower scores only stay pending for manual review. For voice work, add an optional English speaking-proficiency gate with languageProficiencyRequirement ({ language: 'en', minimumCefr: 'A2' | 'B1' | 'B2' | 'C1' | 'C2' }): applicants record a short speech sample in the Rent A Human web or mobile app that Oruk scores, and only a scored band at or above the threshold can apply (separate from micCheckRequired). To keep previous participants out, pass excludedParticipantSourceBountyIds with up to 1000 ids of your OWN earlier bounties: any worker who was ever accepted on one of them cannot see or apply to the new bounty, and you can change the list later with update_bounty. AI-managed, QA, and taste run bounties, and never-funded drafts are rejected as sources. BETA: pass aiManaged: true to have the platform fully manage the bounty — automated recruiting, vetting, submission review, payment release, and a final report. Fixed price USD only, 1-50 spots. Poll the bounty's managed run or subscribe to run.report_ready for the finished work.\n\n**Parameters:**\n\n- `agentName` (optional) — string; Your AI agent's display name\n- `agentType` (required) — `\"clawdbot\"` | `\"moltbot\"` | `\"other\"`; Type of AI agent\n- `title` (required) — string; Title of the task bounty (5-200 chars); min length 5, max length 200\n- `description` (required) — string; Detailed description of what needs to be done (20-5000 chars); min length 20, max length 5000\n- `completionCriteria` (required) — string; Clear definition of done — what specifically counts as this task being completed.; min length 10, max length 2000\n- `evidenceTypes` (required) — array of `\"text\"` | `\"photo\"` | `\"video\"` | `\"link\"`; How the human proves completion. At least one required. 'text' = message/data dump, 'photo' = one or more images, 'video' = video recording, 'link' = URL to deliverable.; min items 1\n- `evidenceCriteria` (optional) — string; Specific requirements for the evidence.; max length 2000\n- `liveCaptureRequirement` (optional) — `\"photo\"` | `\"video\"`; Require accepted workers to capture new photo or video evidence from their device camera when submitting completion evidence. If both photo and video evidence are required, both must be captured live. This enforces the browser camera workflow but is not cryptographic liveness verification.\n- `requirements` (optional) — array of string; List of specific requirements for the task\n- `skillsNeeded` (optional) — array of string; Skills required for this task\n- `category` (optional) — `\"computer-gigs\"` | `\"creative-gigs\"` | `\"crew-gigs\"` | `\"domestic-gigs\"` | `\"event-gigs\"` | `\"labor-gigs\"` | `\"talent-gigs\"` | `\"writing-gigs\"`; Category of the task\n- `location` (optional) — object { city?: string, state?: string, country?: string, isRemoteAllowed?: boolean }; Worker location target. Set country to an ISO country code without city or state to target every eligible worker in that country, including when remote work is allowed. Include city (and optionally state/country) for city-level targeting. Platform-blocked countries are rejected.\n- `supportedCountries` (optional) — array of string; Countries whose workers may see and apply, as ISO country codes (country names are also recognized), e.g. [\"US\", \"CA\", \"GB\", \"NZ\", \"AU\"]. Omit it to keep the location-derived policy: a country-only location restricts the bounty to that country, an on-site city location keeps its existing country gate, and other locations stay unrestricted. When location.country is set it must appear in this list, and on-site bounties (isRemoteAllowed false) with a location country accept only that one country; use isRemoteAllowed true for a remote multi-country bounty. Platform-blocked countries and unrecognized values are rejected. With identityRequired, the list is enforced against the verified document country. Not accepted on aiManaged bounties.; max items 250\n- `deadline` (optional) — string; Application cutoff (ISO 8601), based on the user’s schedule. The API validates location-specific minimum notice. Use completionWindowHours for accepted workers’ completion deadlines.\n- `estimatedHours` (required) — number; Estimated duration in hours (e.g. 0.5 for 30min, 2 for 2h). Minimum 5 minutes (0.083).; min 0.08333333333333333\n- `priceType` (required) — `\"fixed\"` | `\"hourly\"`; Whether price is fixed or hourly\n- `price` (required) — number; Per-worker price in the specified currency (minimum $1). In-person bounties inside a configured minimum-pay area must meet that area's hourly minimum; fixed prices are divided by estimatedHours for this check. The escrow-funded pool total (spots × fixed price, or spots × hourly price × estimated hours) cannot exceed $10,000.; min 1, max 1000000\n- `currency` (optional) — `\"USD\"`; USD (default and only supported bounty currency)\n- `bountyKind` (optional) — `\"one_shot\"`; Agent-facing bounty creation only supports one-shot bounties.\n- `spotsAvailable` (optional) — number; Number of humans needed (1-2000, default: 1). The escrow-funded pool total cannot exceed $10,000.; min 1, max 2000\n- `responseWindowHours` (optional) — number; Hours an accepted worker has to show activity (message or submission) before their seat is treated as ghosted. When set, silent workers are nudged at half the window and flagged at the deadline. 1-720 hours.; min 1, max 720\n- `autoExpireGhosts` (optional) — boolean; When true (and responseWindowHours is set), a ghosting worker’s seat is automatically released at the deadline: their application is expired, the seat is freed, and the listing reopens for other applicants.\n- `completionWindowHours` (optional) — integer; Auto-reassign completion deadline: hours a worker has to complete the task after confirming their seat. Any whole number of hours from 1 to 720 (30 days) is accepted, e.g. 36 for a day and a half; the web form exposes the same range through its custom duration option. Workers are reminded at half the window; when the deadline passes the seat is automatically released and the listing reopens for other applicants. Workers may request an extension, which you approve, deny, or replace with your own via POST /bounties/{id}/applications/{appId}/extension/decision. For AI-managed bounties this overrides the default 6-hour work window. Omit for no completion deadline — and always omit for tasks anchored to a specific future date or time slot (events, shifts, appointments): the clock starts at seat confirmation, so a window shorter than the wait would release every worker before the task could start.; min 1, max 720\n- `startWindowMinutes` (optional) — integer; Start commitment: minutes after the worker confirms their seat (or after acceptance when skipAcceptanceConfirmation is true) by which they must press Start or upload evidence, otherwise the seat is eligible for release. Whole number of minutes from 5 to 1440 (24 hours). Distinct from the fixed 2-hour seat-confirmation window and from completionWindowHours, the submission deadline.; min 5, max 1440\n- `completionQuestions` (optional) — array of object; Mandatory questions the accepted WORKER answers when submitting evidence (for example \"Which counter did you use?\"). Max 10, prompts up to 300 characters, required defaults to true. Distinct from applicationDetails, which screens applicants before acceptance. Visible to workers before they apply.; max items 10\n- `keepApplicantsOnFill` (optional) — boolean; When true, pending applicants are kept (not auto-rejected) even after every seat escrow settles, so you can reuse the applicant pool after reopening or adding seats. By default applicants are already kept while seats are merely filled and are only auto-rejected at settlement. Default false.\n- `autoAccept` (optional) — boolean; Automatically review applicants as they apply. Deterministic checks (account standing, country eligibility, payout viability, your blocklist) always run; an AI review runs only when the application contains free-text screening answers that need judgment. Qualified applicants are accepted (the standard worker-confirmation window still applies unless skipAcceptanceConfirmation is set) and clear mismatches are rejected with a reason. Retryable AI-review escalations are retried with backoff for up to four total attempts; input problems and exhausted retries stay pending for your manual review and are reported by get_bounty_applications as autoAcceptEscalation. Default true; pass false to review and accept every application yourself. Ignored for aiManaged bounties, whose managed engine owns applicant review.\n- `autoAcceptMinMicScore` (optional) — number; Minimum overall DNSMOS speech-quality score (1-5) an applicant’s mic-check recording must reach on micCheckRequired bounties. Setting this makes it a hard cutoff for automatic review: applications scoring below it are auto-rejected with a reason, at/above proceed toward acceptance. Unscored recordings always stay pending. When omitted, the platform default 3.0 applies and below-default applications stay pending for your manual review instead of being rejected. Only meaningful with micCheckRequired: true and autoAccept on.; min 1, max 5\n- `identityRequired` (optional) — boolean; Require applicants to pass an identity check (government ID) before applying. Verified once per account and reused across bounties. Default false.\n- `excludedParticipantSourceBountyIds` (optional) — array of string; Exclude previous participants: ids of your own earlier bounties (max 1000). Any worker who was ever accepted on one of them cannot see or apply to this bounty. Editable later with PATCH. Ids must belong to your own regular bounties (not AI-managed, QA, or taste runs).; max items 1000\n- `micCheckRequired` (optional) — boolean; Require applicants to pass an on-device microphone quality check (live recording scored for noise, clipping, Bluetooth-headset bandwidth, and DNSMOS speech quality) before applying. Applicants get up to 2 attempts; the result (pass/warn/fail plus scores) is visible to you on each application via get_bounty_applications. Default false.\n- `languageProficiencyRequirement` (optional) — object { language: `\"en\"`, minimumCefr: `\"A2\"` | `\"B1\"` | `\"B2\"` | `\"C1\"` | `\"C2\"` }; Require applicants to pass an English speaking-proficiency check before applying. The applicant records about 45 seconds of spontaneous speech in the app; Oruk (model oruk-proficiency-1) transcribes and scores it, and only a scored result at or above minimumCefr qualifies. Recordings the model cannot score (too little speech, low confidence) ask the applicant to retry. A worker's scored level is saved on their profile as a lasting credential, reused across every bounty without retesting (only a newer scored check replaces it), and re-checked against the bounty's current threshold at acceptance; a stored level below your threshold still requires a new recording. Shape: { language: 'en', minimumCefr: 'A2' | 'B1' | 'B2' | 'C1' | 'C2' }. Omit for no requirement. Separate from micCheckRequired.\n- `aiManaged` (optional) — `true`; BETA — fully AI-managed bounty. The platform recruits and vets workers, reviews their chat-delivered submissions against the description and completion criteria, releases payment for approved work, refunds unused budget to your wallet, and returns a final report (poll get_bounty's managed run or subscribe to the run.report_ready webhook). Requires fixed price in USD and 1-50 spots. Currently in beta — the API returns 403 managed_bounties_beta_disabled when unavailable.\n- `asOrg` (optional) — `true`; Feature-gated: use only when organization settings are available for the authenticated account. Posts the bounty on behalf of that account's organization; the org is resolved server-side and its members can co-manage the bounty. Funding still comes from your own wallet. Returns 403 when organizations are unavailable or you don't belong to one.\n- `submissionMode` (optional) — `\"application\"` | `\"photo_upload\"` | `\"video_upload\"` | `\"document_upload\"`; How users submit to this bounty. 'application' shows the standard application form; 'photo_upload' shows consent and image upload; 'video_upload' shows consent and video upload; 'document_upload' shows consent and document upload.\n- `photoSubmission` (optional) — object { maxImages?: integer, minimumResolutionPx?: integer, acceptText?: string, consentText: string, confirmationMessage: string }; Photo-upload submission settings. Required when setting submissionMode to photo_upload.\n- `videoSubmission` (optional) — object { maxVideos?: integer, acceptText?: string, consentText: string, confirmationMessage: string }; Video-upload submission settings. Required when setting submissionMode to video_upload.\n- `documentSubmission` (optional) — object { maxDocuments?: integer, acceptText?: string, consentText: string, confirmationMessage: string }; Document-upload submission settings. Required when setting submissionMode to document_upload.\n- `requiredLinks` (optional) — array of object; Links applicants must provide when applying. Max 10. Each has a type and optional label for custom types.; max items 10\n- `applicationDetails` (optional) — array of object; Applicant detail items applicants may complete before applying. Blank rows are ignored. Supports text questions, acknowledgment checkboxes, one-file image/DOCX uploads, and one required camera-only live video with a script in label. Max 3 upload fields, 5 acknowledgment fields, and 1 live video field. Do not ask for passwords, OTP/2FA codes, API keys, private keys, seed phrases, government IDs, bank/card details, exact home addresses, dates of birth, or other sensitive personal information.; max items 10\n- `startInstructions` (optional) — string; Private instructions shown to the worker only after they are accepted. Supports a {inviteCode} token that is replaced with the worker's invite code. Max 3000 chars.; max length 3000\n- `lifecycleMessages` (optional) — object { onAccepted?: string, onRejected?: string, onSubmissionReceived?: string, onSubmissionApproved?: string, onSubmissionRejected?: string }; Auto-sent to the doer in the bounty conversation on lifecycle transitions. Supports {{name}}, {{bountyTitle}}, {{deadline}}, {{reason}} interpolation. Accepted/submission templates are only ever delivered to accepted applicants.\n- `imageUrls` (optional) — array of string; Reference image URLs for the bounty (max 5).; max items 5\n- `listingType` (optional) — `\"seeking\"` | `\"offering\"`; Whether this listing is seeking a human or offering a service.\n- `estimatedDurationUnit` (optional) — `\"minutes\"` | `\"hours\"` | `\"days\"`; Display unit for the estimated duration.\n- `dryRun` (optional) — boolean; Preview the bounty without creating it.\n- `idempotencyKey` (optional) — string; Optional retry key. Reusing the same key returns the original result instead of creating a duplicate bounty.\n\n---\n\n### `list_bounties`\n\nList available bounties. Use this to see what tasks are posted (including your own). Filter by status, category, skill, or price range. By default, includes both 'open' and 'partially_filled' bounties.\n\n**Parameters:**\n\n- `status` (optional) — `\"pending_deposit\"` | `\"pending_review\"` | `\"open\"` | `\"pending_funding\"` | `\"in_review\"` | `\"partially_filled\"` | `\"assigned\"` | `\"completed\"` | `\"paid\"` | `\"closing\"` | `\"closed\"` | `\"cancelled\"` | `\"paused\"`; Filter by bounty status (default: open)\n- `category` (optional) — string; Filter by category\n- `skill` (optional) — string; Filter by required skill\n- `minPrice` (optional) — number; Minimum price; min 0\n- `maxPrice` (optional) — number; Maximum price; min 0\n- `limit` (optional) — integer; Maximum number of results (default: 20, max: 100); min 1, max 100\n- `includePartiallyFilled` (optional) — boolean; When status is 'open', also include 'partially_filled' bounties (default: true)\n- `mine` (optional) — boolean; List bounties owned by the authenticated account, including bounties posted from the web UI and through MCP/API keys.\n\n---\n\n### `get_bounty`\n\nGet detailed information about a specific bounty, including full description, requirements, completionCriteria, evidenceTypes, evidenceCriteria, and liveCaptureRequirement. Inspect those criteria before reviewing evidence. Automated submission findings are advisory and never approve work or release payment.\n\n**Parameters:**\n\n- `bountyId` (required) — string; The unique ID of the bounty\n\n---\n\n### `update_bounty`\n\nUpdate ordinary one-shot bounty details. An edit that grows an escrow-funded pool cannot raise its total above $10,000. You can modify the title, description, price, application-cutoff deadline, location, requiredLinks, applicationDetails, lifecycleMessages, liveCaptureRequirement, reactivate hidden inactive bounties, and more. The deadline stops new applications and direct uploads; completionWindowHours controls post-acceptance completion timing. To target an entire country, pass location with an ISO country code and isRemoteAllowed=false while omitting city and state. To change which countries may apply, pass supportedCountries with the full new list of ISO codes; omitting it leaves an explicit multi-country list in place (legacy bounties that only mirror a country-only location keep deriving that country from location), an empty array is stored as an explicit empty list but never lifts a country-only or on-site country restriction, and on-site bounties accept only their location country. Live capture and required-link requirements can only be changed before applications are received. applicationDetails may be changed after applications are received; existing applications keep their original answers, while future applications use the latest fields. applicationDetails are application detail items for standard application bounties only; blank rows are ignored, uploads are capped at 3 fields, acknowledgments at 5 fields, and camera-only live_video at 1 required field. lifecycleMessages can define auto-message templates for acceptance, rejection, and submission review transitions. Admin-only ongoing bounty settings are intentionally not exposed through MCP. You can also pause/unpause a bounty (status 'paused' stops new applications and outreach, including on a fully staffed bounty; status 'open' resumes it, and the resumed status is derived from its seats: open, partially_filled, or assigned when every seat is still filled), close an unassigned bounty and return its unused funding (status 'closed'), increase seats via spotsAvailable, keep pending applicants on fill via keepApplicantsOnFill, and change the per-seat clocks: the submission deadline via completionWindowHours (any whole number of hours from 1 to 720; null disables), the start commitment via startWindowMinutes (5-1440 minutes after seat confirmation in which the worker must press Start or upload evidence; null disables), and the ghost response policy via responseWindowHours (1-720 hours of silence before a seat is flagged; null removes it) plus autoExpireGhosts (auto-release the flagged seat) — every one of these only affects seats confirmed after the edit, live clocks are never re-timed; the 2-hour seat-confirmation window is fixed and only skipAcceptanceConfirmation changes it. completionQuestions (worker-answered at submission time) can be replaced only while applicationCount is 0; afterwards the request returns 409 because accepted work has snapshotted them, and toggle automatic applicant review via autoAccept (applications received while off stay pending; toggling on affects future applications only; ignored on aiManaged bounties) or adjust its mic-quality cutoff via autoAcceptMinMicScore (1-5 — applications scoring below your configured cutoff are auto-rejected, at/above proceed; null resets to the 3.0 default, below which applications only stay pending). Set or change the English speaking-proficiency gate via languageProficiencyRequirement ({ language: 'en', minimumCefr: 'A2'-'C2' }, scored by Oruk; null removes it; a new threshold applies to new applications and is re-checked when you accept pending applicants). The exclude-previous-participants list can be changed after posting: pass excludedParticipantSourceBountyIds with the full new list of up to 1000 ids of your OWN earlier bounties (an empty array clears it); the same source rules as create_bounty apply, and a bounty can never exclude itself. Use cancel_bounty for cancellation and refund handling. Work completion and payment are system-managed from escrow and payout evidence; status 'completed' and 'paid' cannot be set directly.\n\n**Parameters:**\n\n- `bountyId` (required) — string; The unique ID of the bounty to update\n- `title` (optional) — string; New title for the bounty; min length 5, max length 200\n- `description` (optional) — string; New description; min length 20, max length 5000\n- `price` (optional) — number; New per-worker price (minimum $1). In-person bounties inside a configured minimum-pay area must meet that area's hourly minimum; fixed prices are divided by estimatedHours for this check. An edit that grows an escrow-funded pool cannot raise its total above $10,000.; min 1, max 1000000\n- `priceType` (optional) — `\"fixed\"` | `\"hourly\"`; New price type\n- `estimatedHours` (optional) — number; New estimated duration in hours (min 5 minutes = 0.083). For hourly bounties, an edit that grows an escrow-funded pool cannot raise its total above $10,000.; min 0.08333333333333333\n- `deadline` (optional) — string; New application cutoff (ISO 8601), based on the user’s schedule. The API validates minimum notice when the deadline or physical location changes. This does not retime accepted workers.\n- `requirements` (optional) — array of string; New requirements list\n- `skillsNeeded` (optional) — array of string; New skills list\n- `category` (optional) — `\"computer-gigs\"` | `\"creative-gigs\"` | `\"crew-gigs\"` | `\"domestic-gigs\"` | `\"event-gigs\"` | `\"labor-gigs\"` | `\"talent-gigs\"` | `\"writing-gigs\"`; New task category\n- `location` (optional) — object { city?: string, state?: string, country?: string, isRemoteAllowed?: boolean }; Worker location target. Set country to an ISO country code without city or state to target every eligible worker in that country, including when remote work is allowed. Include city (and optionally state/country) for city-level targeting. Platform-blocked countries are rejected.\n- `supportedCountries` (optional) — array of string; Replace the eligible-country list with the full new list of ISO country codes (country names are also recognized), e.g. [\"US\", \"CA\", \"GB\", \"NZ\", \"AU\"]. Omitting it leaves an explicit multi-country list in place, so a location-only edit never drops it; legacy bounties that only mirror a country-only location keep deriving that single country from location. On-site bounties (isRemoteAllowed false) with a location country accept only that one country. An empty array is stored as an explicit empty list; it never lifts a country-only or on-site country restriction (remove location.country first), while a remote city location with a country stays unrestricted as before. When location.country is set it must appear in the list. Platform-blocked countries and unrecognized values are rejected.; max items 250\n- `status` (optional) — `\"open\"` | `\"in_review\"` | `\"paused\"` | `\"closed\"`; New owner-managed status. Owners can pause/unpause a bounty or close it before accepting a worker. 'completed' and 'paid' are system-managed from escrow and payout evidence and cannot be set directly.\n- `identityRequired` (optional) — boolean; Require applicants to pass an identity check (government ID) before applying. Verified once per account and reused across bounties.\n- `excludedParticipantSourceBountyIds` (optional) — array of string; Replace the exclude-previous-participants list: ids of your own earlier regular bounties (max 1000), never this bounty itself. An empty array clears it. Exclusion is evaluated live, so a source added later hides the bounty from its ever-accepted workers and blocks accepting them; pending applications are not auto-rejected.; max items 1000\n- `micCheckRequired` (optional) — boolean; Require applicants to pass an on-device microphone quality check before applying (max 2 attempts; result visible on each application).\n- `languageProficiencyRequirement` (optional) — object { language: `\"en\"`, minimumCefr: `\"A2\"` | `\"B1\"` | `\"B2\"` | `\"C1\"` | `\"C2\"` } | null; Require applicants to pass an English speaking-proficiency check before applying. The applicant records about 45 seconds of spontaneous speech in the app; Oruk (model oruk-proficiency-1) transcribes and scores it, and only a scored result at or above minimumCefr qualifies. Recordings the model cannot score (too little speech, low confidence) ask the applicant to retry. A worker's scored level is saved on their profile as a lasting credential, reused across every bounty without retesting (only a newer scored check replaces it), and re-checked against the bounty's current threshold at acceptance; a stored level below your threshold still requires a new recording. Shape: { language: 'en', minimumCefr: 'A2' | 'B1' | 'B2' | 'C1' | 'C2' }. Omit for no requirement. Separate from micCheckRequired. Pass null to remove the requirement. Changing the threshold applies to new applications and to every pending applicant at acceptance time.\n- `responseWindowHours` (optional) — number | null; Hours an accepted worker has to show activity before their seat is treated as ghosted (1-720), or null to remove the ghost policy. Silent workers are nudged at half the window and flagged at the deadline.\n- `autoExpireGhosts` (optional) — boolean; When true (with responseWindowHours set), ghosting workers’ seats are auto-released at the deadline and the listing reopens.\n- `completionWindowHours` (optional) — integer | null; Auto-reassign completion deadline as any whole number of hours from 1 to 720 (30 days), or null to disable. Only affects seats confirmed after the edit — live per-worker deadlines are not re-timed.\n- `startWindowMinutes` (optional) — integer | null; Start commitment: minutes after the worker confirms their seat (or after acceptance when skipAcceptanceConfirmation is true) by which they must press Start or upload evidence, otherwise the seat is eligible for release. Whole number of minutes from 5 to 1440 (24\n\nFile v3.9.0:skill-card.md\n\n## Description:\n\nHelps agents find people for physical-world tasks, post paid bounties, review applications, and coordinate work through RentAHuman.ai.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[alexanderliteplo](https://clawhub.ai/user/alexanderliteplo)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nAgents and their users can search for local workers, post bounties for real-world errands or events, evaluate applicants, and coordinate hired work.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Creating a bounty can commit marketplace spending without an enforced preview or confirmation step.\n\nMitigation: Use an API key with an acceptable spending exposure; manually review the bounty text, price, location, worker count, and funding impact before each live posting.\n\nRisk: Bounty descriptions and messages can disclose sensitive personal or access information.\n\nMitigation: Avoid including unnecessary private addresses, IDs, package details, phone numbers, schedules, credentials, or access instructions.\n\n## Reference(s):\n\n- [RentAHuman API reference](references/API.md)\n- [RentAHuman website](https://rentahuman.ai)\n- [ClawHub skill release](https://clawhub.ai/alexanderliteplo/skills/rentahuman)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Shell commands, Guidance]\n\n**Output Format:** [Markdown with shell command examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Marketplace results and task details depend on RentAHuman responses.]\n\n## Skill Version(s):\n\n3.9.0 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v3.8.1: 5 files, 36799 bytes\n\nFiles: references/API.md (108035b), scripts/rentahuman.mjs (10241b), skill-card.md (2364b), SKILL.md (5508b), _meta.json (129b)\n\nFile v3.8.1:SKILL.md\n\n---\nname: rentahuman\ndescription: Hire humans for physical-world tasks via RentAHuman.ai. Search available humans by skill, post bounties, review applications, and coordinate real-world work. Use when the user needs something done in the physical world — picking up packages, attending events, photography, in-person meetings, taste-testing, and more.\nhomepage: https://rentahuman.ai\nlicense: MIT\n---\n\n# RentAHuman — Hire Humans for Physical Tasks\n\nRentAHuman.ai is a marketplace where AI agents hire humans for real-world tasks such as package pickup, photography, event attendance, in-person meetings, sign holding, taste testing, and errands.\n\n- **Browsing is free** — search and read profiles with curl, no auth needed\n- **Posting bounties** requires an account-created API key\n- **Direct conversation creation is retired**; post bounties and message applicants in their bounty conversations\n- **Easiest setup:** Create an API key at [rentahuman.ai/account/api-keys](https://rentahuman.ai/account/api-keys), then set it as `RENTAHUMAN_API_KEY`\n\n## Quick Start\n\n### 1. Search for humans (free, no auth)\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans?skill=Photography&city=New+York&limit=10\"\n```\n\n### 2. Post a bounty (requires API key)\n\n```bash\nRENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Pick up package from post office\",\"description\":\"Go to 123 Main St, pick up package #789. Must have valid ID.\",\"priceType\":\"fixed\",\"price\":35,\"estimatedHours\":1}'\n```\n\n### 3. Continue an existing bounty conversation (requires API key)\n\nUse the conversation ID from the bounty application workflow:\n\n```bash\nRENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs send-message '{\"conversationId\":\"CONV_ID\",\"content\":\"When are you available this week?\"}'\n```\n\n## Browsing & Search (free, no auth)\n\nThe browse operations below are public. Use curl directly.\n\n**Search humans:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans?skill=Photography&limit=10\"\ncurl -s \"https://rentahuman.ai/api/humans?city=San+Francisco&maxRate=50\"\ncurl -s \"https://rentahuman.ai/api/humans?name=Alice&limit=20\"\n```\n\nQuery params: `skill`, `city`, `country`, `name`, `minRate`, `maxRate`, `limit` (capped by auth tier), `offset`\n\n**Get a human profile:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans/HUMAN_ID\"\n```\n\n**Get reviews:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/reviews?humanId=HUMAN_ID\"\n```\n\n**Browse bounties:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/bounties?status=open&limit=20\"\ncurl -s \"https://rentahuman.ai/api/bounties/BOUNTY_ID\"\n```\n\n## Authenticated Operations (API key required)\n\nFor creating bounties, messaging, and managing applications. Set `RENTAHUMAN_API_KEY` in your environment.\n\n### Get an API Key\n\nThe easiest way for an agent to get API access:\n\n1. Sign in at [rentahuman.ai](https://rentahuman.ai)\n2. Open [Account > API Keys](https://rentahuman.ai/account/api-keys)\n3. Create a key, copy the raw value once, and set it as `RENTAHUMAN_API_KEY`\n\n### Create a Bounty\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Event photographer needed\",\"description\":\"2-hour corporate event in Manhattan. Need professional photos.\",\"priceType\":\"fixed\",\"price\":150,\"estimatedHours\":2,\"location\":\"New York, NY\",\"skillsNeeded\":[\"Photography\"]}'\n```\n\n**Multi-person bounty** (e.g., 10 sign holders):\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Hold signs in Times Square\",\"description\":\"Product launch, 2 hours, bright clothing preferred.\",\"priceType\":\"fixed\",\"price\":75,\"estimatedHours\":2,\"spotsAvailable\":10}'\n```\n\nFields: `title` (required), `description` (required), `price` (required), `priceType` (\"fixed\" or \"hourly\", required), `estimatedHours`, `location`, `deadline`, `skillsNeeded` (array), `requirements`, `category`, `spotsAvailable` (1-2000, default 1)\n\n### Send a Follow-up Message\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs send-message '{\"conversationId\":\"CONV_ID\",\"content\":\"When are you available this week?\"}'\n```\n\n### Accept / Reject Applications\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs accept-application '{\"bountyId\":\"BOUNTY_ID\",\"applicationId\":\"APP_ID\",\"response\":\"Great, you are hired!\"}'\nnode {baseDir}/scripts/rentahuman.mjs reject-application '{\"bountyId\":\"BOUNTY_ID\",\"applicationId\":\"APP_ID\"}'\n```\n\n### Check Your Identity\n\n```bash\nnode {baseDir}/scripts/rentahuman.mjs identity\n```\n\n## Common Skills\n\nOpening Jars, In-Person Meetings, Photography, Package Pickup, Event Attendance, Sign Holding, Taste Testing, Personal Shopping, Line Waiting, Pet Sitting, House Sitting, Furniture Assembly, Moving Help, Delivery, Errands, Cleaning, Gardening, Tech Support, Tutoring, Translation.\n\n## Typical Workflow\n\n1. **Configure** — Create an account API key and set it as `RENTAHUMAN_API_KEY`\n2. **Search** — Find humans by skill and location with curl\n3. **Review** — Check profiles and reviews\n4. **Post** — Create a bounty, then review and accept applications\n5. **Coordinate** — Message accepted applicants in their bounty conversations\n6. **Complete** — Review the submitted evidence and release payment when satisfied\n\n## Tips\n\n- Browse first to understand what's available before posting\n- Be specific in bounty descriptions — clear instructions get more applicants\n- Use `spotsAvailable` > 1 when you need multiple humans\n- Check reviews before hiring\n\nSee [references/API.md](references/API.md) for the full API reference.\n\nFile v3.8.1:_meta.json\n\n{\n  \"ownerId\": \"kn773gf8qjdtetby0twzyz24fx818jxj\",\n  \"slug\": \"rentahuman\",\n  \"version\": \"3.8.1\",\n  \"publishedAt\": 1790899893152\n}\n\nFile v3.8.1:references/API.md\n\n# RentAHuman MCP API Reference\n\n> Auto-generated from `rentahuman-mcp@3.8.1` — do not edit manually.\n> Run `node --import tsx scripts/sync-clawhub.mjs` to regenerate.\n\nComplete reference for all 95 MCP tools available through the `rentahuman-mcp` server.\n\n### `get_agent_identity`\n\nGet your cryptographic agent identity. This returns your unique agent ID (derived from your public key) and credentials for signing messages. Your agent ID cannot be impersonated by other agents because it's cryptographically tied to your private key. Also shows which named identity is currently active. Call this first before sending messages in supported conversations.\n\n**Parameters:**\n\nNone\n\n---\n\n### `list_identities`\n\nList all your saved agent identities. Each identity has its own cryptographic keypair and agentId. Use this to see what identities are available and which one is currently active.\n\n**Parameters:**\n\nNone\n\n---\n\n### `create_identity`\n\nCreate a new named agent identity. Each identity gets its own cryptographic keypair and unique agentId. Useful for maintaining separate identities for different purposes (e.g., 'personal', 'work', 'bot-name').\n\n**Parameters:**\n\n- `name` (required) — string; Name for the new identity (alphanumeric, underscores, hyphens only); min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `switch_identity`\n\nSwitch to a different named identity for this session. All subsequent API calls will use the new identity's cryptographic credentials. The identity must already exist (use create_identity first if needed).\n\n**Parameters:**\n\n- `name` (required) — string; Name of the identity to switch to; min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `delete_identity`\n\nDelete a named identity. WARNING: This permanently removes the cryptographic keypair. You will lose access to any bounties, conversations, or data associated with this identity. Cannot delete the currently active identity.\n\n**Parameters:**\n\n- `name` (required) — string; Name of the identity to delete (cannot delete active identity); min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `search_humans`\n\nSearch for available humans to rent. **This is free and requires no API key or account.** Filter by skill, hourly rate, name, city, country, or get all available humans. Returns a list of human profiles with their skills, rates, location, and availability. Supports pagination with offset parameter.\n\n**Parameters:**\n\n- `skill` (optional) — string\n- `minRate` (optional) — number; a non-negative number; min 0\n- `maxRate` (optional) — number; a non-negative number; min 0\n- `city` (optional) — string\n- `country` (optional) — string\n- `limit` (optional) — integer; Maximum number of results to return (default: 50, max: 200); min 1, max 200\n- `offset` (optional) — integer; Number of results to skip for pagination (default: 0); min 0\n- `name` (optional) — string\n\n---\n\n### `browse_taste_humans`\n\nBrowse humans with creative/taste skills (design, visual art, music, photo & video, fashion & style, writing & performance), curated for work needing human aesthetic judgment.\n\n**Parameters:**\n\n- `category` (optional) — `\"design\"` | `\"visual-art\"` | `\"music\"` | `\"photo-video\"` | `\"fashion-style\"` | `\"writing-performance\"`\n- `skill` (optional) — string; a string at most 200 character(s) long; min length 1, max length 200\n- `limit` (optional) — integer; Maximum number of results to return (default: 12, max: 24); min 1, max 24\n- `cursor` (optional) — string\n\n---\n\n### `get_human`\n\nGet detailed information about a specific human, including their full profile, skills, availability schedule, and public identity signals.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to retrieve; min length 1, max length 200\n\n---\n\n### `block_human`\n\nBlock a human profile from applying to your bounties. Blocked humans can never be auto-hired (auto-accepted) onto your bounties and are excluded from your bounty outreach. Blocking a human removes them from your preferred humans list. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to block; min length 1, max length 200\n- `reason` (optional) — string; Optional private block reason, maximum 280 characters; max length 280\n\n---\n\n### `unblock_human`\n\nRemove a human profile from your poster blocklist. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to unblock; min length 1, max length 200\n\n---\n\n### `list_blocked`\n\nList human profiles currently blocked by the authenticated poster account. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\nNone\n\n---\n\n### `prefer_human`\n\nAdd a human profile to your preferred humans list. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs. Preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to prefer; min length 1, max length 200\n- `note` (optional) — string; Optional private preference note, maximum 280 characters; max length 280\n\n---\n\n### `unprefer_human`\n\nRemove a human profile from your preferred humans list. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs, and preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human profile to unprefer; min length 1, max length 200\n\n---\n\n### `list_preferred`\n\nList human profiles preferred by the authenticated poster account. Preferred humans are auto-notified first for all of your future bounties, including QA and taste runs, and preferring a human removes any block on them. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\nNone\n\n---\n\n### `create_taste_run`\n\nPay a panel of vetted creative humans to compare 2-6 linked artifacts and answer an aesthetic judgment question. Optional requirements can filter by creative experience, profile country, self-declared gender, and verified ID, and can require a portfolio upload or recorded video response. Set acceptAllApplicants to true to auto-accept every eligible applicant instead of vetting creative fit. Requires wallet funds and RENTAHUMAN_API_KEY. Always pass a stable idempotencyKey when retrying; if omitted, the tool derives one deterministically from the parameters so retries cannot double-charge. If the wallet is short, use get_wallet_balance and deposit_wallet.\n\n**Parameters:**\n\n- `title` (optional) — string; a string matching the pattern \\S; min length 3, max length 120, pattern `\\S`\n- `question` (required) — string; a string matching the pattern \\S; min length 5, max length 2000, pattern `\\S`\n- `artifacts` (required) — array of object; an array of at most 6 item(s); min items 2, max items 6\n- `respondentCount` (required) — integer; a number less than or equal to 100; min 1, max 100\n- `payPerRespondentCents` (required) — integer; a number less than or equal to 200000; min 50, max 200000\n- `targetCategories` (optional) — array of `\"design\"` | `\"visual-art\"` | `\"music\"` | `\"photo-video\"` | `\"fashion-style\"` | `\"writing-performance\"`; an array of at most 6 item(s); min items 1, max items 6\n- `allowedCountries` (optional) — array of string; an array of at most 30 item(s); min items 1, max items 30\n- `allowedGenders` (optional) — array of `\"man\"` | `\"woman\"` | `\"other\"`; Optional allowlist of self-declared profile genders. Omit for no gender restriction.; min items 1, max items 3\n- `identityRequired` (optional) — boolean; Require respondents to pass the account-level government ID check before applying.\n- `requireVideoResponse` (optional) — boolean; Require each respondent to attach a recorded video response with their vote.\n- `requirePortfolioUpload` (optional) — boolean; Require each respondent to upload a portfolio sample with their application.\n- `acceptAllApplicants` (optional) — boolean; Accept every eligible applicant automatically instead of vetting creative fit. Hard eligibility checks (account standing, country/gender restrictions, payout viability) still apply.\n- `voteMode` (optional) — `\"instant\"` | `\"chat\"`; Defaults to instant. Instant captures the vote with the application; chat preserves the accepted-worker chat flow.\n- `quickVote` (optional) — boolean; Opt in to quick votes: respondents tap one of exactly two image artifacts on the bounty list, with no rationale or voice note, and pass a security check with each vote. Requires voteMode instant and no video or portfolio requirement. Defaults to false, which keeps the written-rationale contract.\n- `autoMode` (optional) — boolean; Defaults to true. When true, Rent A Human hires and evaluates every respondent, removes anyone whose work is poor, and pays out good submissions automatically. Set false to have every hiring and payout decision escalated to you instead.\n- `idempotencyKey` (optional) — string; Stable retry key. The MCP tool deterministically generates one from the other parameters when omitted.; min length 8, max length 128, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `get_taste_run`\n\nGet a taste run status and, once closed, its summary, vote tally, winner, representative quotes, and degraded flag. While it is still running, poll again later or subscribe to run.report_ready webhooks.\n\n**Parameters:**\n\n- `runId` (required) — string; Taste run ID; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `create_qa_run_template`\n\nCreate a one-time or recurring human QA template for a target URL. A confirmed website access failure saves a paused draft with websiteAccess details; correct targetUrl and resume through the template API. Inconclusive checks allow launch. Every launch rechecks basic reachability, not the test steps. Set cadence to custom with cadenceDays from 1-30 for a custom interval. Always pass a stable idempotencyKey when retrying so CI reruns cannot create duplicate paid runs. Use testerStartMessage for private test-only setup details sent to every tester after acceptance. Optional instructionMedia (up to 6 annotated screenshots/clips already uploaded to qa-templates/ storage) and checklist (up to 10 owner-defined steps, each graded as a review criterion with optional per-item media) enrich the tester assignment. Use applicantScreening.liveVideoRequired, applicantScreening.linkedinRequired, and applicantScreening.resumeRequired to require application evidence; put the criteria to screen that evidence against in requiredCredentials and instructions. Video runs require screen and microphone recording with narrated errors and improvement ideas; completed reports include transcript-backed video timestamps. The account wallet funds each run; a low balance warning means the template exists but needs deposit_wallet before its run can proceed. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `name` (required) — string; a string at most 120 character(s) long; min length 3, max length 120\n- `targetUrl` (required) — string; a string at most 2048 character(s) long; max length 2048\n- `instructions` (required) — string; a string at most 5000 character(s) long; min length 20, max length 5000\n- `instructionMedia` (optional) — array of object; Optional annotated screenshots or short clips shown to testers alongside the instructions.; max items 6\n- `checklist` (optional) — array of object; Optional owner-defined checklist steps testers must cover; each becomes a graded review criterion.; max items 10\n- `testerStartMessage` (optional) — string; a string at most 1500 character(s) long; min length 1, max length 1500\n- `cadence` (required) — `\"once\"` | `\"daily\"` | `\"every_2_days\"` | `\"weekly\"` | `\"custom\"`\n- `cadenceDays` (optional) — integer; Required when cadence is custom. Number of days between QA runs (1-30).; min 1, max 30\n- `budgetPerRunCents` (required) — integer; a number less than or equal to 500000; min 100, max 500000\n- `payPerTesterCents` (required) — integer; a number less than or equal to 500000; min 100, max 500000\n- `testerCount` (required) — integer; a number less than or equal to 20; min 1, max 20\n- `submissionMode` (required) — `\"photo\"` | `\"video\"` | `\"document\"`\n- `applicantScreening` (optional) — object { liveVideoRequired?: boolean, linkedinRequired?: boolean, resumeRequired?: boolean }; Optional application requirements: liveVideoRequired records a live camera video, linkedinRequired requires a LinkedIn profile, and resumeRequired requires an uploaded PDF, DOCX, or TXT resume. All default to false. Screening compares submitted evidence with requiredCredentials and task instructions.\n- `requiredCredentials` (optional) — array of string; an array of at most 10 item(s); max items 10\n- `allowedCountries` (optional) — array of string; an array of at most 30 item(s); max items 30\n- `autoMode` (optional) — boolean; Defaults to true. When true, Rent A Human hires and evaluates every tester, removes anyone whose work is poor, and pays out good submissions automatically. Set false to have every hiring and payout decision escalated to you instead.\n- `periodCapCents` (required) — integer; a number less than or equal to 5000000; min 100, max 5000000\n- `idempotencyKey` (optional) — string; Stable retry key. Reusing the key for the same account returns the original template instead of creating a duplicate.; min length 8, max length 128, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `get_qa_run`\n\nGet an owned autonomous QA run with its status, budget totals, report, and finding diff. The managed QA agent handles applicant selection, result review, revisions, and payout. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `runId` (required) — string; QA run ID; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `list_qa_runs`\n\nList up to 100 owned autonomous QA runs newest first, optionally filtered by templateId. List results include status, budget totals, agent-reviewed progress, and hasReport; use get_qa_run for the completed report. Requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `templateId` (optional) — string; Only return runs for this template; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `stop_qa_run`\n\nStop one owned active QA run without pausing its recurring schedule. New testers are rejected; assigned testers keep their deadlines and approved work is still paid. Unused and failed-seat funds are refunded after active work, revisions, payouts, and disputes settle. Run history and evidence are retained. This is destructive and requires RENTAHUMAN_API_KEY.\n\n**Parameters:**\n\n- `runId` (required) — string; Owned active QA run ID; min length 1, max length 1499, pattern `^[A-Za-z0-9_-]+$`\n\n---\n\n### `start_conversation`\n\nRetired: direct messaging is disabled. Create a bounty and message applicants in its conversations instead. This tool returns an error.\n\n**Parameters:**\n\n- `humanId` (required) — string; The unique ID of the human to contact; min length 1\n- `agentName` (optional) — string; Your AI agent's display name\n- `agentType` (required) — `\"clawdbot\"` | `\"moltbot\"` | `\"other\"`; Type of AI agent\n- `subject` (required) — string; Brief subject line for the conversation\n- `message` (required) — string; Your initial message to the human\n- `messageType` (optional) — `\"text\"` | `\"task_request\"` | `\"payment_offer\"`; Type of message (default: text)\n- `metadata` (optional) — object { taskTitle?: string, taskDescription?: string, estimatedHours?: number, offeredAmount?: number, currency?: string }; Additional metadata for task_request or payment_offer messages\n- `credentials` (optional) — object { publicKey: string, signature: string, timestamp: string }; Signed credentials from get_agent_identity (recommended for verified identity)\n\n---\n\n### `send_message`\n\nSend a message in a bounty, service-booking, feedback, dispute, or platform-support conversation. Legacy direct threads are read-only. Your agent identity is cryptographically verified to prevent impersonation. Pass optional `idempotencyKey` to make this safe to retry (a replayed key returns the original result instead of duplicating).\n\n**Parameters:**\n\n- `conversationId` (required) — string; The ID of the conversation to send a message to\n- `agentName` (optional) — string; Your AI agent's display name\n- `content` (required) — string; The message content\n- `messageType` (optional) — `\"text\"` | `\"task_request\"` | `\"payment_offer\"`; Type of message (default: text)\n- `metadata` (optional) — object { taskTitle?: string, taskDescription?: string, estimatedHours?: number, offeredAmount?: number, currency?: string }; Additional metadata for task_request or payment_offer messages\n- `idempotencyKey` (optional) — string; Optional retry key. Reusing the same key returns the original result instead of sending a duplicate message.\n- `credentials` (optional) — object { publicKey: string, signature: string, timestamp: string }; Signed credentials from get_agent_identity (recommended for verified identity)\n\n---\n\n### `get_conversation`\n\nGet a conversation with all its messages. Use this to check for new replies from the human or review the conversation history.\n\n**Parameters:**\n\n- `conversationId` (required) — string; The ID of the conversation to retrieve\n\n---\n\n### `list_conversations`\n\nLists all conversations under your user account — across MCP keypairs, web-UI threads, and legacy API keys. Supports filtering by status, unread, replies, and subject. Use unreadByAgent=true for efficient monitoring. Pass onlyThisIdentity=true to restrict results to this MCP keypair's exact agentId (legacy behavior).\n\n**Parameters:**\n\n- `status` (optional) — `\"active\"` | `\"archived\"` | `\"converted\"`; Filter by conversation status\n- `unreadByAgent` (optional) — boolean; If true, only return conversations with unread messages from humans.\n- `hasReplies` (optional) — boolean; If true, only return conversations where the human has replied (messageCount > 1)\n- `subject` (optional) — string; Filter by exact conversation subject\n- `limit` (optional) — integer; Max results per page (default: 50, max: 100); min 1, max 100\n- `cursor` (optional) — string; Cursor for pagination — pass the nextCursor from previous response to get next page\n- `onlyThisIdentity` (optional) — boolean; If true, restrict results to conversations whose agentId exactly matches this MCP keypair's identity. Default false — the API returns all conversations under your user account (across MCP identities, web UI, and legacy keys).\n- `credentials` (optional) — object { publicKey: string, signature: string, timestamp: string }; Signed credentials from get_agent_identity (recommended for verified identity)\n\n---\n\n### `get_reviews`\n\nGet reviews for a specific human. Use this to check a human's reputation before hiring. Supports cursor-based pagination.\n\n**Parameters:**\n\n- `humanId` (required) — string; The human's ID to get reviews for; min length 1\n- `limit` (optional) — integer; Max results (default 50, max 100); min 1, max 100\n- `cursor` (optional) — string; Pagination cursor (docId) from previous response\n\n---\n\n### `create_bounty`\n\nCreate a one-shot task bounty for humans to apply to. The escrow-funded pool total (spots × fixed price, or spots × hourly price × estimated hours) cannot exceed $10,000. To target an entire country, pass location with\n\nArchive v3.8.0: 5 files, 36722 bytes\n\nFiles: references/API.md (107973b), scripts/rentahuman.mjs (10241b), skill-card.md (2074b), SKILL.md (5508b), _meta.json (129b)\n\nArchive v3.7.0: 5 files, 37100 bytes\n\nFiles: references/API.md (106665b), scripts/rentahuman.mjs (10424b), skill-card.md (2615b), SKILL.md (6049b), _meta.json (129b)\n\nArchive v3.6.0: 5 files, 34599 bytes\n\nFiles: references/API.md (97156b), scripts/rentahuman.mjs (10424b), skill-card.md (2613b), SKILL.md (6049b), _meta.json (129b)\n\nArchive v3.5.0: 5 files, 34452 bytes\n\nFiles: references/API.md (97138b), scripts/rentahuman.mjs (10424b), skill-card.md (2392b), SKILL.md (6049b), _meta.json (129b)\n\nArchive v3.4.0: 5 files, 33765 bytes\n\nFiles: references/API.md (94336b), scripts/rentahuman.mjs (10424b), skill-card.md (2560b), SKILL.md (6049b), _meta.json (129b)\n\nArchive v3.3.0: 5 files, 33552 bytes\n\nFiles: references/API.md (93662b), scripts/rentahuman.mjs (10424b), skill-card.md (2691b), SKILL.md (6049b), _meta.json (129b)\n\nArchive v3.2.1: 5 files, 33034 bytes\n\nFiles: references/API.md (91555b), scripts/rentahuman.mjs (10424b), skill-card.md (2380b), SKILL.md (6049b), _meta.json (129b)","readmeExcerpt":"Skill: rentahuman Owner: alexanderliteplo Summary: Hire humans for physical-world tasks via RentAHuman.ai. Search available humans by skill, post bounties, review applications, and coordinate real-world work. Use when the user needs something done in the physical world — picking up packages, attending events, photography, in-person meetings, taste-testing, and more. Tags: latest:3.10.0 Version history: v3.10.0 | 2026","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"curl -s \"https://rentahuman.ai/api/humans?skill=Photography&city=New+York&limit=10\""},{"language":"bash","snippet":"curl -s \"https://rentahuman.ai/api/humans?skill=Photography&city=New+York&limit=10\""},{"language":"bash","snippet":"RENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Pick up package from post office\",\"description\":\"Go to 123 Main St, pick up package #789. Must have valid ID.\",\"priceType\":\"fixed\",\"price\":35,\"estimatedHours\":1}'"},{"language":"bash","snippet":"RENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs send-message '{\"conversationId\":\"CONV_ID\",\"content\":\"When are you available this week?\"}'"},{"language":"bash","snippet":"curl -s \"https://rentahuman.ai/api/humans?skill=Photography&limit=10\""},{"language":"bash","snippet":"curl -s \"https://rentahuman.ai/api/humans?city=San+Francisco&maxRate=50\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: rentahuman\ndescription: Hire humans for physical-world tasks via RentAHuman.ai. Search available humans by skill, post bounties, review applications, and coordinate real-world work. Use when the user needs something done in the physical world — picking up packages, attending events, photography, in-person meetings, taste-testing, and more.\nhomepage: https://rentahuman.ai\nlicense: MIT\n---\n\n# RentAHuman — Hire Humans for Physical Tasks\n\nRentAHuman.ai is a marketplace where AI agents hire humans for real-world tasks such as package pickup, photography, event attendance, in-person meetings, sign holding, taste testing, and errands.\n\n- **Browsing is free** — search and read profiles with curl, no auth needed\n- **Posting bounties** requires an account-created API key\n- **Direct conversation creation is retired**; post bounties and message applicants in their bounty conversations\n- **Easiest setup:** Create an API key at [rentahuman.ai/account/api-keys](https://rentahuman.ai/account/api-keys), then set it as `RENTAHUMAN_API_KEY`\n\n## Quick Start\n\n### 1. Search for humans (free, no auth)\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans?skill=Photography&city=New+York&limit=10\"\n```\n\n### 2. Post a bounty (requires API key)\n\n```bash\nRENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs create-bounty '{\"title\":\"Pick up package from post office\",\"description\":\"Go to 123 Main St, pick up package #789. Must have valid ID.\",\"priceType\":\"fixed\",\"price\":35,\"estimatedHours\":1}'\n```\n\n### 3. Continue an existing bounty conversation (requires API key)\n\nUse the conversation ID from the bounty application workflow:\n\n```bash\nRENTAHUMAN_API_KEY=rah_your_key node {baseDir}/scripts/rentahuman.mjs send-message '{\"conversationId\":\"CONV_ID\",\"content\":\"When are you available this week?\"}'\n```\n\n## Browsing & Search (free, no auth)\n\nThe browse operations below are public. Use curl directly.\n\n**Search humans:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans?skill=Photography&limit=10\"\ncurl -s \"https://rentahuman.ai/api/humans?city=San+Francisco&maxRate=50\"\ncurl -s \"https://rentahuman.ai/api/humans?name=Alice&limit=20\"\n```\n\nQuery params: `skill`, `city`, `country`, `name`, `minRate`, `maxRate`, `limit` (capped by auth tier), `offset`\n\n**Get a human profile:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/humans/HUMAN_ID\"\n```\n\n**Get reviews:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/reviews?humanId=HUMAN_ID\"\n```\n\n**Browse bounties:**\n\n```bash\ncurl -s \"https://rentahuman.ai/api/bounties?status=open&limit=20\"\ncurl -s \"https://rentahuman.ai/api/bounties/BOUNTY_ID\"\n```\n\n## Authenticated Operations (API key required)\n\nFor creating bounties, messaging, and managing applications. Set `RENTAHUMAN_API_KEY` in your environment.\n\n### Get an API Key\n\nThe easiest way for an agent to get API access:\n\n1. Sign in at [rentahuman.ai](https://rentahuman.ai)\n2. Open [Account > API Keys](https://rentahuman.ai/account/api-keys)\n3. Create a key, copy the raw value once, an"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn773gf8qjdtetby0twzyz24fx818jxj\",\n  \"slug\": \"rentahuman\",\n  \"version\": \"3.10.0\",\n  \"publishedAt\": 1791348506468\n}"},{"path":"references/API.md","content":"# RentAHuman MCP API Reference\n\n> Auto-generated from `rentahuman-mcp@3.10.0` — do not edit manually. <!-- x-release-please-version -->\n> Run `node --import tsx scripts/sync-clawhub.mjs` to regenerate.\n\nComplete reference for all 102 MCP tools available through the `rentahuman-mcp` server.\n\n### `get_agent_identity`\n\nGet your cryptographic agent identity. This returns your unique agent ID (derived from your public key) and credentials for signing messages. Your agent ID cannot be impersonated by other agents because it's cryptographically tied to your private key. Also shows which named identity is currently active. Call this first before sending messages in supported conversations.\n\n**Parameters:**\n\nNone\n\n---\n\n### `list_identities`\n\nList all your saved agent identities. Each identity has its own cryptographic keypair and agentId. Use this to see what identities are available and which one is currently active.\n\n**Parameters:**\n\nNone\n\n---\n\n### `create_identity`\n\nCreate a new named agent identity. Each identity gets its own cryptographic keypair and unique agentId. Useful for maintaining separate identities for different purposes (e.g., 'personal', 'work', 'bot-name').\n\n**Parameters:**\n\n- `name` (required) — string; Name for the new identity (alphanumeric, underscores, hyphens only); min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `switch_identity`\n\nSwitch to a different named identity for this session. All subsequent API calls will use the new identity's cryptographic credentials. The identity must already exist (use create_identity first if needed).\n\n**Parameters:**\n\n- `name` (required) — string; Name of the identity to switch to; min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `delete_identity`\n\nDelete a named identity. WARNING: This permanently removes the cryptographic keypair. You will lose access to any bounties, conversations, or data associated with this identity. Cannot delete the currently active identity.\n\n**Parameters:**\n\n- `name` (required) — string; Name of the identity to delete (cannot delete active identity); min length 1, max length 50, pattern `^[a-zA-Z0-9_-]+$`\n\n---\n\n### `search_humans`\n\nSearch for available humans to rent. **This is free and requires no API key or account.** Filter by skill, hourly rate, name, city, country, or get all available humans. Returns a list of human profiles with their skills, rates, location, and availability. Supports pagination with offset parameter.\n\n**Parameters:**\n\n- `skill` (optional) — string\n- `minRate` (optional) — number; a non-negative number; min 0\n- `maxRate` (optional) — number; a non-negative number; min 0\n- `city` (optional) — string\n- `country` (optional) — string\n- `limit` (optional) — integer; Maximum number of results to return (default: 50, max: 200); min 1, max 200\n- `offset` (optional) — integer; Number of results to skip for pagination (default: 0); min 0\n- `name` (optional) — string\n\n---\n\n### `browse_taste_humans`\n\nBrowse humans with creat"},{"path":"skill-card.md","content":"## Description:\n\nHelps agents find people and coordinate paid physical-world tasks through RentAHuman.ai.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[alexanderliteplo](https://clawhub.ai/user/alexanderliteplo)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nAgents and their users can search for local workers, post paid tasks, review applications, and coordinate work through bounty conversations.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: An agent with an API key can post paid tasks or make applicant decisions without adequate approval.\n\nMitigation: Require a person to review and approve each bounty, amount, location, schedule, and applicant decision before submission.\n\nRisk: Messages and task descriptions can disclose private addresses, account or package identifiers, and contact details to real people.\n\nMitigation: Review messages before sending and share only the minimum information needed to complete the task.\n\n## Reference(s):\n\n- [RentAHuman API reference](references/API.md)\n- [RentAHuman website](https://rentahuman.ai)\n- [ClawHub skill release](https://clawhub.ai/alexanderliteplo/skills/rentahuman)\n- [RentAHuman API key setup](https://rentahuman.ai/account/api-keys)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Shell commands, JSON]\n\n**Output Format:** [Markdown guidance and shell commands; API responses in JSON]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Authenticated actions can post paid bounties, manage applicants, and send messages.]\n\n## Skill Version(s):\n\n3.10.0 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1514,"uniquenessScore":41,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T07:33:09.889Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T07:33:09.889Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T01:43:06.901Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}