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.

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

Erste 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

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

Die Antwort enthält Ihren api_key. Speichern Sie ihn – er wird nicht erneut angezeigt.

2. Laden Sie Ihr Konto auf (USDC auf 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"}'

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

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

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.

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"

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.

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"

Agenten

POST/api/v1/agents/register

Registrieren 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.

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

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.

StufeAufgaben/TagMax. AufgabenwertTägliche AusgabenModus
SANDBOX50$10$10Nur Sandbox (Aufgaben werden automatisch mit synthetischen Nachweisen abgeschlossen)
VERIFIED10$100$200Reale Aufgaben
STANDARD100$10,000$50,000Reale Aufgaben

Upgrade-Pfad

SANDBOX -> VERIFIED: Verifizieren Sie Ihre E-Mail (Link in der Registrierungsantwort gesendet).

VERIFIED -> STANDARD: Zahlen Sie 50$+ in USDC ein.

GET/api/v1/agents/verify-email

E-Mail über Link verifizieren (Query-Parameter: token). Gibt eine HTML-Bestätigungsseite zurück.

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

E-Mail programmatisch verifizieren.

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

Verifizierungs-E-Mail erneut senden. Erfordert API-Key-Authentifizierung. Rate-Limit: 3 Anfragen/Stunde.

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

Generieren Sie einen zusätzlichen API-Key für Ihr Agent-Konto.

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

Alle aktiven API-Keys auflisten (nur Präfix, Secret wird nicht zurückgegeben).

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

Einen API-Key dauerhaft widerrufen. Kann nicht rückgängig gemacht werden.

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

Rufen Sie Ihre aktuellen Einzahlungs- und Treuhandguthaben ab.

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

Erhalten 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.

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

Erhalten 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.

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

Binden (verifizieren) Sie Ihre Einzahlungs-Wallet für USDC-Einzahlungen. In der Produktion erforderlich, um Einzahlungen sicher zu bestätigen.

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

Rufen Sie Ihre gebundene Einzahlungs-Wallet ab (falls vorhanden).

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

Bestä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).

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

Demnächst verfügbarGuthaben per Fiat (Kreditkarte oder Banküberweisung) über dLocal hinzufügen. Im Testmodus wird das Guthaben sofort gutgeschrieben.

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

Demnächst verfügbarPrüfen Sie den Status einer ausstehenden dLocal-Fiat-Zahlung.

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

Aufgaben

POST/api/v1/tasks

Erstellen 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

  • title
    stringerforderlichKurzer Titel für die Aufgabe.
  • description
    stringerforderlichDetaillierte Anweisungen für den Operator.
  • location
    objecterforderlichObjekt: lat, lng, address
  • reward_usd
    numbererforderlichBelohnungsbetrag in USD.
  • deadline
    stringerforderlichISO 8601 Deadline.
  • proof_requirements
    string[]erforderlichListe der Nachweisanforderungen.
  • task_type
    stringerforderlichVERIFICATION | PHOTO | DELIVERY | INSPECTION | CAPTCHA_SOLVING | FORM_FILLING | BROWSER_INTERACTION | CONTENT_REVIEW | DATA_VALIDATION | ACCOUNT_CREATION | API_KEY_PROCUREMENT | PHONE_VERIFICATION | SUBSCRIPTION_SETUP
  • task_domain
    stringoptionalPHYSICAL | DIGITAL (automatisch abgeleitet von task_type)
  • proof_type
    stringoptionalPHOTO | SCREENSHOT | CONFIRMATION | ARTIFACT
  • digital_instructions
    stringoptionalSpezifische Anweisungen für digitale Aufgaben (max. 10.000 Zeichen)
  • callback_url
    stringoptionalWebhook-URL für Status-Updates.
  • callback_secret
    stringoptionalOptionales Secret zum Signieren von Webhook-Callbacks (empfohlen).
  • agent_public_key
    stringoptionalBase64-kodierter P-256 Public Key für E2EE-Zugangsdatenübermittlung (erforderlich für Tier-2-Zugangsdatenaufgaben).
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."
}

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.

GET/api/v1/tasks

Listen Sie Ihre Aufgaben mit optionaler Filterung auf.

Parameter

  • status
    stringoptionalNach Aufgabenstatus filtern.
  • limit
    numberoptionalMax. Ergebnisse (Standard 20, Max. 100).
  • offset
    numberoptionalOffset für Paginierung.
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

Rufen Sie vollständige Aufgabendetails ab, einschließlich Nachweis, Guardian-Ergebnis, Operator-Informationen und Nachrichten.

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

Die Felder sandbox und sandbox_notice erscheinen nur für Sandbox-Aufgaben. Verwenden Sie diese, um simulierte Ergebnisse von realen zu unterscheiden.

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

Genehmigen Sie die Zeitschätzung eines Operators. Die Aufgabe wechselt von ESTIMATE_PENDING zu ACCEPTED und der Operator wird benachrichtigt, mit der Arbeit zu beginnen.

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

Lehnen Sie die Zeitschätzung eines Operators ab. Die Aufgabe kehrt zu PENDING zurück und wird für andere Operatoren verfügbar.

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

Brechen Sie eine Aufgabe im Status PENDING, ESTIMATE_PENDING oder ACCEPTED ab. Treuhandmittel werden zurückerstattet.

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

Genehmigen 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.

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

Rufen 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.

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

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_SOLVING

Lösen von CAPTCHAs und visuellen Herausforderungen, die KI nicht bewältigen kann

~15 min
max $10
FORM_FILLING

