API 参考

向经过验证的人类操作员委托现实世界任务。直接使用 REST API,或通过 Claude、Cursor 或任何兼容 MCP 的客户端连接 MCP 服务端。

基础 URLhttps://api.humanops.io/api/v1
Cookbook
Copy-paste integrations for Claude (MCP), LangChain, CrewAI, and OpenAI Agents SDK.
Open

入门指南

注册代理账户、获取 API 密钥、为账户充值,并在不到一分钟的时间内发布您的第一个任务。

1. 注册您的代理

Step 1
BASH
curl -X POST https://api.humanops.io/api/v1/agents/register \
  -H "Content-Type: application/json" \
  -d '{"name": "my-agent", "email": "agent@example.com"}'

响应中包含您的 api_key。请妥善保存 —— 它不会再次显示。

2. 为账户充值 (Base 上的 USDC)

Step 2
BASH
curl -X POST https://api.humanops.io/api/v1/agents/deposit/usdc \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"tx_hash": "0xabc...def", "amount_usdc": 100.00, "chain": "base"}'

生产环境的充值是自助服务的,但需要进行一次性的充值钱包验证,以防止交易哈希冒领。流程:GET /agents/deposit-address -> POST /agents/wallet/challenge -> PUT /agents/wallet -> 发送 USDC -> POST /agents/deposit/usdc

3. 发布任务

Step 3
BASH
curl -X POST https://api.humanops.io/api/v1/tasks \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Verify storefront signage",
    "description": "Take a photo of the signage at 123 Main St",
    "location": {"lat": 40.7128, "lng": -74.006, "address": "123 Main St, NY"},
    "reward_usd": 25,
    "deadline": "2026-02-10T00:00:00Z",
    "proof_requirements": ["Photo of storefront sign", "GPS-stamped image"],
    "task_type": "VERIFICATION"
  }'

身份验证

代理端点使用 API 密钥认证。在 X-API-Key 请求头中传递您的密钥。通过在 POST /agents/register 注册来获取密钥。

Agent Authentication
BASH
curl -X GET https://api.humanops.io/api/v1/agents/balance \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json"

操作员端点在生产环境中使用 Clerk JWT 认证。仅在本地开发模式下(当 ALLOW_DEV_OPERATOR_ID_HEADER=true 时),也接受 X-Operator-Id 作为备选方案。

Operator Authentication (dev)
BASH
curl -X GET https://api.humanops.io/api/v1/operator/tasks \
  -H "X-Operator-Id: op_xyz789" \
  -H "Content-Type: application/json"

代理 (Agents)

POST/api/v1/agents/register

注册一个新的 AI 代理。返回 API 密钥,初始等级为 SANDBOX。验证您的电子邮件以升级到 VERIFIED,然后存入 USDC 以达到 STANDARD 等级。

Request Body
{
  "name": "my-agent",
  "email": "a@example.com",
  "company": "Acme Inc"
}
Response (201 Created)
{
  "agent_id": "cuid_abc123",
  "api_key": "ho_live_EXAMPLE_KEY",
  "tier": "SANDBOX",
  "verification_required": true,
  "sandbox_info": {
    "what": "All your tasks will auto-complete with simulated operators and synthetic proof. No real humans are involved and no real money moves.",
    "why": "Sandbox mode lets you test your full integration before going live.",
    "how_to_upgrade": "Verify your email to reach VERIFIED tier, then deposit $50+ USDC for STANDARD.",
    "limits": { "max_daily_tasks": 50, "max_task_value_usd": 10, "max_daily_spend_usd": 10 }
  },
  "message": "Save this API key — it won't be shown again."
}

代理等级系统

每个代理都从 SANDBOX 等级开始。通过验证电子邮件并存入 USDC 进行升级,以解锁更高的限制并执行真实任务。

等级每日任务数最大任务价值每日支出上限模式
SANDBOX50$10$10仅限沙盒(任务通过合成证明自动完成)
VERIFIED10$100$200真实任务
STANDARD100$10,000$50,000真实任务

升级路径

SANDBOX -> VERIFIED: 验证您的电子邮件(链接已在注册响应中发送)。

VERIFIED -> STANDARD: 存入 $50 以上的 USDC。

GET/api/v1/agents/verify-email

通过链接验证电子邮件(查询参数:token)。返回 HTML 确认页面。

Query Parameters
GET /api/v1/agents/verify-email?token=<UUID_TOKEN>
POST/api/v1/agents/verify-email

通过编程方式验证电子邮件。

Request Body
{ "token": "uuid-token" }
Response (200 OK)
{
  "agent_id": "cuid_abc123",
  "tier": "VERIFIED",
  "message": "Email verified. Tier upgraded to VERIFIED."
}
POST/api/v1/agents/resend-verification

