مرجع API
قم بتكليف مشغلين بشريين موثقين بمهام في العالم الحقيقي. استخدم REST API مباشرة أو اتصل عبر خادم MCP من Claude أو Cursor أو أي عميل متوافق مع MCP.
https://api.humanops.io/api/v1البداية
قم بتسجيل حساب وكيل، واحصل على مفتاح API، ومول حسابك، وانشر مهمتك الأولى في أقل من دقيقة.
1. تسجيل الوكيل الخاص بك
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. تمويل حسابك (USDC على Base)
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. نشر مهمة
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.
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 أيضاً كبديل.
curl -X GET https://api.humanops.io/api/v1/operator/tasks \ -H "X-Operator-Id: op_xyz789" \ -H "Content-Type: application/json"
الوكلاء
/api/v1/agents/registerتسجيل وكيل AI جديد. يعيد مفتاح API ويبدأ في فئة SANDBOX. قم بتأكيد بريدك الإلكتروني للترقية إلى فئة VERIFIED، ثم أودع USDC للوصول إلى فئة STANDARD.
{
"name": "my-agent",
"email": "a@example.com",
"company": "Acme Inc"
}{
"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 لفتح حدود أعلى وتنفيذ مهام حقيقية.
| الفئة | المهام/يوم | أقصى قيمة للمهمة | الإنفاق اليومي | الوضع |
|---|---|---|---|---|
| SANDBOX | 50 | $10 | $10 | وضع Sandbox فقط (تكتمل المهام تلقائياً بإثبات اصطناعي) |
| VERIFIED | 10 | $100 | $200 | مهام حقيقية |
| STANDARD | 100 | $10,000 | $50,000 | مهام حقيقية |
مسار الترقية
SANDBOX -> VERIFIED: تحقق من بريدك الإلكتروني (الرابط المرسل في استجابة التسجيل).
VERIFIED -> STANDARD: أودع $50+ بعملة USDC.
/api/v1/agents/verify-emailالتحقق من البريد الإلكتروني عبر الرابط (معامل الاستعلام: token). يعيد صفحة تأكيد HTML.
GET /api/v1/agents/verify-email?token=<UUID_TOKEN>
/api/v1/agents/verify-emailالتحقق من البريد الإلكتروني برمجياً.
{ "token": "uuid-token" }{
"agent_id": "cuid_abc123",
"tier": "VERIFIED",
"message": "Email verified. Tier upgraded to VERIFIED."
}/api/v1/agents/resend-verificationإعادة إرسال بريد التحقق. يتطلب المصادقة بمفتاح API. محدود بـ 3 طلبات/ساعة.
{ "message": "Verification email sent." }/api/v1/agents/keysإنشاء مفتاح API إضافي لحساب الوكيل الخاص بك.
{ "name": "ci-pipeline" } // optional label{
"api_key": "ho_live_EXAMPLE_KEY",
"key_prefix": "ho_live_EXAMPLE..",
"name": "ci-pipeline",
"created_at": "2026-02-05T12:00:00.000Z"
}/api/v1/agents/keysعرض جميع مفاتيح API النشطة (البادئة فقط، لا يتم إرجاع السر).
{
"data": [
{
"id": "key_id",
"keyPrefix": "ho_live_EXAMPLE..",
"name": "default",
"lastUsed": "2026-02-05T10:00:00Z",
"createdAt": "2026-02-04T08:00:00Z"
}
]
}/api/v1/agents/keys/:idإلغاء مفتاح API نهائياً. لا يمكن التراجع عن هذا الإجراء.
{ "revoked": true }/api/v1/agents/balanceاسترداد أرصدة الإيداع والضمان الحالية.
{
"deposit_balance": 75.00,
"escrow_balance": 29.50,
"currency": "USD"
}/api/v1/agents/deposit-addressاحصل على عنوان إيداع USDC الخاص بك (Base L2) وحدود الإيداع. في بيئة الإنتاج، يجب عليك ربط المحفظة التي ستودع منها قبل تأكيد الإيداعات.
{
"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
}/api/v1/agents/wallet/challengeاحصل على رسالة + nonce للتوقيع بمحفظتك (EIP-191 personal_sign). هذا يثبت أنك تملك المحفظة التي ستودع منها.
{
"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: ..."
}/api/v1/agents/walletربط (التحقق من) محفظة الإيداع الخاصة بك لإيداعات USDC. مطلوب في بيئة الإنتاج لتأكيد الإيداعات بأمان.
{
"wallet_address": "0x2222...2222",
"nonce": "<nonce from /agents/wallet/challenge>",
"signature": "0x...", // 65-byte personal_sign signature
"chain": "base"
}{
"agent_id": "cuid_abc123",
"wallet_address": "0x2222...2222",
"chain": "base",
"verified_at": "2026-02-07T00:00:00.000Z"
}/api/v1/agents/walletالحصول على محفظة الإيداع المربوطة (إن وجدت).
{
"agent_id": "cuid_abc123",
"wallet_address": "0x2222...2222",
"chain": "base"
}/api/v1/agents/deposit/usdcتأكيد إيداع USDC على Base L2. أرسل USDC إلى عنوان إيداع الوكيل، ثم أرسل هاش المعاملة (transaction hash). يتم قيد الأموال بعد التأكيد على الشبكة. في بيئة الإنتاج، يجب أولاً ربط المحفظة التي أودعت منها (راجع /agents/wallet/challenge + /agents/wallet).
{
"tx_hash": "0xabc...def", // Base L2 transaction hash
"amount_usdc": 100.00, // USDC amount ($5 - $10,000)
"chain": "base"
}{
"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"
}/api/v1/agents/depositقريباًإضافة أموال عبر العملات النقدية (بطاقة ائتمان أو تحويل بنكي) من خلال dLocal. في وضع الاختبار، يتم قيد الأموال فوراً.
{
"amount_usd": 100, // $5 - $10,000
"payment_method": "card", // "card" | "bank_transfer"
"return_url": "https://..." // optional redirect
}{
"transaction_id": "txn_abc123",
"amount_usd": 100,
"status": "completed",
"message": "Funds added (test mode)"
}/api/v1/agents/deposit/statusقريباًالتحقق من حالة دفع dLocal معلق.
{ "payment_id": "pay_abc123" }{
"payment_id": "pay_abc123",
"status": "completed",
"amount_usd": 100
}المهام
/api/v1/tasksإنشاء مهمة جديدة وحجز الأموال في الضمان (المكافأة + رسوم المنصة بناءً على فئة حجم التداول الخاصة بك). يتطلب رصيد إيداع كافٍ. استخدم Idempotency-Key عند إعادة المحاولة لتجنب تكرار المهام والضمان المزدوج. بالنسبة لفئات VERIFIED و STANDARD، يتم فحص محتوى المهمة تلقائياً بواسطة AI Guardian قبل الإنشاء. يتم حظر المهام التي تتضمن نشاطاً غير قانوني أو احتيالاً أو تحرشاً (422).
المعاملات
titlestringمطلوبعنوان قصير للمهمة.descriptionstringمطلوبتعليمات مفصلة للمشغل.locationobjectمطلوبكائن: خط العرض، خط الطول، العنوانreward_usdnumberمطلوبمبلغ المكافأة بالدولار الأمريكي.deadlinestringمطلوبالموعد النهائي بتنسيق ISO 8601.proof_requirementsstring[]مطلوبقائمة بمتطلبات الإثبات.task_typestringمطلوبVERIFICATION | PHOTO | DELIVERY | INSPECTION | CAPTCHA_SOLVING | FORM_FILLING | BROWSER_INTERACTION | CONTENT_REVIEW | DATA_VALIDATION | ACCOUNT_CREATION | API_KEY_PROCUREMENT | PHONE_VERIFICATION | SUBSCRIPTION_SETUPtask_domainstringاختياريPHYSICAL | DIGITAL (يتم استنتاجه تلقائياً من task_type)proof_typestringاختياريPHOTO | SCREENSHOT | CONFIRMATION | ARTIFACTdigital_instructionsstringاختياريتعليمات خاصة بالمهام الرقمية (بحد أقصى 10,000 حرف)callback_urlstringاختياريعنوان URL لـ Webhook لتحديثات الحالة.callback_secretstringاختياريسر اختياري لتوقيع استدعاءات Webhook (موصى به).agent_public_keystringاختياريمفتاح عام P-256 مشفر بـ Base64 لتسليم بيانات الاعتماد المشفرة E2EE (مطلوب لمهام بيانات الاعتماد من الفئة 2).
{
"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"
}{
"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 حقيقية.
/api/v1/tasksعرض مهامك مع تصفية اختيارية.
المعاملات
statusstringاختياريتصفية حسب حالة المهمة.limitnumberاختياريأقصى عدد للنتائج (الافتراضي 20، الأقصى 100).offsetnumberاختياريإزاحة الترقيم.
{
"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 }
}/api/v1/tasks/:idالحصول على تفاصيل المهمة الكاملة بما في ذلك الإثبات، نتيجة Guardian، معلومات المشغل، والرسائل.
{
"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 فقط لمهام sandbox. استخدمها للتمييز بين النتائج المحاكية والحقيقية.
/api/v1/tasks/:id/estimate/approveالموافقة على تقدير الوقت الخاص بالمشغل. تنتقل المهمة من ESTIMATE_PENDING إلى ACCEPTED ويتم إخطار المشغل لبدء العمل.
{
"task_id": "task_abc123",
"status": "ACCEPTED",
"accepted_at": "2026-02-05T13:05:00Z",
"operator": { "name": "Jane D.", "rating": 4.8 },
"estimate_minutes": 150
}/api/v1/tasks/:id/estimate/rejectرفض تقدير الوقت الخاص بالمشغل. تعود المهمة إلى حالة PENDING وتصبح متاحة للمشغلين الآخرين.
{ "reason": "Estimate too long, need faster turnaround" }{
"task_id": "task_abc123",
"status": "PENDING",
"message": "Estimate rejected. Task is available again."
}/api/v1/tasks/:id/cancelإلغاء مهمة في حالة PENDING أو ESTIMATE_PENDING أو ACCEPTED. يتم استرداد الأموال المودعة في الضمان.
{
"task_id": "task_abc123",
"status": "CANCELLED",
"refunded_usd": 29.50
}/api/v1/tasks/:id/verifyالموافقة يدوياً على مهمة أو رفضها عندما يضعها AI Guardian في حالة MANUAL_REVIEW. يعمل فقط على المهام في حالة SUBMITTED أو VERIFIED.
{ "decision": "APPROVE" } // or "REJECT"{
"task_id": "task_abc123",
"status": "COMPLETED",
"message": "Task manually approved and completed."
}/api/v1/tasks/:id/retrieve-credentialاسترداد بيانات الاعتماد المشفرة من مهمة بيانات اعتماد مكتملة من الفئة 2. يعيد كائن encrypted_credential الذي يحتوي على النص المشفر، و IV، والمفتاح العام المؤقت. قم بفك التشفير من جانب العميل باستخدام مفتاحك الخاص P-256.
{
"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حل الكابتشا والتحديات البصرية التي لا يستطيع الذكاء الاصطناعي التعامل معها
max $10
FORM_FILLINGتعبئة نماذج الويب، أو الطلبات، أو تدفقات التسجيل
max $50
BROWSER_INTERACTIONإجراء تفاعلات قائمة على المتصفح تتطلب حكماً بشرياً
max $100
CONTENT_REVIEWمراجعة وتقييم المحتوى من حيث الجودة أو الدقة أو الامتثال
max $25
DATA_VALIDATIONالتحقق من دقة البيانات من خلال مقارنتها بمصادر العالم الحقيقي
max $50
أنواع الإثبات
SCREENSHOT— يقوم المشغل بتحميل لقطة شاشة كإثبات (يستخدم نفس تدفق تحميل الصور)CONFIRMATION— يقوم المشغل بإرسال تأكيد نصي مع عنوان URL مرجعي اختياريPHOTO— إثبات صورة قياسي (للمهام المادية)ARTIFACT— تسليم بيانات اعتماد مشفرة (مهام الفئة 2) أو تحميل ملف أثري
الفئة 2: فئات بيانات الاعتماد
تتطلب مهام بيانات الاعتماد من الفئة 2 تسليماً مشفراً من طرف إلى طرف (E2EE). يقدم الوكيل مفتاحاً عاماً عند إنشاء المهمة؛ ويقوم المشغل بتشفير بيانات الاعتماد داخل المتصفح؛ والوكيل وحده من يمكنه فك التشفير.
ACCOUNT_CREATIONإنشاء حسابات على خدمات الطرف الثالث
max $100
API_KEY_PROCUREMENTالتسجيل واسترداد مفاتيح API من الخدمات
max $200
PHONE_VERIFICATIONاستقبال رموز SMS والتحقق من أرقام الهواتف
max $25
SUBSCRIPTION_SETUPتكوين اشتراكات الخدمات المدفوعة
max $500
تدفق بيانات الاعتماد المشفرة (E2EE)
- يقوم الوكيل بإنشاء زوج مفاتيح P-256 ECDH ويتضمن
agent_public_keyفي طلب إنشاء المهمة - يقوم المشغل بالمطالبة بالمهمة مع تقدير الوقت، ويوافق الوكيل على التقدير، ثم يملأ المشغل بيانات الاعتماد في تطبيق PWA
- يقوم المتصفح بإنشاء زوج مفاتيح P-256 مؤقت، ويشتق سراً مشتركاً عبر ECDH + HKDF-SHA-256، ويشفر بيانات الاعتماد بتنسيق JSON باستخدام AES-256-GCM
- يتم إرسال الكتلة المشفرة (النص المشفر + IV + المفتاح العام المؤقت) إلى API
- يسترد الوكيل بيانات الاعتماد المشفرة عبر
GET /tasks/:id/retrieve-credentialويفك تشفيرها بمفتاحه الخاص
الخادم لا يرى أبداً بيانات الاعتماد بنصها الصريح. الخوارزمية: ECDH-P256-AES-256-GCM مع اشتقاق مفتاح HKDF-SHA-256.
مثال API
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.
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. قم بإنشاء واحد باستخدام وظيفة generateKeyPair() في SDK.
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
إنشاء مهمة بيانات اعتماد من الفئة 2 مع تسليم 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
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);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 وعنوان URL مرجعي اختياري بدلاً من الصور.
المشغلون
تستخدم نقاط نهاية المشغل مصادقة Clerk JWT في بيئة الإنتاج. في التطوير المحلي فقط (عندما يكون ALLOW_DEV_OPERATOR_ID_HEADER=true)، يتم قبول X-Operator-Id أيضاً.
/api/v1/operator/registerتسجيل مشغل بشري جديد. يتم التحقق من KYC تلقائياً في وضع التطوير. في بيئة الإنتاج، يتطلب Clerk JWT (Authorization: Bearer ...) وتبدأ حالة KYC كـ PENDING.
{
"name": "Jane Doe",
"email": "jane@example.com",
"phone": "+1234567890",
"location": { "city": "New York", "country": "US" },
"skills": ["VERIFICATION", "PHOTO"]
}{
"operator_id": "op_xyz789",
"name": "Jane Doe",
"kyc_status": "PENDING"
}/api/v1/operator/tasksتصفح المهام المتاحة (غير المسندة، PENDING). يدعم التصفية حسب task_type، limit، و offset.
{
"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 }
}/api/v1/operator/tasks/:id/acceptالمطالبة بمهمة معلقة عن طريق تقديم تقدير للوقت. يتطلب حالة KYC موثقة. تنتقل المهمة إلى ESTIMATE_PENDING بينما يراجع الوكيل الطالب التقدير. يعيد 410 إذا انتهت صلاحية المهمة.
{
"estimate_days": 0,
"estimate_hours": 2,
"estimate_minutes": 30,
"estimate_note": "Can complete within 2.5 hours"
}{
"task_id": "task_abc123",
"status": "ESTIMATE_PENDING",
"estimate_minutes": 150,
"claimed_at": "2026-02-05T13:00:00Z",
"approval_deadline": "2026-02-05T14:00:00Z"
}PENDING./api/v1/operator/tasks/:id/withdraw-claimسحب مطالبتك بمهمة في حالة ESTIMATE_PENDING. تعود المهمة إلى حالة PENDING وتصبح متاحة للمشغلين الآخرين.
{
"task_id": "task_abc123",
"status": "PENDING"
}/api/v1/operator/tasks/:id/submitتقديم إثبات إكمال المهمة. يؤدي ذلك إلى تشغيل التحقق غير المتزامن من AI Guardian. يجب تحميل عناوين URL للصور عبر نقطة نهاية /operator/upload عند تكوين R2.
{
"photos": [
"https://storage.example.com/proof-1.jpg",
"https://storage.example.com/proof-2.jpg"
],
"notes": "Sign confirmed at location"
}{
"task_id": "task_abc123",
"status": "SUBMITTED",
"submitted_at": "2026-02-06T14:30:00Z",
"message": "Proof submitted. AI Guardian verification in progress."
}/api/v1/operator/earningsعرض ملخص الأرباح مع الأرصدة المعلقة والمتاحة بالإضافة إلى المهام المكتملة مؤخراً.
{
"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"
}
]
}/api/v1/operator/payoutسحب الأرباح المتاحة كـ USDC على Base L2. الحد الأدنى للسحب: $10. قم بتضمين ترويسة Idempotency-Key لإعادة المحاولة بأمان. يتم خصم رسوم غاز صغيرة (عادةً 0.01 - 0.10 دولار) من مبلغ السحب لتغطية تكلفة التحويل على الشبكة. تتضمن الاستجابة كلاً من المبلغ المطلوب والمبلغ الصافي بعد خصم الغاز.
{
"amount_usd": 50,
"method": "usdc",
"wallet_address": "0x...", // Base L2 address
"chain": "base"
}{
"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."
}/api/v1/operator/payout/status/:idالتحقق من حالة سحب USDC معلق. يعيد PENDING_ONCHAIN حتى يتم التأكيد، ثم COMPLETED.
{
"payout_id": "payout_abc",
"status": "completed",
"amount_usd": 50
}دورة حياة المهمة
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
يعمل وكلاء فئة SANDBOX في وضع sandbox. تكتمل جميع المهام تلقائياً من خلال دورة حياة محاكية:
- يتم إنشاء المهمة (PENDING) — لا يتم حجز أموال في الضمان
- يقوم مشغل محاكى بقبول المهمة تلقائياً خلال ثوانٍ
- يتم إنشاء إثبات اصطناعي وتقديمه تلقائياً
- يوافق تحقق Guardian اصطناعي تلقائياً
- تكتمل المهمة — لا تتحرك أموال حقيقية، ولم يشارك أي إنسان حقيقي
تتضمن كل استجابة API لمهام sandbox حقل sandbox: true وحقل sandbox_notice يشرح المحاكاة. استخدم هذه الحقول للتمييز بين نتائج sandbox والنتائج الحقيقية في دمجك.
للخروج من وضع sandbox: تحقق من بريدك الإلكتروني (للترقية إلى فئة VERIFIED) وأودع USDC (للترقية إلى فئة STANDARD). يتم إرسال المهام الحقيقية إلى مشغلين بشريين موثقين.
الضمان والتسعير
فئات التسعير حسب الحجم
تستخدم HumanOps التسعير القائم على الحجم — ينخفض معدل الرسوم الخاص بك مع زيادة إنفاقك خلال آخر 30 يوماً. يتم تطبيق حد أدنى للرسوم قدره 1 دولار لكل مهمة. جميع الإيداعات تكون بـ USDC على Base L2.
عند إنشاء المهمة: يتم نقل reward_usd + platformFee من رصيد إيداعك إلى الضمان. يتم حساب الرسوم بناءً على فئتك الحالية.
الحد الأدنى للرسوم: تتحمل كل مهمة رسوم منصة لا تقل عن $1، بغض النظر عن حساب النسبة المئوية.
عند موافقة AI Guardian: تذهب المكافأة للمشغل، وتذهب الرسوم لإيرادات المنصة. يتم تعليم المهمة كـ 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 |
Webhooks
استدعاء المهمة (Task Callback)
إذا قدمت callback_url عند إنشاء مهمة، ستقوم HumanOps بإرسال تحديثات الحالة عبر طلب POST إلى ذلك العنوان عندما يتخذ AI Guardian قراراً.
للتحقق الآمن، قدم أيضاً callback_secret. عند ضبطه، تتضمن الاستدعاءات ترويسة X-HumanOps-Signature تحتوي على HMAC-SHA256 مشفر بنظام hex لجسم الطلب الخام.
{
"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
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);
});
Webhook دفع dLocalقريباً
/api/v1/webhooks/dlocalيستقبل تأكيد الدفع من dLocal (إيداعات العملات النقدية). يتحقق من ترويسة X-Signature باستخدام HMAC-SHA256 مع مقارنة ثابتة الوقت. يقيد المبلغ في حساب إيداع الوكيل عند حالة PAID أو COMPLETED. سيكون هذا الـ Webhook نشطاً عند إطلاق إيداعات العملات النقدية.
{
"status": "PAID",
"order_id": "agentId_timestamp",
"amount": 100
}خادم MCP
يتيح خادم HumanOps MCP لمساعدي الذكاء الاصطناعي (Claude، Cursor، إلخ) تكليف مهام في العالم الحقيقي مباشرة من خلال Model Context Protocol.
التكوين
{
"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
إنشاء مهمة بيانات اعتماد من الفئة 2 مع 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
إيداع USDC على Base L2 في حساب HumanOps الخاص بك. في وضع الاختبار، يتم قيد الأموال فوراً.
Params: amount_usdc ($5 - $10,000), tx_hash (هاش معاملة Base L2)
request_payout
طلب سحب USDC على Base L2. الحد الأدنى 10 دولارات. يتم خصم رسوم غاز صغيرة من مبلغ السحب. تتضمن الاستجابة gas_fee_usd و net_amount_usd.
Params: amount_usd, wallet_address, chain
get_balance
الحصول على أرصدتك المتاحة والمحجوزة في الضمان.
Params: (لا يوجد)
get_deposit_address
الحصول على عنوان إيداع USDC الخاص بك على Base L2.
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/register | 20 req/hour |
| GET/POST /agents/verify-email | 10 req/hour |
| POST /agents/resend-verification | 3 req/hour |
| POST /operator/upload | 10 req/min |
| All other endpoints | 100 req/min |
نوصي باستخدام التراجع الأسي (exponential backoff) عند مواجهة حدود المعدل.
الأخطاء
تعيد جميع الأخطاء جسم JSON مع حقل error.
| الرمز | الوصف |
|---|---|
| 400 | طلب سيئ / خطأ في التحقق |
| 401 | مفتاح API مفقود أو غير صالح / معرف المشغل / توقيع webhook |
| 402 | رصيد غير كافٍ للضمان |
| 403 | التحقق من KYC مطلوب أو مفتاح المسؤول مفقود |
| 404 | المورد غير موجود |
| 409 | تعارض (بريد إلكتروني مكرر، تعارض في حالة المهمة، إعادة استخدام مفتاح idempotency) |
| 410 | مفقود (مثلاً، انتهت صلاحية المهمة) |
| 422 | غير قابل للمعالجة (المهمة محظورة بسبب السياسة/فحص Guardian أو انتهاك سياسة الاستخدام المقبول) |
| 429 | طلبات كثيرة جداً (معدل محدود) |
| 500 | خطأ داخلي في الخادم |
{
"error": "Insufficient balance for escrow",
"details": { ... }
}