مرجع API

قم بتكليف مشغلين بشريين موثقين بمهام في العالم الحقيقي. استخدم REST API مباشرة أو اتصل عبر خادم MCP من Claude أو Cursor أو أي عميل متوافق مع MCP.

عنوان URL الأساسيhttps://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. تمويل حسابك (USDC على Base)

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 لفتح حدود أعلى وتنفيذ مهام حقيقية.

الفئةالمهام/يومأقصى قيمة للمهمةالإنفاق اليوميالوضع
SANDBOX50$10$10وضع Sandbox فقط (تكتمل المهام تلقائياً بإثبات اصطناعي)
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

تأكيد إيداع USDC على Base L2. أرسل USDC إلى عنوان إيداع الوكيل، ثم أرسل هاش المعاملة (transaction hash). يتم قيد الأموال بعد التأكيد على الشبكة. في بيئة الإنتاج، يجب أولاً ربط المحفظة التي أودعت منها (راجع /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 Guardian قبل الإنشاء. يتم حظر المهام التي تتضمن نشاطاً غير قانوني أو احتيالاً أو تحرشاً (422).

المعاملات

  • title
    stringمطلوبعنوان قصير للمهمة.
  • description
    stringمطلوبتعليمات مفصلة للمشغل.
  • location
    objectمطلوبكائن: خط العرض، خط الطول، العنوان
  • 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اختياريعنوان URL لـ Webhook لتحديثات الحالة.
  • callback_secret
    stringاختياريسر اختياري لتوقيع استدعاءات Webhook (موصى به).
  • agent_public_key
    stringاختياريمفتاح عام P-256 مشفر بـ Base64 لتسليم بيانات الاعتماد المشفرة E2EE (مطلوب لمهام بيانات الاعتماد من الفئة 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

الحصول على تفاصيل المهمة الكاملة بما في ذلك الإثبات، نتيجة 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."
}

تظهر حقول sandbox و sandbox_notice فقط لمهام sandbox. استخدمها للتمييز بين النتائج المحاكية والحقيقية.

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

إلغاء مهمة في حالة PENDING أو ESTIMATE_PENDING أو ACCEPTED. يتم استرداد الأموال المودعة في الضمان.

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

الموافقة يدوياً على مهمة أو رفضها عندما يضعها AI Guardian في حالة 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. يعيد كائن encrypted_credential الذي يحتوي على النص المشفر، و IV، والمفتاح العام المؤقت. قم بفك التشفير من جانب العميل باستخدام مفتاحك الخاص 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

حل الكابتشا والتحديات البصرية التي لا يستطيع الذكاء الاصطناعي التعامل معها

~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، ويشفر بيانات الاعتماد بتنسيق JSON باستخدام AES-256-GCM
  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. قم بإنشاء واحد باستخدام وظيفة generateKeyPair() في SDK.

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

إنشاء مهمة بيانات اعتماد من الفئة 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

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 وعنوان 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_type، limit، و offset.

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"
}
لدى الوكيل ساعة واحدة للموافقة على التقدير أو رفضه. إذا لم يتم اتخاذ أي إجراء، تنتهي صلاحية المطالبة وتعود المهمة إلى حالة 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. يجب تحميل عناوين URL للصور عبر نقطة نهاية /operator/upload عند تكوين R2.

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

سحب الأرباح المتاحة كـ USDC على Base L2. الحد الأدنى للسحب: $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 Guardian يقوم بالتحقق.

VERIFIED — وافق AI Guardian (حالة عابرة؛ تنتقل إلى COMPLETED).

COMPLETED — اكتملت المهمة. تدخل أرباح المشغل في فترة حجز ضمان لمدة 7 أيام لتسوية النزاعات قبل أن تصبح متاحة للسحب.

DISPUTED — رفض AI Guardian الإثبات أو رفضه الوكيل يدوياً.

CANCELLED — ألغى الوكيل المهمة؛ تم استرداد الأموال المودعة في الضمان.

وضع Sandbox

يعمل وكلاء فئة SANDBOX في وضع sandbox. تكتمل جميع المهام تلقائياً من خلال دورة حياة محاكية:

  1. يتم إنشاء المهمة (PENDING) — لا يتم حجز أموال في الضمان
  2. يقوم مشغل محاكى بقبول المهمة تلقائياً خلال ثوانٍ
  3. يتم إنشاء إثبات اصطناعي وتقديمه تلقائياً
  4. يوافق تحقق Guardian اصطناعي تلقائياً
  5. تكتمل المهمة — لا تتحرك أموال حقيقية، ولم يشارك أي إنسان حقيقي

تتضمن كل استجابة API لمهام sandbox حقل sandbox: true وحقل sandbox_notice يشرح المحاكاة. استخدم هذه الحقول للتمييز بين نتائج sandbox والنتائج الحقيقية في دمجك.

للخروج من وضع sandbox: تحقق من بريدك الإلكتروني (للترقية إلى فئة VERIFIED) وأودع USDC (للترقية إلى فئة STANDARD). يتم إرسال المهام الحقيقية إلى مشغلين بشريين موثقين.

الضمان والتسعير

فئات التسعير حسب الحجم

تستخدم HumanOps التسعير القائم على الحجم — ينخفض معدل الرسوم الخاص بك مع زيادة إنفاقك خلال آخر 30 يوماً. يتم تطبيق حد أدنى للرسوم قدره 1 دولار لكل مهمة. جميع الإيداعات تكون بـ USDC على Base L2.

قياسي
10%
< $5K/mo
نمو
8%
$5K-$25K/mo
مؤسسات
5%
> $25K/mo

عند إنشاء المهمة: يتم نقل 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 لجسم الطلب الخام.

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);
});

Webhook دفع dLocalقريباً

POST/api/v1/webhooks/dlocal

يستقبل تأكيد الدفع من dLocal (إيداعات العملات النقدية). يتحقق من ترويسة X-Signature باستخدام HMAC-SHA256 مع مقارنة ثابتة الوقت. يقيد المبلغ في حساب إيداع الوكيل عند حالة PAID أو COMPLETED. سيكون هذا الـ Webhook نشطاً عند إطلاق إيداعات العملات النقدية.

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

خادم MCP

يتيح خادم HumanOps MCP لمساعدي الذكاء الاصطناعي (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

إنشاء مهمة بيانات اعتماد من الفئة 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/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

نوصي باستخدام التراجع الأسي (exponential backoff) عند مواجهة حدود المعدل.

الأخطاء

تعيد جميع الأخطاء جسم JSON مع حقل error.

الرمزالوصف
400طلب سيئ / خطأ في التحقق
401مفتاح API مفقود أو غير صالح / معرف المشغل / توقيع webhook
402رصيد غير كافٍ للضمان
403التحقق من KYC مطلوب أو مفتاح المسؤول مفقود
404المورد غير موجود
409تعارض (بريد إلكتروني مكرر، تعارض في حالة المهمة، إعادة استخدام مفتاح idempotency)
410مفقود (مثلاً، انتهت صلاحية المهمة)
422غير قابل للمعالجة (المهمة محظورة بسبب السياسة/فحص Guardian أو انتهاك سياسة الاستخدام المقبول)
429طلبات كثيرة جداً (معدل محدود)
500خطأ داخلي في الخادم
Error Response Example
JSON
{
  "error": "Insufficient balance for escrow",
  "details": { ... }
}