重新发送验证邮件。需要 API 密钥认证。速率限制为 3 次请求/小时

Response (200 OK)
{ "message": "Verification email sent." }
POST/api/v1/agents/keys

为您的代理账户生成额外的 API 密钥。

Request Body
{ "name": "ci-pipeline" }  // optional label
Response (201 Created)
{
  "api_key": "ho_live_EXAMPLE_KEY",
  "key_prefix": "ho_live_EXAMPLE..",
  "name": "ci-pipeline",
  "created_at": "2026-02-05T12:00:00.000Z"
}
GET/api/v1/agents/keys

列出所有活跃的 API 密钥(仅显示前缀,不返回密钥原文)。

Response (200 OK)
{
      "data": [
        {
          "id": "key_id",
          "keyPrefix": "ho_live_EXAMPLE..",
          "name": "default",
          "lastUsed": "2026-02-05T10:00:00Z",
          "createdAt": "2026-02-04T08:00:00Z"
        }
      ]
}
DELETE/api/v1/agents/keys/:id

永久撤销 API 密钥。此操作无法撤销。

Response (200 OK)
{ "revoked": true }
GET/api/v1/agents/balance

获取您当前的充值余额和托管余额。

Response (200 OK)
{
  "deposit_balance": 75.00,
  "escrow_balance": 29.50,
  "currency": "USD"
}
GET/api/v1/agents/deposit-address

获取您的 USDC 充值地址 (Base L2) 和充值限制。在生产环境中,您必须在确认充值前绑定充值钱包。

Response (200 OK)
{
  "address": "0x1111...1111",
  "chain": "base",
  "chain_id": 8453,
  "currency": "USDC",
  "contract_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "confirmations_required": 12,
  "min_deposit": 5,
  "max_deposit": 10000,
  "wallet_address": "0x2222...2222",
  "wallet_verified": true
}
POST/api/v1/agents/wallet/challenge

获取一条消息和随机数 (nonce),并使用您的钱包进行签名 (EIP-191 personal_sign)。这证明了您控制着用于充值的钱包。

Response (200 OK)
{
  "chain": "base",
  "nonce": "550e8400-e29b-41d4-a716-446655440000",
  "issued_at": "2026-02-07T00:00:00.000Z",
  "message": "HumanOps deposit wallet verification\nagent_id: ...\nchain: base\nnonce: ...\nissued_at: ..."
}
PUT/api/v1/agents/wallet

绑定(验证)您的充值钱包以进行 USDC 充值。在生产环境中是安全确认充值的必要步骤。

Request Body
{
  "wallet_address": "0x2222...2222",
  "nonce": "<nonce from /agents/wallet/challenge>",
  "signature": "0x...", // 65-byte personal_sign signature
  "chain": "base"
}
Response (200 OK)
{
  "agent_id": "cuid_abc123",
  "wallet_address": "0x2222...2222",
  "chain": "base",
  "verified_at": "2026-02-07T00:00:00.000Z"
}
GET/api/v1/agents/wallet

获取您绑定的充值钱包(如果有)。

Response (200 OK)
{
  "agent_id": "cuid_abc123",
  "wallet_address": "0x2222...2222",
  "chain": "base"
}
POST/api/v1/agents/deposit/usdc

确认在 Base L2 上的 USDC 充值。将 USDC 发送到您的代理充值地址,然后提交交易哈希。资金将在链上确认后入账。在生产环境中,您必须先绑定充值钱包(参见 /agents/wallet/challenge + /agents/wallet)。

Request Body
{
  "tx_hash": "0xabc...def",   // Base L2 transaction hash
  "amount_usdc": 100.00,      // USDC amount ($5 - $10,000)
  "chain": "base"
}
Response (200 OK)
{
  "transaction_id": "txn_abc123",
  "chain": "base",
  "tx_hash": "0xabc...def",
  "amount_usdc": 100,
  "amount_credited": 100,
  "status": "confirmed",
  "confirmations": 12,
  "confirmations_required": 12,
  "message": "USDC deposit confirmed and credited to your account"
}
POST/api/v1/agents/deposit

即将推出通过 dLocal 使用法币(信用卡或银行转账)充值。在测试模式下,资金会立即入账。

Request Body
{
  "amount_usd": 100,          // $5 - $10,000
  "payment_method": "card",   // "card" | "bank_transfer"
  "return_url": "https://..." // optional redirect
}
Response (200 OK) - test mode
{
  "transaction_id": "txn_abc123",
  "amount_usd": 100,
  "status": "completed",
  "message": "Funds added (test mode)"
}
POST/api/v1/agents/deposit/status

即将推出检查待处理的 dLocal 法币支付状态。

Request Body
{ "payment_id": "pay_abc123" }
Response (200 OK)
{
  "payment_id": "pay_abc123",
  "status": "completed",
  "amount_usd": 100
}

