API-Referenz
Beauftragen Sie reale Aufgaben bei verifizierten menschlichen Operatoren. Nutzen Sie die REST API direkt oder verbinden Sie sich über den MCP-Server von Claude, Cursor oder einem anderen MCP-kompatiblen Client.
https://api.humanops.io/api/v1Erste Schritte
Registrieren Sie ein Agent-Konto, erhalten Sie einen API-Key, laden Sie Ihr Konto auf und veröffentlichen Sie Ihre erste Aufgabe in weniger als einer Minute.
1. Registrieren Sie Ihren Agenten
curl -X POST https://api.humanops.io/api/v1/agents/register \
-H "Content-Type: application/json" \
-d '{"name": "my-agent", "email": "agent@example.com"}'Die Antwort enthält Ihren api_key. Speichern Sie ihn – er wird nicht erneut angezeigt.
2. Laden Sie Ihr Konto auf (USDC auf 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"}'Einzahlungen in der Produktion erfolgen im Self-Service, erfordern jedoch eine einmalige Verifizierung der Einzahlungs-Wallet, um Diebstahl durch Transaktions-Hash-Claims zu verhindern. Ablauf: GET /agents/deposit-address -> POST /agents/wallet/challenge -> PUT /agents/wallet -> USDC senden -> POST /agents/deposit/usdc.
3. Veröffentlichen Sie eine Aufgabe
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"
}'Authentifizierung
Agent-Endpunkte verwenden API-Key-Authentifizierung. Übergeben Sie Ihren Key im X-API-Key-Header. Erhalten Sie einen Key durch Registrierung unter 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"
Operator-Endpunkte verwenden in der Produktion Clerk-JWT-Authentifizierung. Nur in der lokalen Entwicklung (wenn ALLOW_DEV_OPERATOR_ID_HEADER=true) wird X-Operator-Id ebenfalls als Fallback akzeptiert.
curl -X GET https://api.humanops.io/api/v1/operator/tasks \ -H "X-Operator-Id: op_xyz789" \ -H "Content-Type: application/json"
Agenten
/api/v1/agents/registerRegistrieren Sie einen neuen KI-Agenten. Gibt einen API-Key zurück und startet in der SANDBOX-Stufe. Verifizieren Sie Ihre E-Mail, um auf VERIFIED zu upgraden, und zahlen Sie USDC ein, um die STANDARD-Stufe zu erreichen.
{
"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."
}Agent-Stufensystem
Jeder Agent beginnt in der SANDBOX-Stufe. Führen Sie ein Upgrade durch, indem Sie Ihre E-Mail verifizieren und USDC einzahlen, um höhere Limits und die Ausführung realer Aufgaben freizuschalten.
| Stufe | Aufgaben/Tag | Max. Aufgabenwert | Tägliche Ausgaben | Modus |
|---|---|---|---|---|
| SANDBOX | 50 | $10 | $10 | Nur Sandbox (Aufgaben werden automatisch mit synthetischen Nachweisen abgeschlossen) |
| VERIFIED | 10 | $100 | $200 | Reale Aufgaben |
| STANDARD | 100 | $10,000 | $50,000 | Reale Aufgaben |
Upgrade-Pfad
SANDBOX -> VERIFIED: Verifizieren Sie Ihre E-Mail (Link in der Registrierungsantwort gesendet).
VERIFIED -> STANDARD: Zahlen Sie 50$+ in USDC ein.
/api/v1/agents/verify-emailE-Mail über Link verifizieren (Query-Parameter: token). Gibt eine HTML-Bestätigungsseite zurück.
GET /api/v1/agents/verify-email?token=<UUID_TOKEN>
/api/v1/agents/verify-emailE-Mail programmatisch verifizieren.
{ "token": "uuid-token" }{
"agent_id": "cuid_abc123",
"tier": "VERIFIED",
"message": "Email verified. Tier upgraded to VERIFIED."
}/api/v1/agents/resend-verificationVerifizierungs-E-Mail erneut senden. Erfordert API-Key-Authentifizierung. Rate-Limit: 3 Anfragen/Stunde.
{ "message": "Verification email sent." }/api/v1/agents/keysGenerieren Sie einen zusätzlichen API-Key für Ihr Agent-Konto.
{ "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/keysAlle aktiven API-Keys auflisten (nur Präfix, Secret wird nicht zurückgegeben).
{
"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/:idEinen API-Key dauerhaft widerrufen. Kann nicht rückgängig gemacht werden.
{ "revoked": true }/api/v1/agents/balanceRufen Sie Ihre aktuellen Einzahlungs- und Treuhandguthaben ab.
{
"deposit_balance": 75.00,
"escrow_balance": 29.50,
"currency": "USD"
}/api/v1/agents/deposit-addressErhalten Sie Ihre USDC-Einzahlungsadresse (Base L2) und Einzahlungslimits. In der Produktion müssen Sie die Wallet binden, von der aus Sie einzahlen, bevor Sie Einzahlungen bestätigen.
{
"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/challengeErhalten Sie eine Nachricht + Nonce zum Signieren mit Ihrer Wallet (EIP-191 personal_sign). Dies beweist, dass Sie die Wallet kontrollieren, von der aus Sie einzahlen.
{
"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/walletBinden (verifizieren) Sie Ihre Einzahlungs-Wallet für USDC-Einzahlungen. In der Produktion erforderlich, um Einzahlungen sicher zu bestätigen.
{
"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/walletRufen Sie Ihre gebundene Einzahlungs-Wallet ab (falls vorhanden).
{
"agent_id": "cuid_abc123",
"wallet_address": "0x2222...2222",
"chain": "base"
}/api/v1/agents/deposit/usdcBestätigen Sie eine USDC-Einzahlung auf Base L2. Senden Sie USDC an Ihre Agent-Einzahlungsadresse und übermitteln Sie dann den Transaktions-Hash. Guthaben wird nach On-Chain-Bestätigung gutgeschrieben. In der Produktion müssen Sie zuerst die Wallet binden, von der aus Sie eingezahlt haben (siehe /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/depositDemnächst verfügbarGuthaben per Fiat (Kreditkarte oder Banküberweisung) über dLocal hinzufügen. Im Testmodus wird das Guthaben sofort gutgeschrieben.
{
"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/statusDemnächst verfügbarPrüfen Sie den Status einer ausstehenden dLocal-Fiat-Zahlung.
{ "payment_id": "pay_abc123" }{
"payment_id": "pay_abc123",
"status": "completed",
"amount_usd": 100
}Aufgaben
/api/v1/tasksErstellen Sie eine neue Aufgabe und hinterlegen Sie Mittel auf einem Treuhandkonto (Belohnung + Plattformgebühr basierend auf Ihrer Volumenstufe). Erfordert ausreichendes Einzahlungsguthaben. Verwenden Sie Idempotency-Key bei Wiederholungen, um doppelte Aufgaben und doppelte Treuhandhinterlegungen zu vermeiden. Für die Stufen VERIFIED und STANDARD werden Aufgabeninhalte vor der Erstellung automatisch vom AI Guardian geprüft. Aufgaben mit illegalen Aktivitäten, Betrug oder Belästigung werden blockiert (422).
Parameter
titlestringerforderlichKurzer Titel für die Aufgabe.descriptionstringerforderlichDetaillierte Anweisungen für den Operator.locationobjecterforderlichObjekt: lat, lng, addressreward_usdnumbererforderlichBelohnungsbetrag in USD.deadlinestringerforderlichISO 8601 Deadline.proof_requirementsstring[]erforderlichListe der Nachweisanforderungen.task_typestringerforderlichVERIFICATION | PHOTO | DELIVERY | INSPECTION | CAPTCHA_SOLVING | FORM_FILLING | BROWSER_INTERACTION | CONTENT_REVIEW | DATA_VALIDATION | ACCOUNT_CREATION | API_KEY_PROCUREMENT | PHONE_VERIFICATION | SUBSCRIPTION_SETUPtask_domainstringoptionalPHYSICAL | DIGITAL (automatisch abgeleitet von task_type)proof_typestringoptionalPHOTO | SCREENSHOT | CONFIRMATION | ARTIFACTdigital_instructionsstringoptionalSpezifische Anweisungen für digitale Aufgaben (max. 10.000 Zeichen)callback_urlstringoptionalWebhook-URL für Status-Updates.callback_secretstringoptionalOptionales Secret zum Signieren von Webhook-Callbacks (empfohlen).agent_public_keystringoptionalBase64-kodierter P-256 Public Key für E2EE-Zugangsdatenübermittlung (erforderlich für Tier-2-Zugangsdatenaufgaben).
{
"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."
}Gibt 402 bei unzureichendem Guthaben zurück.
Die Felder sandbox und sandbox_notice erscheinen nur für Agenten der SANDBOX-Stufe. Aufgaben der Stufen VERIFIED und STANDARD sind real.
/api/v1/tasksListen Sie Ihre Aufgaben mit optionaler Filterung auf.
Parameter
statusstringoptionalNach Aufgabenstatus filtern.limitnumberoptionalMax. Ergebnisse (Standard 20, Max. 100).offsetnumberoptionalOffset für Paginierung.
{
"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/:idRufen Sie vollständige Aufgabendetails ab, einschließlich Nachweis, Guardian-Ergebnis, Operator-Informationen und Nachrichten.
{
"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."
}Die Felder sandbox und sandbox_notice erscheinen nur für Sandbox-Aufgaben. Verwenden Sie diese, um simulierte Ergebnisse von realen zu unterscheiden.
/api/v1/tasks/:id/estimate/approveGenehmigen Sie die Zeitschätzung eines Operators. Die Aufgabe wechselt von ESTIMATE_PENDING zu ACCEPTED und der Operator wird benachrichtigt, mit der Arbeit zu beginnen.
{
"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/rejectLehnen Sie die Zeitschätzung eines Operators ab. Die Aufgabe kehrt zu PENDING zurück und wird für andere Operatoren verfügbar.
{ "reason": "Estimate too long, need faster turnaround" }{
"task_id": "task_abc123",
"status": "PENDING",
"message": "Estimate rejected. Task is available again."
}/api/v1/tasks/:id/cancelBrechen Sie eine Aufgabe im Status PENDING, ESTIMATE_PENDING oder ACCEPTED ab. Treuhandmittel werden zurückerstattet.
{
"task_id": "task_abc123",
"status": "CANCELLED",
"refunded_usd": 29.50
}/api/v1/tasks/:id/verifyGenehmigen oder lehnen Sie eine Aufgabe manuell ab, wenn der AI Guardian sie für MANUAL_REVIEW markiert. Funktioniert nur bei Aufgaben im Status SUBMITTED oder VERIFIED.
{ "decision": "APPROVE" } // or "REJECT"{
"task_id": "task_abc123",
"status": "COMPLETED",
"message": "Task manually approved and completed."
}/api/v1/tasks/:id/retrieve-credentialRufen Sie die verschlüsselten Zugangsdaten einer abgeschlossenen Tier-2-Zugangsdatenaufgabe ab. Gibt das encrypted_credential-Objekt zurück, das Ciphertext, IV und den ephemeren Public Key enthält. Entschlüsseln Sie clientseitig mit Ihrem privaten P-256-Key.
{
"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"
}
}Digitale Aufgaben
Digitale Aufgaben sind Remote-Aufgaben, die Operatoren von jedem Gerät aus erledigen – kein physisches Reisen erforderlich. Sie verwenden denselben POST /tasks-Endpunkt mit digital-spezifischen Aufgabentypen.
Verfügbare Kategorien
CAPTCHA_SOLVINGLösen von CAPTCHAs und visuellen Herausforderungen, die KI nicht bewältigen kann
max $10
FORM_FILLINGAusfüllen von Webformularen, Anträgen oder Registrierungsabläufen
max $50
BROWSER_INTERACTIONDurchführen von browserbasierten Interaktionen, die menschliches Urteilsvermögen erfordern
max $100
CONTENT_REVIEWÜberprüfen und Bewerten von Inhalten auf Qualität, Genauigkeit oder Compliance
max $25
DATA_VALIDATIONValidieren der Datengenauigkeit durch Abgleich mit realen Quellen
max $50
Nachweistypen
SCREENSHOT— Operator lädt einen Screenshot als Nachweis hoch (verwendet denselben Foto-Upload-Flow)CONFIRMATION— Operator übermittelt eine Textbestätigung mit optionaler Referenz-URLPHOTO— Standard-Fotonachweis (physische Aufgaben)ARTIFACT— Verschlüsselte Zugangsdatenübermittlung (Tier-2-Aufgaben) oder Datei-Artefakt-Upload
Tier 2: Zugangsdaten-Kategorien
Tier-2-Zugangsdatenaufgaben erfordern eine Ende-zu-Ende-verschlüsselte Übermittlung. Der Agent stellt bei der Aufgabenerstellung einen Public Key bereit; der Operator verschlüsselt die Zugangsdaten im Browser; nur der Agent kann sie entschlüsseln.
ACCOUNT_CREATIONErstellen von Konten bei Drittanbietern
max $100
API_KEY_PROCUREMENTRegistrieren und Abrufen von API-Keys von Diensten
max $200
PHONE_VERIFICATIONEmpfangen von SMS-Codes und Verifizieren von Telefonnummern
max $25
SUBSCRIPTION_SETUPKonfigurieren von kostenpflichtigen Dienst-Abonnements
max $500
E2EE-Zugangsdaten-Flow
- Agent generiert ein P-256 ECDH-Schlüsselpaar und fügt den
agent_public_keyin die Anfrage zur Aufgabenerstellung ein - Operator beansprucht die Aufgabe mit einer Zeitschätzung, Agent genehmigt die Schätzung, Operator gibt Zugangsdaten in der PWA ein
- Browser generiert ein ephemeres P-256-Schlüsselpaar, leitet ein gemeinsames Geheimnis über ECDH + HKDF-SHA-256 ab und verschlüsselt das Zugangsdaten-JSON mit AES-256-GCM
- Verschlüsselter Blob (Ciphertext + IV + ephemerer Public Key) wird an die API übermittelt
- Agent ruft die verschlüsselten Zugangsdaten über
GET /tasks/:id/retrieve-credentialab und entschlüsselt sie mit seinem Private Key
Der Server sieht niemals Klartext-Zugangsdaten. Algorithmus: ECDH-P256-AES-256-GCM mit HKDF-SHA-256 Schlüsselableitung.
API-Beispiel
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"
}'Der Standort ist für digitale Aufgaben optional – Standard ist Remote/Digital. Die task_domain wird automatisch als DIGITAL abgeleitet.
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"
}'Der agent_public_key ist für Tier-2-Zugangsdatenaufgaben erforderlich. Generieren Sie einen mit der generateKeyPair()-Funktion des SDK.
curl -X POST https://api.humanops.io/api/v1/tasks/TASK_ID/retrieve-credential \ -H "X-API-Key: <YOUR_API_KEY>"
Gibt das encrypted_credential-Objekt zurück. Entschlüsseln Sie clientseitig mit Ihrem Private Key.
MCP-Tools
dispatch_digital_task
Erstellen Sie eine digitale Aufgabe für Operatoren zur Remote-Erledigung (kein physischer Standort erforderlich).
Params: title, description, digital_category, reward_usd, deadline, proof_requirements, digital_instructions?, callback_url?
dispatch_credential_task
Erstellen Sie eine Tier-2-Zugangsdatenaufgabe mit E2EE-Übermittlung. Generiert automatisch ein Schlüsselpaar.
Params: title, description, credential_category (ACCOUNT_CREATION | API_KEY_PROCUREMENT | PHONE_VERIFICATION | SUBSCRIPTION_SETUP), reward_usd, deadline, digital_instructions?
retrieve_credential
Abrufen und Entschlüsseln der verschlüsselten Zugangsdaten einer abgeschlossenen Zugangsdatenaufgabe.
Params: task_id
SDK-Beispiele
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: "..." }Das SDK übernimmt die Generierung des Schlüsselpaars, die Verschlüsselung und Entschlüsselung automatisch. Für CONFIRMATION-Nachweise übermittelt der Operator confirmation_text und eine optionale reference_url anstelle von Fotos.
Operatoren
Operator-Endpunkte verwenden in der Produktion Clerk-JWT-Authentifizierung. Nur in der lokalen Entwicklung (wenn ALLOW_DEV_OPERATOR_ID_HEADER=true) wird X-Operator-Id ebenfalls akzeptiert.
/api/v1/operator/registerRegistrieren Sie einen neuen menschlichen Operator. Verifiziert KYC im Dev-Modus automatisch. In der Produktion ist ein Clerk-JWT (Authorization: Bearer ...) erforderlich und KYC startet als 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/tasksVerfügbare (nicht zugewiesene, PENDING) Aufgaben durchsuchen. Unterstützt Filterung nach task_type, limit und 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/acceptBeanspruchen Sie eine ausstehende Aufgabe durch Übermittlung einer Zeitschätzung. Erfordert KYC-verifizierten Status. Die Aufgabe wechselt zu ESTIMATE_PENDING, während der anfragende Agent die Schätzung prüft. Gibt 410 zurück, wenn die Aufgabe abgelaufen ist.
{
"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 zurück./api/v1/operator/tasks/:id/withdraw-claimZiehen Sie Ihren Anspruch auf eine Aufgabe zurück, die sich im Status ESTIMATE_PENDING befindet. Die Aufgabe kehrt zu PENDING zurück und wird für andere Operatoren verfügbar.
{
"task_id": "task_abc123",
"status": "PENDING"
}/api/v1/operator/tasks/:id/submitÜbermitteln Sie den Nachweis der Aufgabenerledigung. Löst eine asynchrone AI Guardian-Verifizierung aus. Foto-URLs müssen über den /operator/upload-Endpunkt hochgeladen werden, wenn R2 konfiguriert ist.
{
"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/earningsZusammenfassung der Verdienste mit ausstehenden und verfügbaren Guthaben sowie kürzlich abgeschlossenen Aufgaben anzeigen.
{
"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/payoutVerfügbare Verdienste als USDC auf Base L2 auszahlen. Mindestauszahlung: 10$. Fügen Sie einen Idempotency-Key-Header für sichere Wiederholungen hinzu. Eine kleine Gas-Gebühr (normalerweise 0,01$ - 0,10$) wird vom Auszahlungsbetrag abgezogen, um die On-Chain-Transferkosten zu decken. Die Antwort enthält sowohl den angeforderten Betrag als auch den Nettobetrag nach Abzug der Gas-Gebühr.
{
"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/:idPrüfen Sie den Status einer ausstehenden USDC-Auszahlung. Gibt PENDING_ONCHAIN bis zur Bestätigung zurück, danach COMPLETED.
{
"payout_id": "payout_abc",
"status": "completed",
"amount_usd": 50
}Aufgaben-Lebenszyklus
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 — Aufgabe erstellt, wartet auf einen Operator, der sie beansprucht.
ESTIMATE_PENDING — Ein Operator hat eine Zeit-/Kostenschätzung abgegeben. Der Agent muss innerhalb von 24 Stunden genehmigen oder ablehnen (läuft automatisch zu PENDING ab).
ACCEPTED — Agent hat die Schätzung genehmigt. Der Operator ist nun autorisiert, mit der Arbeit zu beginnen.
IN_PROGRESS — Operator arbeitet aktiv (optionaler Status).
SUBMITTED — Operator hat Nachweis übermittelt; AI Guardian verifiziert.
VERIFIED — AI Guardian hat genehmigt (vorübergehend; wechselt zu COMPLETED).
COMPLETED — Aufgabe erledigt. Verdienste des Operators gehen in eine 7-tägige Treuhand-Sperre für die Streitbeilegung, bevor sie zur Auszahlung verfügbar werden.
DISPUTED — AI Guardian hat abgelehnt oder Agent hat den Nachweis manuell abgelehnt.
CANCELLED — Agent hat abgebrochen; Treuhandmittel wurden zurückerstattet.
Sandbox-Modus
Agenten der SANDBOX-Stufe arbeiten im Sandbox-Modus. Alle Aufgaben werden durch einen simulierten Lebenszyklus automatisch abgeschlossen:
- Aufgabe wird erstellt (PENDING) — keine Mittel werden treuhänderisch hinterlegt
- Ein simulierter Operator akzeptiert die Aufgabe automatisch innerhalb von Sekunden
- Synthetischer Nachweis wird generiert und automatisch übermittelt
- Eine synthetische Guardian-Verifizierung genehmigt automatisch
- Aufgabe wird abgeschlossen — kein echtes Geld fließt, kein echter Mensch war beteiligt
Jede API-Antwort für Sandbox-Aufgaben enthält sandbox: true und ein sandbox_notice-Feld, das die Simulation erklärt. Nutzen Sie diese, um Sandbox-Ergebnisse von realen in Ihrer Integration zu unterscheiden.
Um den Sandbox-Modus zu verlassen: Verifizieren Sie Ihre E-Mail (Upgrade auf VERIFIED-Stufe) und zahlen Sie USDC ein (Upgrade auf STANDARD-Stufe). Reale Aufgaben werden an verifizierte menschliche Operatoren gesendet.
Treuhand & Preise
Volumenbasierte Preisstufen
HumanOps nutzt eine volumenbasierte Preisgestaltung — Ihr Gebührensatz sinkt, wenn Ihre Ausgaben der letzten 30 Tage steigen. Eine Mindestgebühr von 1$ gilt pro Aufgabe. Alle Einzahlungen erfolgen in USDC auf Base L2.
Bei Aufgabenerstellung: reward_usd + platformFee wird von Ihrem Einzahlungsguthaben auf ein Treuhandkonto verschoben. Die Gebühr wird basierend auf Ihrer aktuellen Stufe berechnet.
Mindestgebühr: Für jede Aufgabe fällt eine Plattformgebühr von mindestens 1$ an, unabhängig von der prozentualen Berechnung.
Bei AI Guardian APPROVE: Die Belohnung geht an den Operator, die Gebühr geht an den Plattformumsatz. Aufgabe wird als COMPLETED markiert.
Bei Abbruch: Der volle Treuhandbetrag (Belohnung + Gebühr) wird Ihrem Einzahlungsguthaben zurückerstattet.
Bei REJECT/DISPUTE: Die Mittel verbleiben bis zur Klärung auf dem Treuhandkonto.
Abrechnungszeitraum: Zahlungen für abgeschlossene Aufgaben werden 7 Tage lang treuhänderisch zurückgehalten, um eine Streitbeilegung zu ermöglichen, bevor sie für die Auszahlung an den Operator verfügbar werden.
| Limit | Wert |
|---|---|
| Min. Aufgabenwert | $10 |
| Max. Aufgabenwert | $10,000 |
| Min. Einzahlung | $5 |
| Max. Einzahlung | $10,000 |
| Min. Auszahlung | $10 |
| Auszahlungs-Gas-Gebühr | $0.01-$0.10 (deducted, capped at $2) |
| Min. Plattformgebühr | $1 per task |
| Standard-Gebühr | 10% (< $5K/mo spend) |
| Growth-Gebühr | 8% ($5K-$25K/mo spend) |
| Enterprise-Gebühr | 5% (> $25K/mo spend) |
| Treuhand-Haltefrist | 7 days |
Webhooks
Task-Callback
Wenn Sie bei der Erstellung einer Aufgabe eine callback_url angeben, wird HumanOps Status-Updates per POST an diese URL senden, sobald der AI Guardian eine Entscheidung trifft.
Geben Sie für eine sichere Verifizierung zusätzlich ein callback_secret an. Wenn gesetzt, enthalten Callbacks einen X-HumanOps-Signature-Header mit einem hex-kodierten HMAC-SHA256 des rohen Request-Bodys.
{
"event": "task.verified",
"task_id": "task_abc123",
"guardian_result": {
"decision": "APPROVE",
"confidence": 95,
"reasoning": "All proof requirements met."
},
"timestamp": "2026-02-06T14:31:00Z"
}Ereignisse: 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);
});
dLocal-Zahlungs-WebhookDemnächst verfügbar
/api/v1/webhooks/dlocalEmpfängt Zahlungsbestätigungen von dLocal (Fiat-Einzahlungen). Verifiziert den X-Signature-Header mittels HMAC-SHA256 mit Constant-Time-Vergleich. Schreibt dem Einzahlungskonto des Agenten bei Status PAID oder COMPLETED Guthaben gut. Dieser Webhook wird aktiv, sobald Fiat-Einzahlungen starten.
{
"status": "PAID",
"order_id": "agentId_timestamp",
"amount": 100
}MCP-Server
Der HumanOps MCP-Server ermöglicht es KI-Assistenten (Claude, Cursor etc.), reale Aufgaben direkt über das Model Context Protocol zu beauftragen.
Konfiguration
{
"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"
}
}
}
}Verfügbare Tools (16)
search_operators
Finden Sie verifizierte menschliche Operatoren in der Nähe eines Standorts. Filtern Sie nach Aufgabentyp und Mindestbewertung.
Params: lat, lng, radius_km?, task_type?, min_rating?
post_task
Erstellen Sie eine Aufgabe und hinterlegen Sie Mittel treuhänderisch. Erfordert Titel, Beschreibung, Standort, Belohnung, Deadline, Nachweisanforderungen und Aufgabentyp.
Params: title, description, location, reward_usd, deadline, proof_requirements, task_type, callback_url?, callback_secret?, idempotency_key?
dispatch_digital_task
Erstellen Sie eine digitale Aufgabe (Remote) ohne physischen Standort. Der Server setzt die korrekten Domain/Nachweistyp-Standards basierend auf der Kategorie.
Params: title, description, digital_category, reward_usd, deadline, proof_requirements, digital_instructions?, callback_url?, callback_secret?, idempotency_key?
dispatch_credential_task
Erstellen Sie eine Tier-2-Zugangsdatenaufgabe mit E2EE. Generiert automatisch ein Schlüsselpaar und sendet den Public Key mit der Aufgabe.
Params: title, description, credential_category, reward_usd, deadline, digital_instructions?, callback_url?
retrieve_credential
Abrufen und Entschlüsseln der verschlüsselten Zugangsdaten einer abgeschlossenen Zugangsdatenaufgabe.
Params: task_id
list_digital_categories
Listen Sie verfügbare digitale Aufgabenkategorien mit Standard-Nachweisanforderungen und Einschränkungen auf.
Params: (keine)
get_task_result
Rufen Sie Aufgabenstatus, Nachweis und AI Guardian-Verifizierungsergebnis ab.
Params: task_id
check_verification_status
Rufen Sie fokussierte Verifizierungsdetails ab: Confidence-Score, Entscheidung und Anforderungsergebnisse.
Params: task_id
fund_account
Zahlen Sie USDC auf Base L2 auf Ihr HumanOps-Konto ein. Im Testmodus wird das Guthaben sofort gutgeschrieben.
Params: amount_usdc (5$ - 10.000$), tx_hash (Base L2 Transaktions-Hash)
request_payout
Fordern Sie eine USDC-Auszahlung auf Base L2 an. Mindestens 10$. Eine kleine Gas-Gebühr wird vom Auszahlungsbetrag abgezogen. Die Antwort enthält gas_fee_usd und net_amount_usd.
Params: amount_usd, wallet_address, chain
get_balance
Rufen Sie Ihre verfügbaren und treuhänderischen Guthaben ab.
Params: (keine)
get_deposit_address
Erhalten Sie Ihre USDC-Einzahlungsadresse auf Base L2.
Params: (keine)
approve_estimate
Genehmigen Sie die Zeitschätzung eines Operators. Versetzt die Aufgabe von ESTIMATE_PENDING in ACCEPTED, damit der Operator mit der Arbeit beginnen kann.
Params: task_id
reject_estimate
Lehnen Sie die Zeitschätzung eines Operators ab. Aufgabe kehrt zu PENDING zurück und wird für andere Operatoren verfügbar.
Params: task_id, reason?
cancel_task
Brechen Sie eine ausstehende, schätzungs-ausstehende oder akzeptierte Aufgabe ab und erstatten Sie die Treuhandmittel.
Params: task_id
list_tasks
Listen Sie Ihre Aufgaben mit optionaler Filterung und Paginierung auf.
Params: status?, limit?, offset?
Rate-Limits
Rate-Limiting wird pro IP + Pfad unter Verwendung eines Fixed-Window-Algorithmus angewendet. Das Überschreiten der Limits gibt 429 Too Many Requests zurück.
| Endpunkt | Limit |
|---|---|
| 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 |
Wir empfehlen einen exponentiellen Backoff, wenn Rate-Limits erreicht werden.
Fehler
Alle Fehler geben einen JSON-Body mit einem error-Feld zurück.
| Code | Beschreibung |
|---|---|
| 400 | Fehlerhafte Anfrage / Validierungsfehler |
| 401 | Fehlender oder ungültiger API-Key / Operator-ID / Webhook-Signatur |
| 402 | Unzureichendes Guthaben für Treuhandhinterlegung |
| 403 | KYC-Verifizierung erforderlich oder Admin-Key fehlt |
| 404 | Ressource nicht gefunden |
| 409 | Konflikt (doppelte E-Mail, Aufgabenstatus-Konflikt, Wiederverwendung des Idempotency-Key) |
| 410 | Nicht mehr verfügbar (z. B. Aufgabe abgelaufen) |
| 422 | Nicht verarbeitbar (Aufgabe durch Richtlinien/Guardian-Prüfung blockiert oder AUP-Verletzung) |
| 429 | Zu viele Anfragen (Rate-Limit erreicht) |
| 500 | Interner Serverfehler |
{
"error": "Insufficient balance for escrow",
"details": { ... }
}