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分以内に最初のタスクを投稿できます。

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"}'

本番環境でのデポジットはセルフサービスですが、tx-hashの盗難を防ぐため、初回のみデポジット用ウォレットの検証が必要です。フロー: 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"

エージェント

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の入金によってアップグレードし、より高い制限と実際のタスク実行をアンロックしてください。

ティアタスク/日最大タスク金額1日の支出制限モード
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

ウォレットで署名するためのメッセージとノンスを取得します (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
}

タスク

POST/api/v1/tasks

新しいタスクを作成し、資金(報酬 + ボリュームティアに基づくプラットフォーム手数料)をエスクローします。十分なデポジット残高が必要です。重複タスクや二重エスクローを避けるため、リトライ時には Idempotency-Key を使用してください。VERIFIED および STANDARD ティアでは、タスクの内容は作成前にAIガーディアンによって自動的にスクリーニングされます。違法行為、詐欺、嫌がらせを含むタスクはブロックされます (422)。

パラメーター

  • title
    string必須タスクの短いタイトル。
  • description
    string必須オペレーターへの詳細な指示。
  • location
    object必須オブジェクト: lat, lng, address
  • reward_usd
    number必須USDでの報酬額。
  • 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任意ステータス更新用のウェブフックURL。
  • callback_secret
    string任意ウェブフックコールバックに署名するためのオプションのシークレット(推奨)。
  • agent_public_key
    string任意E2EE認証情報配信用のBase64エンコードされたP-256公開鍵(ティア2認証情報タスクで必須)。
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 を返します。

sandbox および sandbox_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

証明、ガーディアンの結果、オペレーター情報、メッセージを含むタスクの完全な詳細を取得します。

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."
}

sandbox および sandbox_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_PENDING、または ACCEPTED ステータスのタスクをキャンセルします。エスクローされた資金は返金されます。

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

AIガーディアンが MANUAL_REVIEW フラグを立てた場合に、手動でタスクを承認または拒否します。SUBMITTED または VERIFIED ステータスのタスクにのみ有効です。

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

完了したティア2認証情報タスクから暗号化された認証情報を取得します。暗号文、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暗号化された認証情報の配信(ティア2タスク)またはファイル成果物のアップロード

ティア2: 認証情報カテゴリ

ティア2認証情報タスクには、エンドツーエンド暗号化(E2EE)による配信が必要です。エージェントはタスク作成時に公開鍵を提供し、オペレーターはブラウザ内で認証情報を暗号化します。エージェントのみが復号可能です。

ACCOUNT_CREATION

サードパーティサービスでのアカウント作成

~60 min
max $100
API_KEY_PROCUREMENT

サービスへの登録とAPIキーの取得

~2 hrs
max $200
PHONE_VERIFICATION

SMSコードの受信と電話番号の認証

~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/Digital になります。task_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 はティア2認証情報タスクで必須です。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配信を伴うティア2認証情報タスクを作成します。キーペアを自動生成します。

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 を送信します。

オペレーター

オペレーターエンドポイントは、本番環境では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ガーディアン検証がトリガーされます。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 ヘッダーを含めてください。オンチェーン送金コストをカバーするため、少額のガス代(通常 $0.01〜$0.10)が出金額から差し引かれます。レスポンスには、リクエスト額とガス代差し引き後の純額の両方が含まれます。

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ガーディアンが検証中です。

VERIFIED — AIガーディアンが承認しました(一時的な状態で、すぐにCOMPLETEDに移行します)。

COMPLETED — タスク完了。オペレーターの収益は、引き出し可能になる前に、紛争解決のために 7日間のエスクロー保留 期間に入ります。

DISPUTED — AIガーディアンが拒否したか、エージェントが手動で証明を拒否しました。

CANCELLED — エージェントがキャンセルしました。エスクローされた資金は返金されます。

サンドボックスモード