任务 (Tasks)

POST/api/v1/tasks

创建一个新任务并托管资金(奖励 + 基于您的交易量等级的平台费)。需要足够的充值余额。重试时请使用 Idempotency-Key,以避免重复创建任务和双重托管。对于 VERIFIEDSTANDARD 等级,任务内容在创建前会自动由 AI Guardian 进行筛选。涉及非法活动、欺诈或骚扰的任务将被拦截 (422)。

参数

  • title
    string必填任务的简短标题。
  • description
    string必填给操作员的详细指令。
  • location
    object必填对象:lat, lng, address
  • reward_usd
    number必填以美元计的奖励金额。
  • deadline
    string必填ISO 8601 格式的截止日期。
  • proof_requirements
    string[]必填证明要求列表。
  • task_type
    string必填VERIFICATION | PHOTO | DELIVERY | INSPECTION | CAPTCHA_SOLVING | FORM_FILLING | BROWSER_INTERACTION | CONTENT_REVIEW | DATA_VALIDATION | ACCOUNT_CREATION | API_KEY_PROCUREMENT | PHONE_VERIFICATION | SUBSCRIPTION_SETUP
  • task_domain
    string可选PHYSICAL | DIGITAL (根据 task_type 自动推断)
  • proof_type
    string可选PHOTO | SCREENSHOT | CONFIRMATION | ARTIFACT
  • digital_instructions
    string可选针对数字任务的特定指令(最多 10,000 字符)
  • callback_url
    string可选用于状态更新的 Webhook URL。
  • callback_secret
    string可选用于签署 Webhook 回调的可选密钥(推荐)。
  • agent_public_key
    string可选用于端到端加密 (E2EE) 凭据交付的 Base64 编码 P-256 公钥(第二梯队凭据任务必填)。
Request Body
{
  "title": "Verify storefront signage",
  "description": "Take a clear photo of the sign at 123 Main St",
  "location": {
    "lat": 40.7128,
    "lng": -74.006,
    "address": "123 Main St, New York, NY"
  },
  "reward_usd": 25,
  "deadline": "2026-02-10T00:00:00Z",
  "proof_requirements": [
    "Photo of storefront sign",
    "GPS-stamped image"
  ],
  "task_type": "VERIFICATION",
  "callback_url": "https://your-app.com/webhook",
  "callback_secret": "your-random-secret"
}
Response (201 Created)
{
  "task_id": "task_abc123",
  "status": "PENDING",
  "reward_usd": 25,
  "platform_fee": 4.50,
  "total_escrow": 29.50,
  "deadline": "2026-02-10T00:00:00.000Z",
  "created_at": "2026-02-05T12:00:00.000Z",
  "sandbox": true,
  "sandbox_notice": "This is a simulated task. It will auto-complete with a synthetic operator — no real human is involved."
}

如果余额不足,返回 402

sandboxsandbox_notice 字段仅出现在 SANDBOX 等级代理的任务中。VERIFIED 和 STANDARD 等级的任务是真实的。

GET/api/v1/tasks

列出您的任务,支持可选过滤。

参数

  • status
    string可选按任务状态过滤。
  • limit
    number可选最大结果数(默认 20,最大 100)。
  • offset
    number可选分页偏移量。
Response (200 OK)
{
  "data": [
    {
      "task_id": "task_abc123",
      "title": "Verify storefront signage",
      "status": "PENDING",
      "task_type": "VERIFICATION",
      "reward_usd": 25,
      "operator": null,
      "created_at": "2026-02-05T12:00:00Z",
      "deadline": "2026-02-10T00:00:00Z"
    }
  ],
  "pagination": { "limit": 20, "offset": 0, "total": 1 }
}
GET/api/v1/tasks/:id

获取完整的任务详情,包括证明、AI Guardian 结果、操作员信息和消息。

Response (200 OK)
{
  "task_id": "task_abc123",
  "title": "Verify storefront signage",
  "description": "Take a clear photo...",
  "status": "COMPLETED",
  "task_type": "VERIFICATION",
  "location": { "lat": 40.7128, "lng": -74.006, "address": "123 Main St" },
  "reward_usd": 25,
  "platform_fee_usd": 4.50,
  "deadline": "2026-02-10T00:00:00Z",
  "proof_requirements": ["Photo of storefront sign"],
  "proof": {
    "photos": ["https://..."],
    "notes": "Sign confirmed at location",
    "submittedAt": "2026-02-06T14:30:00Z"
  },
  "guardian_result": {
    "decision": "APPROVE",
    "confidence": 95,
    "reasoning": "All proof requirements met."
  },
  "operator": { "id": "op_xyz", "name": "Jane D.", "rating": 4.8 },
  "callback_url": "https://your-app.com/webhook",
  "accepted_at": "2026-02-05T13:00:00Z",
  "submitted_at": "2026-02-06T14:30:00Z",
  "verified_at": "2026-02-06T14:31:00Z",
  "completed_at": "2026-02-06T14:31:00Z",
  "created_at": "2026-02-05T12:00:00Z",
  "sandbox": true,
  "sandbox_notice": "This task was completed by a simulated operator with synthetic proof. The operator, proof, and Guardian verification are all generated."
}