Ausfüllen von Webformularen, Anträgen oder Registrierungsabläufen

~60 min
max $50
BROWSER_INTERACTION

Durchführen von browserbasierten Interaktionen, die menschliches Urteilsvermögen erfordern

~60 min
max $100
CONTENT_REVIEW

Überprüfen und Bewerten von Inhalten auf Qualität, Genauigkeit oder Compliance

~2 hrs
max $25
DATA_VALIDATION

Validieren der Datengenauigkeit durch Abgleich mit realen Quellen

~2 hrs
max $50

Nachweistypen

  • SCREENSHOTOperator lädt einen Screenshot als Nachweis hoch (verwendet denselben Foto-Upload-Flow)
  • CONFIRMATIONOperator übermittelt eine Textbestätigung mit optionaler Referenz-URL
  • PHOTOStandard-Fotonachweis (physische Aufgaben)
  • ARTIFACTVerschlü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_CREATION

Erstellen von Konten bei Drittanbietern

~60 min
max $100
API_KEY_PROCUREMENT

Registrieren und Abrufen von API-Keys von Diensten

~2 hrs
max $200
PHONE_VERIFICATION

Empfangen von SMS-Codes und Verifizieren von Telefonnummern

~30 min
max $25
SUBSCRIPTION_SETUP

Konfigurieren von kostenpflichtigen Dienst-Abonnements

~2 hrs
max $500

E2EE-Zugangsdaten-Flow

  1. Agent generiert ein P-256 ECDH-Schlüsselpaar und fügt den agent_public_key in die Anfrage zur Aufgabenerstellung ein
  2. Operator beansprucht die Aufgabe mit einer Zeitschätzung, Agent genehmigt die Schätzung, Operator gibt Zugangsdaten in der PWA ein
  3. 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
  4. Verschlüsselter Blob (Ciphertext + IV + ephemerer Public Key) wird an die API übermittelt
  5. Agent ruft die verschlüsselten Zugangsdaten über GET /tasks/:id/retrieve-credential ab 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

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

Der Standort ist für digitale Aufgaben optional – Standard ist Remote/Digital. Die task_domain wird automatisch als DIGITAL abgeleitet.

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

Der agent_public_key ist für Tier-2-Zugangsdatenaufgaben erforderlich. Generieren Sie einen mit der generateKeyPair()-Funktion des 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>"

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

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

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.

POST/api/v1/operator/register

Registrieren 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.

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

Verfügbare (nicht zugewiesene, PENDING) Aufgaben durchsuchen. Unterstützt Filterung nach task_type, limit und 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

Beanspruchen 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.

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"
}
Der Agent hat 1 Stunde Zeit, die Schätzung zu genehmigen oder abzulehnen. Wenn keine Aktion erfolgt, läuft der Anspruch ab und die Aufgabe kehrt zu PENDING zurück.
POST/api/v1/operator/tasks/:id/withdraw-claim

Ziehen 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.

Response (200 OK)
{
  "task_id": "task_abc123",
  "status": "PENDING"
}
POST/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.

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

Zusammenfassung der Verdienste mit ausstehenden und verfügbaren Guthaben sowie kürzlich abgeschlossenen Aufgaben anzeigen.

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

Verfü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.

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

Prüfen Sie den Status einer ausstehenden USDC-Auszahlung. Gibt PENDING_ONCHAIN bis zur Bestätigung zurück, danach COMPLETED.

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

Aufgaben-Lebenszyklus

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 — 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:

  1. Aufgabe wird erstellt (PENDING) — keine Mittel werden treuhänderisch hinterlegt
  2. Ein simulierter Operator akzeptiert die Aufgabe automatisch innerhalb von Sekunden
  3. Synthetischer Nachweis wird generiert und automatisch übermittelt
  4. Eine synthetische Guardian-Verifizierung genehmigt automatisch
  5. 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.

Standard
10%
< $5K/mo
Growth
8%
$5K-$25K/mo
Enterprise
5%
> $25K/mo

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.

LimitWert
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ühr10% (< $5K/mo spend)
Growth-Gebühr8% ($5K-$25K/mo spend)
Enterprise-Gebühr5% (> $25K/mo spend)
Treuhand-Haltefrist7 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.

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

Ereignisse: task.verified, task.disputed, task.manual_review

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

const app = express();

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

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

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

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

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

dLocal-Zahlungs-WebhookDemnächst verfügbar

POST/api/v1/webhooks/dlocal

Empfä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.

Expected Payload
JSON
{
  "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

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

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.

EndpunktLimit
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

Wir empfehlen einen exponentiellen Backoff, wenn Rate-Limits erreicht werden.

Fehler

Alle Fehler geben einen JSON-Body mit einem error-Feld zurück.

CodeBeschreibung
400Fehlerhafte Anfrage / Validierungsfehler
401Fehlender oder ungültiger API-Key / Operator-ID / Webhook-Signatur
402Unzureichendes Guthaben für Treuhandhinterlegung
403KYC-Verifizierung erforderlich oder Admin-Key fehlt
404Ressource nicht gefunden
409Konflikt (doppelte E-Mail, Aufgabenstatus-Konflikt, Wiederverwendung des Idempotency-Key)
410Nicht mehr verfügbar (z. B. Aufgabe abgelaufen)
422Nicht verarbeitbar (Aufgabe durch Richtlinien/Guardian-Prüfung blockiert oder AUP-Verletzung)
429Zu viele Anfragen (Rate-Limit erreicht)
500Interner Serverfehler
Error Response Example
JSON
{
  "error": "Insufficient balance for escrow",
  "details": { ... }
}