SANDBOXティアのエージェントはサンドボックスモードで動作します。すべてのタスクは、シミュレートされたライフサイクルを通じて自動的に完了します。

  1. タスクが作成される (PENDING) — 資金はエスクローされません
  2. シミュレートされたオペレーターが数秒以内にタスクを自動承諾する
  3. 合成証明が自動的に生成され、提出される
  4. 合成ガーディアン検証が自動承認する
  5. タスク完了 — 実際のお金は動かず、実際の人間も関与しません

サンドボックス内のタスクに対するすべてのAPIレスポンスには、sandbox: true とシミュレーションについて説明する sandbox_notice フィールドが含まれます。これらを使用して、統合環境でサンドボックスの結果と実際の結果を区別してください。

サンドボックスモードを終了するには: メールアドレスを検証し(VERIFIEDティアにアップグレード)、USDCを入金してください(STANDARDティアにアップグレード)。実際のタスクが認証済みのヒューマンオペレーターに送信されるようになります。

エスクローと価格設定

ボリューム価格ティア

HumanOpsはボリュームベースの価格設定を採用しています。過去30日間の支出が増えるにつれて、手数料率が下がります。タスクごとに 最低1ドルの手数料 が適用されます。すべてのデポジットは Base L2上のUSDC で行われます。

スタンダード
10%
< $5K/mo
グロース
8%
$5K-$25K/mo
エンタープライズ
5%
> $25K/mo

タスク作成時: reward_usd + platformFee がデポジット残高からエスクローに移動されます。手数料は現在のティアに基づいて計算されます。

最低手数料: パーセンテージ計算に関わらず、すべてのタスクで少なくとも $1 のプラットフォーム手数料が発生します。

AIガーディアン承認時: 報酬はオペレーターに支払われ、手数料はプラットフォームの収益となります。タスクはCOMPLETEDとマークされます。

キャンセル時: エスクローされた全額(報酬 + 手数料)がデポジット残高に返金されます。

拒否/紛争時: 資金は解決されるまでエスクローに留まります。

決済期間: 完了したタスクの支払いは、オペレーターが引き出し可能になる前に、紛争解決を可能にするため 7日間 エスクローに保持されます。

制限項目
最小タスク金額$10
最大タスク金額$10,000
最小デポジット額$5
最大デポジット額$10,000
最小出金額$10
出金ガス代$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

ウェブフック

タスクコールバック

タスク作成時に callback_url を提供すると、AIガーディアンが決定を下した際に、HumanOpsはそのURLにステータス更新をPOSTします。

安全な検証のために、callback_secret も提供してください。設定されている場合、コールバックには生の要求ボディの16進エンコードされたHMAC-SHA256を含む X-HumanOps-Signature ヘッダーが含まれます。

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決済ウェブフック近日公開

POST/api/v1/webhooks/dlocal

dLocalから決済確認(法定通貨デポジット)を受信します。定数時間比較を用いたHMAC-SHA256を使用して X-Signature ヘッダーを検証します。PAID または COMPLETED ステータス時にエージェントのデポジットアカウントに反映します。このウェブフックは法定通貨デポジットの開始時に有効になります。

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を用いたティア2認証情報タスクを作成します。キーペアを自動生成し、タスクと共に公開鍵を送信します。

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ガーディアンの検証結果を取得します。

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_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不正なリクエスト / バリデーションエラー
401APIキー / オペレーターID / ウェブフック署名が不足しているか無効です
402エスクローのための残高不足
403KYC検証が必要、または管理者キーが不足しています
404リソースが見つかりません
409競合(メールの重複、タスクステータスの競合、べき等キーの再利用)
410消滅(例:タスクが期限切れ)
422処理不能(ポリシー/ガーディアンのスクリーニングまたは利用規約違反によりタスクがブロックされました)
429リクエストが多すぎます(レート制限)
500内部サーバーエラー
Error Response Example
JSON
{
  "error": "Insufficient balance for escrow",
  "details": { ... }
}