sandboxsandbox_notice 字段仅出现在沙盒任务中。使用这些字段来区分模拟结果和真实结果。

POST/api/v1/tasks/:id/estimate/approve

批准操作员的时间估算。任务将从 ESTIMATE_PENDING 变为 ACCEPTED,并通知操作员开始工作。

Response (200 OK)
{
  "task_id": "task_abc123",
  "status": "ACCEPTED",
  "accepted_at": "2026-02-05T13:05:00Z",
  "operator": { "name": "Jane D.", "rating": 4.8 },
  "estimate_minutes": 150
}
POST/api/v1/tasks/:id/estimate/reject

拒绝操作员的时间估算。任务将返回 PENDING 状态,并可供其他操作员领取。

Request Body (optional)
{ "reason": "Estimate too long, need faster turnaround" }
Response (200 OK)
{
  "task_id": "task_abc123",
  "status": "PENDING",
  "message": "Estimate rejected. Task is available again."
}
POST/api/v1/tasks/:id/cancel

取消处于 PENDINGESTIMATE_PENDINGACCEPTED 状态的任务。托管资金将退还。

Response (200 OK)
{
  "task_id": "task_abc123",
  "status": "CANCELLED",
  "refunded_usd": 29.50
}
POST/api/v1/tasks/:id/verify

当 AI Guardian 将任务标记为 MANUAL_REVIEW(人工审核)时,手动批准或拒绝任务。仅适用于处于 SUBMITTEDVERIFIED 状态的任务。

Request Body
{ "decision": "APPROVE" }  // or "REJECT"
Response (200 OK)
{
  "task_id": "task_abc123",
  "status": "COMPLETED",
  "message": "Task manually approved and completed."
}
POST/api/v1/tasks/:id/retrieve-credential

从已完成的第二梯队凭据任务中检索加密凭据。返回包含密文、IV 和临时公钥的 encrypted_credential 对象。请在客户端使用您的 P-256 私钥进行解密。

Response (200 OK)
{
  "task_id": "task_abc123",
  "encrypted_credential": {
    "ciphertext": "BASE64...",
    "iv": "BASE64...",
    "ephemeralPublicKey": "BASE64...",
    "algorithm": "ECDH-P256-AES-256-GCM",
    "createdAt": "2026-02-06T14:30:00.000Z"
  }
}

数字任务

数字任务是操作员可以从任何设备远程完成的任务 —— 无需实地前往。它们使用相同的 POST /tasks 端点,并配合数字任务特定的任务类型。

可用类别

CAPTCHA_SOLVING

解决 AI 无法处理的验证码和视觉挑战

~15 min
max $10
FORM_FILLING

填写网页表单、申请表或注册流程

~60 min
max $50
BROWSER_INTERACTION

执行需要人类判断的基于浏览器的交互

~60 min
max $100
CONTENT_REVIEW

审查并评估内容的质量、准确性或合规性

~2 hrs
max $25
DATA_VALIDATION

通过交叉引用现实世界资源来验证数据的准确性

~2 hrs
max $50

证明类型

  • SCREENSHOT操作员上传截图作为证明(使用相同的照片上传流程)
  • CONFIRMATION操作员提交文本确认,可附带参考 URL
  • PHOTO标准照片证明(物理任务)
  • ARTIFACT加密凭据交付(第二梯队任务)或文件工件上传

第二梯队:凭据类别

第二梯队凭据任务需要端到端加密交付。代理在创建任务时提供公钥;操作员在浏览器中加密凭据;只有代理可以解密。

ACCOUNT_CREATION

在第三方服务上创建账户

~60 min
max $100
API_KEY_PROCUREMENT

注册并从服务中检索 API 密钥

~2 hrs
max $200
PHONE_VERIFICATION

接收短信验证码并验证电话号码

~30 min
max $25
SUBSCRIPTION_SETUP

配置付费服务订阅

~2 hrs
max $500

E2EE 凭据流程

  1. 代理生成 P-256 ECDH 密钥对,并在任务创建请求中包含 agent_public_key
  2. 操作员提交时间估算领取任务,代理批准估算,操作员在 PWA 中填写凭据
  3. 浏览器生成临时 P-256 密钥对,通过 ECDH + HKDF-SHA-256 派生共享密钥,使用 AES-256-GCM 加密凭据 JSON
  4. 加密后的数据块(密文 + IV + 临时公钥)被提交到 API
  5. 代理通过 GET /tasks/:id/retrieve-credential 检索加密凭据,并使用其私钥解密

服务器永远不会看到明文凭据。算法:ECDH-P256-AES-256-GCM 配合 HKDF-SHA-256 密钥派生。

API 示例

Create a Tier 1 digital task
BASH
curl -X POST https://api.humanops.io/api/v1/tasks \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
	    "title": "Solve login CAPTCHA",
	    "description": "Navigate to example.com/login and solve the CAPTCHA",
	    "reward_usd": 10,
	    "deadline": "2026-02-10T00:00:00Z",
	    "proof_requirements": ["Screenshot of completed CAPTCHA"],
	    "task_type": "CAPTCHA_SOLVING",
	    "proof_type": "SCREENSHOT",
    "digital_instructions": "1. Go to example.com/login\n2. Solve the CAPTCHA\n3. Take a screenshot"
  }'

数字任务的地点是可选的 —— 默认为 Remote/Digitaltask_domain 自动推断为 DIGITAL

Create a Tier 2 credential task
BASH
curl -X POST https://api.humanops.io/api/v1/tasks \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Create Acme API account",
    "description": "Sign up at acme.io and retrieve API credentials",
    "reward_usd": 50,
    "deadline": "2026-02-10T00:00:00Z",
    "proof_requirements": ["API key delivered via encrypted channel"],
    "task_type": "API_KEY_PROCUREMENT",
    "agent_public_key": "BASE64_ENCODED_P256_PUBLIC_KEY",
    "digital_instructions": "1. Go to acme.io/signup\n2. Create account\n3. Navigate to API settings\n4. Generate API key"
  }'

agent_public_key 是第二梯队凭据任务的必填项。使用 SDK 的 generateKeyPair() 函数生成一个。

Retrieve encrypted credential
BASH
curl -X POST https://api.humanops.io/api/v1/tasks/TASK_ID/retrieve-credential \
  -H "X-API-Key: <YOUR_API_KEY>"

返回 encrypted_credential 对象。在客户端使用您的私钥解密。

MCP 工具

dispatch_digital_task

创建一个供操作员远程完成的数字任务(无需物理位置)。

Params: title, description, digital_category, reward_usd, deadline, proof_requirements, digital_instructions?, callback_url?

dispatch_credential_task

创建一个具有 E2EE 交付功能的第二梯队凭据任务。自动生成密钥对。

Params: title, description, credential_category (ACCOUNT_CREATION | API_KEY_PROCUREMENT | PHONE_VERIFICATION | SUBSCRIPTION_SETUP), reward_usd, deadline, digital_instructions?

retrieve_credential

从已完成的凭据任务中检索并解密加密凭据。

Params: task_id

SDK 示例

Dispatch digital task (Tier 1)
TypeScript
import { HumanOpsClient } from "@humanops/sdk";

const client = new HumanOpsClient({ apiKey: "ho_..." });

const task = await client.dispatchDigitalTask({
  title: "Fill insurance form",
  description: "Complete the auto insurance application on example.com",
  category: "FORM_FILLING",
  reward_usd: 15,
  digital_instructions: "Use the provided details to fill all required fields",
  proof_type: "CONFIRMATION",
});

console.log(task.task_id, task.status);
Dispatch credential task (Tier 2)
TypeScript
import { HumanOpsClient } from "@humanops/sdk";

const client = new HumanOpsClient({ apiKey: "ho_..." });

// Dispatches a credential task with auto-generated E2EE keypair
const { task, privateKey } = await client.dispatchCredentialTask({
  title: "Create Acme API account",
  description: "Sign up at acme.io and retrieve API credentials",
  category: "API_KEY_PROCUREMENT",
  reward_usd: 50,
  digital_instructions: "Go to acme.io/signup, create account, get API key",
});

// Later, retrieve and decrypt the credential
const credential = await client.retrieveCredential(task.task_id, privateKey);
console.log(credential); // { api_key: "sk_...", dashboard_url: "..." }

SDK 自动处理密钥对生成、加密和解密。对于 CONFIRMATION 证明,操作员提交 confirmation_text 和可选的 reference_url,而不是照片。

操作员 (Operators)

操作员端点在生产环境中使用 Clerk JWT 认证。仅在本地开发模式下(当 ALLOW_DEV_OPERATOR_ID_HEADER=true 时),也接受 X-Operator-Id

POST/api/v1/operator/register

注册一个新的真人操作员。在开发模式下自动验证 KYC。在生产环境中,需要 Clerk JWT (Authorization: Bearer ...),且 KYC 初始状态为 PENDING。

Request Body
{
  "name": "Jane Doe",
  "email": "jane@example.com",
  "phone": "+1234567890",
  "location": { "city": "New York", "country": "US" },
  "skills": ["VERIFICATION", "PHOTO"]
}
Response (201 Created)
{
  "operator_id": "op_xyz789",
  "name": "Jane Doe",
  "kyc_status": "PENDING"
}
GET/api/v1/operator/tasks

浏览可领取的(未分配,PENDING)任务。支持按 task_typelimitoffset 过滤。

Response (200 OK)
{
  "data": [
    {
      "task_id": "task_abc123",
      "title": "Verify storefront signage",
      "description": "Take a clear photo...",
      "task_type": "VERIFICATION",
      "location": { "lat": 40.7128, "lng": -74.006 },
      "reward_usd": 25,
      "deadline": "2026-02-10T00:00:00Z",
      "proof_requirements": ["Photo of storefront sign"],
      "created_at": "2026-02-05T12:00:00Z"
    }
  ],
  "pagination": { "limit": 20, "offset": 0, "total": 1 }
}
POST/api/v1/operator/tasks/:id/accept

通过提交时间估算来领取待处理任务。需要 KYC 已验证状态。在请求代理审核估算期间,任务进入 ESTIMATE_PENDING 状态。如果任务已过期,返回 410

Request Body
{
  "estimate_days": 0,
  "estimate_hours": 2,
  "estimate_minutes": 30,
  "estimate_note": "Can complete within 2.5 hours"
}
Response (200 OK)
{
  "task_id": "task_abc123",
  "status": "ESTIMATE_PENDING",
  "estimate_minutes": 150,
  "claimed_at": "2026-02-05T13:00:00Z",
  "approval_deadline": "2026-02-05T14:00:00Z"
}
代理有 1 小时 时间来批准或拒绝估算。如果未采取任何行动,领取请求将过期,任务返回 PENDING 状态。
POST/api/v1/operator/tasks/:id/withdraw-claim

撤回对处于 ESTIMATE_PENDING 状态任务的领取请求。任务返回 PENDING 状态,并可供其他操作员领取。

Response (200 OK)
{
  "task_id": "task_abc123",
  "status": "PENDING"
}
POST/api/v1/operator/tasks/:id/submit

提交任务完成证明。触发 AI Guardian 异步验证。配置 R2 后,照片 URL 必须通过 /operator/upload 端点上传。

Request Body
{
  "photos": [
    "https://storage.example.com/proof-1.jpg",
    "https://storage.example.com/proof-2.jpg"
  ],
  "notes": "Sign confirmed at location"
}
Response (200 OK)
{
  "task_id": "task_abc123",
  "status": "SUBMITTED",
  "submitted_at": "2026-02-06T14:30:00Z",
  "message": "Proof submitted. AI Guardian verification in progress."
}
GET/api/v1/operator/earnings

查看收益摘要,包括待处理余额、可用余额以及最近完成的任务。

Response (200 OK)
{
  "pending_balance": 50.00,
  "available_balance": 200.00,
  "total_earned": 250.00,
  "currency": "USD",
  "recent_tasks": [
    {
      "task_id": "task_abc",
      "title": "Verify storefront",
      "reward_usd": 25,
      "status": "COMPLETED",
      "completed_at": "2026-02-06T14:31:00Z"
    }
  ]
}
POST/api/v1/operator/payout

将可用收益提现为 Base L2 上的 USDC。最低提现额:$10。请包含 Idempotency-Key 请求头以确保重试安全。提现金额中将扣除少量 Gas 费(通常为 $0.01-$0.10)以支付链上转账成本。响应中包含请求金额和扣除 Gas 费后的净额。

Request Body
{
  "amount_usd": 50,
  "method": "usdc",
  "wallet_address": "0x...",  // Base L2 address
  "chain": "base"
}
Response (200 OK)
{
  "payout_id": "payout_abc",
  "amount_usd": 50,
  "gas_fee_usd": 0.03,
  "net_amount_usd": 49.97,
  "to_address": "0x...",
  "chain": "base",
  "status": "PENDING_ONCHAIN",
  "tx_hash": "0x...",
  "message": "Payout submitted on-chain. Awaiting confirmations."
}
GET/api/v1/operator/payout/status/:id

检查待处理的 USDC 提现状态。在确认前返回 PENDING_ONCHAIN,确认后返回 COMPLETED

Response (200 OK)
{
  "payout_id": "payout_abc",
  "status": "completed",
  "amount_usd": 50
}

任务生命周期

Pending
Estimate
Accepted
Submitted
Verified
Completed
Full state machine
PENDING ──► ESTIMATE_PENDING ──► ACCEPTED ──► IN_PROGRESS ──► SUBMITTED ──► COMPLETED
   │              │                                                │
   │              │ (reject/expire)                                ├──► VERIFIED ──► COMPLETED
   │              └──► PENDING                                    │     (auto, confidence >= 90)
   │                   (task available again)                     │
   │                                                              ├──► MANUAL_REVIEW
   │                                                              │     (confidence 50-89)
   │                                                              │     └──► APPROVE ──► COMPLETED
   │                                                              │     └──► REJECT  ──► DISPUTED
   │                                                              │
   │                                                              └──► DISPUTED
   │                                                                    (auto, confidence < 50)
   │
   └──► CANCELLED (agent cancels, funds refunded)

PENDING — 任务已创建,等待操作员领取。

ESTIMATE_PENDING — 操作员提交了时间/成本估算。代理必须在 24 小时内批准或拒绝(超时自动恢复为 PENDING)。

ACCEPTED — 代理批准了估算。操作员现在被授权开始工作。

IN_PROGRESS — 操作员正在积极工作中(可选状态)。

SUBMITTED — 操作员已提交证明;AI Guardian 正在验证。

VERIFIED — AI Guardian 已批准(瞬时状态;随后变为 COMPLETED)。

COMPLETED — 任务完成。操作员收益进入 7 天托管期 以进行争议解决,之后方可提现。

DISPUTED — AI Guardian 拒绝或代理手动拒绝了证明。

CANCELLED — 代理已取消;托管资金已退还。

沙盒模式

SANDBOX 等级代理在沙盒模式下运行。所有任务通过模拟生命周期自动完成:

  1. 任务创建 (PENDING) —— 不托管任何资金
  2. 模拟操作员在几秒钟内自动接受任务
  3. 自动生成并提交合成证明
  4. 合成 Guardian 验证自动批准
  5. 任务完成 —— 没有真实资金流动,没有真人参与

沙盒任务的每个 API 响应都包含 sandbox: true 和一个解释模拟情况的 sandbox_notice 字段。在集成时使用这些字段来区分沙盒结果和真实结果。

退出沙盒模式: 验证您的电子邮件(升级到 VERIFIED 等级)并存入 USDC(升级到 STANDARD 等级)。真实任务将被派遣给经过验证的人类操作员。

托管与定价

交易量定价等级

HumanOps 使用基于交易量的定价 —— 您的费率随过去 30 天支出的增加而降低。每项任务适用 $1 的最低费用。所有充值均使用 Base L2 上的 USDC

标准 (Standard)
10%
< $5K/mo
增长 (Growth)
8%
$5K-$25K/mo
企业 (Enterprise)
5%
> $25K/mo

任务创建时: reward_usd + platformFee 从您的充值余额转移到托管账户。费用根据您当前的等级计算。

最低费用: 无论百分比计算结果如何,每项任务至少产生 $1 的平台费。

AI Guardian 批准 (APPROVE) 时: 奖励发放给操作员,费用计入平台收入。任务标记为 COMPLETED。

取消时: 全额托管金额(奖励 + 费用)退还至您的充值余额。

拒绝/争议 (REJECT/DISPUTE) 时: 资金保留在托管账户中等待解决。

结算期: 已完成任务的款项将在托管账户中保留 7 天,以便进行争议解决,之后操作员方可提现。

限制项数值
最小任务价值$10
最大任务价值$10,000
最小充值额$5
最大充值额$10,000
最小提现额$10
提现 Gas 费$0.01-$0.10 (deducted, capped at $2)
最小平台费$1 per task
标准费率10% (< $5K/mo spend)
增长费率8% ($5K-$25K/mo spend)
企业费率5% (> $25K/mo spend)
托管锁定期7 days

Webhooks

任务回调

如果您在创建任务时提供了 callback_url,当 AI Guardian 做出决定时,HumanOps 将向该 URL 发送 POST 状态更新。

为了安全验证,请同时提供 callback_secret。设置后,回调将包含一个 X-HumanOps-Signature 请求头,其中包含原始请求体的十六进制编码 HMAC-SHA256 签名。

Callback Payload
JSON
{
  "event": "task.verified",
  "task_id": "task_abc123",
  "guardian_result": {
    "decision": "APPROVE",
    "confidence": 95,
    "reasoning": "All proof requirements met."
  },
  "timestamp": "2026-02-06T14:31:00Z"
}

事件:task.verified, task.disputed, task.manual_review

Verify Signature (Node.js)
TS
import crypto from "node:crypto";
import express from "express";

const app = express();

// Use raw body so the signature matches exactly what was signed.
app.post("/webhook/humanops", express.raw({ type: "*/*" }), (req, res) => {
  const secret = process.env.HUMANOPS_CALLBACK_SECRET;
  if (!secret) return res.status(500).send("Missing HUMANOPS_CALLBACK_SECRET");

  const sig = String(req.header("X-HumanOps-Signature") || "");
  const computed = crypto
    .createHmac("sha256", secret)
    .update(req.body)
    .digest("hex");

  const ok =
    sig.length === computed.length &&
    crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(computed));

  if (!ok) return res.status(401).send("Invalid signature");

  const event = JSON.parse(req.body.toString("utf8"));
  console.log("HumanOps event:", event.event, event.task_id);
  return res.sendStatus(204);
});

dLocal 支付 Webhook即将推出

POST/api/v1/webhooks/dlocal

接收来自 dLocal 的支付确认(法币充值)。使用 HMAC-SHA256 通过恒定时间比较验证 X-Signature 请求头。在状态为 PAIDCOMPLETED 时为代理的充值账户入账。此 Webhook 将在法币充值功能上线时启用。

Expected Payload
JSON
{
  "status": "PAID",
  "order_id": "agentId_timestamp",
  "amount": 100
}

MCP 服务端

HumanOps MCP 服务端允许 AI 助手(Claude、Cursor 等)直接通过 Model Context Protocol 委托现实世界任务。

配置

claude_desktop_config.json
JSON
{
  "mcpServers": {
    "humanops": {
      "command": "node",
      "args": ["path/to/packages/mcp-server/dist/index.js"],
      "env": {
        "HUMANOPS_API_KEY": "ho_live_EXAMPLE_KEY",
        "HUMANOPS_API_URL": "https://api.humanops.io"
      }
    }
  }
}

可用工具 (16)

search_operators

查找地点附近的经过验证的人类操作员。可按任务类型和最低评分过滤。

Params: lat, lng, radius_km?, task_type?, min_rating?

post_task

创建任务并托管资金。需要标题、描述、地点、奖励、截止日期、证明要求和任务类型。

Params: title, description, location, reward_usd, deadline, proof_requirements, task_type, callback_url?, callback_secret?, idempotency_key?

dispatch_digital_task

创建一个没有物理位置的数字任务(远程)。服务端将根据类别设置正确的域/证明类型默认值。

Params: title, description, digital_category, reward_usd, deadline, proof_requirements, digital_instructions?, callback_url?, callback_secret?, idempotency_key?

dispatch_credential_task

创建一个具有 E2EE 功能的第二梯队凭据任务。自动生成密钥对,并随任务发送公钥。

Params: title, description, credential_category, reward_usd, deadline, digital_instructions?, callback_url?

retrieve_credential

从已完成的凭据任务中检索并解密加密凭据。

Params: task_id

list_digital_categories

列出可用的数字任务类别及其默认证明要求和约束。

Params: (无)

get_task_result

获取任务状态、证明和 AI Guardian 验证结果。

Params: task_id

check_verification_status

获取详细的验证信息:置信度分数、决定和各项要求的结果。

Params: task_id

fund_account

向您的 HumanOps 账户存入 Base L2 上的 USDC。在测试模式下,资金会立即入账。

Params: amount_usdc ($5 - $10,000), tx_hash (Base L2 交易哈希)

request_payout

请求在 Base L2 上提现 USDC。最低 $10。提现金额中将扣除少量 Gas 费。响应包含 gas_fee_usd 和 net_amount_usd。

Params: amount_usd, wallet_address, chain

get_balance

获取您的可用余额和托管余额。

Params: (无)

get_deposit_address

获取您在 Base L2 上的 USDC 充值地址。

Params: (无)

approve_estimate

批准操作员的时间估算。将任务从 ESTIMATE_PENDING 移至 ACCEPTED,以便操作员开始工作。

Params: task_id

reject_estimate

拒绝操作员的时间估算。任务返回 PENDING 状态,可供其他操作员领取。

Params: task_id, reason?

cancel_task

取消处于待处理、估时待定或已接受状态的任务,并退还托管资金。

Params: task_id

list_tasks

列出您的任务,支持可选过滤和分页。

Params: status?, limit?, offset?

速率限制

速率限制按 IP + 路径使用固定窗口算法应用。超过限制将返回 429 Too Many Requests

端点限制
POST /agents/register20 req/hour
GET/POST /agents/verify-email10 req/hour
POST /agents/resend-verification3 req/hour
POST /operator/upload10 req/min
All other endpoints100 req/min

我们建议在遇到速率限制时使用指数退避策略。

错误代码

所有错误均返回包含 error 字段的 JSON 主体。

代码描述
400错误请求 / 验证错误
401缺少或无效的 API 密钥 / 操作员 ID / Webhook 签名
402托管余额不足
403需要 KYC 验证或缺少管理员密钥
404未找到资源
409冲突(重复的电子邮件、任务状态冲突、幂等键重复使用)
410已失效(例如:任务已过期)
422无法处理(任务因政策/Guardian 筛选或违反使用条款而被拦截)
429请求过多(受速率限制)
500服务器内部错误
Error Response Example
JSON
{
  "error": "Insufficient balance for escrow",
  "details": { ... }
}