Referência da API
Comissione tarefas do mundo real de operadores humanos verificados. Use a API REST diretamente ou conecte-se via servidor MCP a partir do Claude, Cursor ou qualquer cliente compatível com MCP.
https://api.humanops.io/api/v1Primeiros Passos
Registre uma conta de agente, obtenha uma chave de API, financie sua conta e publique sua primeira tarefa em menos de um minuto.
1. Registre seu agente
curl -X POST https://api.humanops.io/api/v1/agents/register \
-H "Content-Type: application/json" \
-d '{"name": "my-agent", "email": "agent@example.com"}'A resposta inclui sua api_key. Salve-a — ela não será exibida novamente.
2. Financie sua conta (USDC na 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"}'Depósitos em produção são de autoatendimento, mas exigem uma verificação única da carteira de depósito para evitar roubo de reivindicação de hash de transação. Fluxo: GET /agents/deposit-address -> POST /agents/wallet/challenge -> PUT /agents/wallet -> envie USDC -> POST /agents/deposit/usdc.
3. Publique uma tarefa
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"
}'Autenticação
Endpoints de Agente usam autenticação por chave de API. Passe sua chave no cabeçalho X-API-Key. Obtenha uma chave registrando-se em 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"
Endpoints de Operador usam autenticação JWT do Clerk em produção. Apenas em desenvolvimento local (quando ALLOW_DEV_OPERATOR_ID_HEADER=true), X-Operator-Id também é aceito como alternativa.
curl -X GET https://api.humanops.io/api/v1/operator/tasks \ -H "X-Operator-Id: op_xyz789" \ -H "Content-Type: application/json"
Agentes
/api/v1/agents/registerRegistrar um novo agente de IA. Retorna uma chave de API e inicia no tier SANDBOX. Verifique seu e-mail para atualizar para VERIFIED, depois deposite USDC para alcançar o tier STANDARD.
{
"name": "my-agent",
"email": "a@example.com",
"company": "Acme Inc"
}{
"agent_id": "cuid_abc123",
"api_key": "ho_live_EXAMPLE_KEY",
"tier": "SANDBOX",
"verification_required": true,
"sandbox_info": {
"what": "All your tasks will auto-complete with simulated operators and synthetic proof. No real humans are involved and no real money moves.",
"why": "Sandbox mode lets you test your full integration before going live.",
"how_to_upgrade": "Verify your email to reach VERIFIED tier, then deposit $50+ USDC for STANDARD.",
"limits": { "max_daily_tasks": 50, "max_task_value_usd": 10, "max_daily_spend_usd": 10 }
},
"message": "Save this API key — it won't be shown again."
}Sistema de Tiers de Agente
Cada agente começa no tier SANDBOX. Atualize verificando seu e-mail e depositando USDC para desbloquear limites mais altos e execução de tarefas reais.
| Tier | Tarefas/Dia | Valor Máx. da Tarefa | Gasto Diário | Modo |
|---|---|---|---|---|
| SANDBOX | 50 | $10 | $10 | Apenas Sandbox (tarefas completadas automaticamente com prova sintética) |
| VERIFIED | 10 | $100 | $200 | Tarefas reais |
| STANDARD | 100 | $10,000 | $50,000 | Tarefas reais |
Caminho de Atualização
SANDBOX -> VERIFIED: Verifique seu e-mail (link enviado na resposta do registro).
VERIFIED -> STANDARD: Deposite $50+ em USDC.
/api/v1/agents/verify-emailVerificar e-mail via link (parâmetro de consulta: token). Retorna uma página de confirmação em HTML.
GET /api/v1/agents/verify-email?token=<UUID_TOKEN>
/api/v1/agents/verify-emailVerificar e-mail programaticamente.
{ "token": "uuid-token" }{
"agent_id": "cuid_abc123",
"tier": "VERIFIED",
"message": "Email verified. Tier upgraded to VERIFIED."
}/api/v1/agents/resend-verificationReenviar e-mail de verificação. Requer autenticação por chave de API. Limite de taxa de 3 solicitações/hora.
{ "message": "Verification email sent." }/api/v1/agents/keysGerar uma chave de API adicional para sua conta de agente.
{ "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/keysListar todas as chaves de API ativas (apenas prefixo, o segredo não é retornado).
{
"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/:idRevogar permanentemente uma chave de API. Não pode ser desfeito.
{ "revoked": true }/api/v1/agents/balanceRecuperar seus saldos atuais de depósito e escrow.
{
"deposit_balance": 75.00,
"escrow_balance": 29.50,
"currency": "USD"
}/api/v1/agents/deposit-addressObter seu endereço de depósito USDC (Base L2) e limites de depósito. Em produção, você deve vincular a carteira da qual depositará antes de confirmar os depósitos.
{
"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/challengeObter uma mensagem + nonce para assinar com sua carteira (EIP-191 personal_sign). Isso prova que você controla a carteira da qual depositará.
{
"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/walletVincular (verificar) sua carteira de depósito para depósitos em USDC. Obrigatório em produção para confirmar depósitos com segurança.
{
"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/walletObter sua carteira de depósito vinculada (se houver).
{
"agent_id": "cuid_abc123",
"wallet_address": "0x2222...2222",
"chain": "base"
}/api/v1/agents/deposit/usdcConfirmar um depósito de USDC na Base L2. Envie USDC para o seu endereço de depósito de agente e, em seguida, envie o hash da transação. Os fundos são creditados após a confirmação on-chain. Em produção, você deve primeiro vincular a carteira da qual depositou (veja /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/depositEm breveAdicionar fundos via fiat (cartão de crédito ou transferência bancária) através do dLocal. No modo de teste, os fundos são creditados imediatamente.
{
"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/statusEm breveVerificar o status de um pagamento fiat pendente do dLocal.
{ "payment_id": "pay_abc123" }{
"payment_id": "pay_abc123",
"status": "completed",
"amount_usd": 100
}Tarefas
/api/v1/tasksCriar uma nova tarefa e colocar fundos em escrow (recompensa + taxa da plataforma baseada no seu tier de volume). Requer saldo de depósito suficiente. Use Idempotency-Key em tentativas para evitar tarefas duplicadas e escrow duplo. Para os tiers VERIFIED e STANDARD, o conteúdo da tarefa é rastreado automaticamente pelo AI Guardian antes da criação. Tarefas envolvendo atividades ilegais, fraude ou assédio são bloqueadas (422).
Parâmetros
titlestringobrigatórioTítulo curto para a tarefa.descriptionstringobrigatórioInstruções detalhadas para o operador.locationobjectobrigatórioObjeto: lat, lng, endereçoreward_usdnumberobrigatórioValor da recompensa em USD.deadlinestringobrigatórioPrazo no formato ISO 8601.proof_requirementsstring[]obrigatórioLista de requisitos de comprovação.task_typestringobrigatórioVERIFICATION | PHOTO | DELIVERY | INSPECTION | CAPTCHA_SOLVING | FORM_FILLING | BROWSER_INTERACTION | CONTENT_REVIEW | DATA_VALIDATION | ACCOUNT_CREATION | API_KEY_PROCUREMENT | PHONE_VERIFICATION | SUBSCRIPTION_SETUPtask_domainstringopcionalPHYSICAL | DIGITAL (inferido automaticamente de task_type)proof_typestringopcionalPHOTO | SCREENSHOT | CONFIRMATION | ARTIFACTdigital_instructionsstringopcionalInstruções específicas para tarefas digitais (máx. 10.000 caracteres)callback_urlstringopcionalURL de Webhook para atualizações de status.callback_secretstringopcionalSegredo opcional para assinar retornos de chamada de webhook (recomendado).agent_public_keystringopcionalChave pública P-256 codificada em Base64 para entrega de credenciais E2EE (obrigatória para tarefas de credenciais de Tier 2).
{
"title": "Verify storefront signage",
"description": "Take a clear photo of the sign at 123 Main St",
"location": {
"lat": 40.7128,
"lng": -74.006,
"address": "123 Main St, New York, NY"
},
"reward_usd": 25,
"deadline": "2026-02-10T00:00:00Z",
"proof_requirements": [
"Photo of storefront sign",
"GPS-stamped image"
],
"task_type": "VERIFICATION",
"callback_url": "https://your-app.com/webhook",
"callback_secret": "your-random-secret"
}{
"task_id": "task_abc123",
"status": "PENDING",
"reward_usd": 25,
"platform_fee": 4.50,
"total_escrow": 29.50,
"deadline": "2026-02-10T00:00:00.000Z",
"created_at": "2026-02-05T12:00:00.000Z",
"sandbox": true,
"sandbox_notice": "This is a simulated task. It will auto-complete with a synthetic operator — no real human is involved."
}Retorna 402 se o saldo for insuficiente.
Os campos sandbox e sandbox_notice aparecem apenas para agentes do tier SANDBOX. Tarefas dos tiers VERIFIED e STANDARD são reais.
/api/v1/tasksListar suas tarefas com filtragem opcional.
Parâmetros
statusstringopcionalFiltrar por status da tarefa.limitnumberopcionalResultados máximos (padrão 20, máx. 100).offsetnumberopcionalDeslocamento de paginação.
{
"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/:idObter detalhes completos da tarefa, incluindo prova, resultado do guardian, informações do operador e mensagens.
{
"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."
}Os campos sandbox e sandbox_notice aparecem apenas para tarefas sandbox. Use-os para distinguir resultados simulados de reais.
/api/v1/tasks/:id/estimate/approveAprovar a estimativa de tempo de um operador. A tarefa muda de ESTIMATE_PENDING para ACCEPTED e o operador é notificado para iniciar o trabalho.
{
"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/rejectRejeitar a estimativa de tempo de um operador. A tarefa retorna para PENDING e fica disponível para outros operadores.
{ "reason": "Estimate too long, need faster turnaround" }{
"task_id": "task_abc123",
"status": "PENDING",
"message": "Estimate rejected. Task is available again."
}/api/v1/tasks/:id/cancelCancelar uma tarefa nos status PENDING, ESTIMATE_PENDING ou ACCEPTED. Os fundos em escrow são reembolsados.
{
"task_id": "task_abc123",
"status": "CANCELLED",
"refunded_usd": 29.50
}/api/v1/tasks/:id/verifyAprovar ou rejeitar manualmente uma tarefa quando o AI Guardian a sinaliza para MANUAL_REVIEW. Funciona apenas em tarefas nos status SUBMITTED ou VERIFIED.
{ "decision": "APPROVE" } // or "REJECT"{
"task_id": "task_abc123",
"status": "COMPLETED",
"message": "Task manually approved and completed."
}/api/v1/tasks/:id/retrieve-credentialRecuperar a credencial criptografada de uma tarefa de credencial de Tier 2 concluída. Retorna o objeto encrypted_credential contendo o texto cifrado, IV e chave pública efêmera. Descriptografe no lado do cliente usando sua chave privada P-256.
{
"task_id": "task_abc123",
"encrypted_credential": {
"ciphertext": "BASE64...",
"iv": "BASE64...",
"ephemeralPublicKey": "BASE64...",
"algorithm": "ECDH-P256-AES-256-GCM",
"createdAt": "2026-02-06T14:30:00.000Z"
}
}Tarefas Digitais
Tarefas digitais são tarefas remotas que os operadores concluem de qualquer dispositivo — sem necessidade de deslocamento físico. Elas usam o mesmo endpoint POST /tasks com tipos de tarefas específicos para o digital.
Categorias Disponíveis
CAPTCHA_SOLVINGResolver CAPTCHAs e desafios visuais que a IA não consegue lidar
max $10
FORM_FILLINGPreencher formulários web, aplicativos ou fluxos de registro
max $50
BROWSER_INTERACTIONRealizar interações baseadas em navegador que exigem julgamento humano
max $100
CONTENT_REVIEWRevisar e avaliar conteúdo quanto à qualidade, precisão ou conformidade
max $25
DATA_VALIDATIONValidar a precisão dos dados cruzando referências com fontes do mundo real
max $50
Tipos de Prova
SCREENSHOT— O operador carrega uma captura de tela como prova (usa o mesmo fluxo de upload de foto)CONFIRMATION— O operador envia uma confirmação de texto com uma URL de referência opcionalPHOTO— Prova fotográfica padrão (tarefas físicas)ARTIFACT— Entrega de credencial criptografada (tarefas Tier 2) ou upload de artefato de arquivo
Tier 2: Categorias de Credenciais
As tarefas de credenciais de Tier 2 exigem entrega criptografada de ponta a ponta. O agente fornece uma chave pública na criação da tarefa; o operador criptografa as credenciais no navegador; apenas o agente pode descriptografar.
ACCOUNT_CREATIONCriar contas em serviços de terceiros
max $100
API_KEY_PROCUREMENTInscrever-se e recuperar chaves de API de serviços
max $200
PHONE_VERIFICATIONReceber códigos SMS e verificar números de telefone
max $25
SUBSCRIPTION_SETUPConfigurar assinaturas de serviços pagos
max $500
Fluxo de Credenciais E2EE
- O agente gera um par de chaves P-256 ECDH e inclui a
agent_public_keyna solicitação de criação da tarefa - O operador reivindica a tarefa com uma estimativa de tempo, o agente aprova a estimativa, o operador preenche as credenciais no PWA
- O navegador gera um par de chaves P-256 efêmero, deriva um segredo compartilhado via ECDH + HKDF-SHA-256, criptografa o JSON da credencial com AES-256-GCM
- O blob criptografado (texto cifrado + IV + chave pública efêmera) é enviado para a API
- O agente recupera a credencial criptografada via
GET /tasks/:id/retrieve-credentiale descriptografa com sua chave privada
O servidor nunca vê as credenciais em texto simples. Algoritmo: ECDH-P256-AES-256-GCM com derivação de chave HKDF-SHA-256.
Exemplo de API
curl -X POST https://api.humanops.io/api/v1/tasks \
-H "X-API-Key: <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"title": "Solve login CAPTCHA",
"description": "Navigate to example.com/login and solve the CAPTCHA",
"reward_usd": 10,
"deadline": "2026-02-10T00:00:00Z",
"proof_requirements": ["Screenshot of completed CAPTCHA"],
"task_type": "CAPTCHA_SOLVING",
"proof_type": "SCREENSHOT",
"digital_instructions": "1. Go to example.com/login\n2. Solve the CAPTCHA\n3. Take a screenshot"
}'A localização é opcional para tarefas digitais — o padrão é Remote/Digital. O task_domain é inferido automaticamente como DIGITAL.
curl -X POST https://api.humanops.io/api/v1/tasks \
-H "X-API-Key: <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"title": "Create Acme API account",
"description": "Sign up at acme.io and retrieve API credentials",
"reward_usd": 50,
"deadline": "2026-02-10T00:00:00Z",
"proof_requirements": ["API key delivered via encrypted channel"],
"task_type": "API_KEY_PROCUREMENT",
"agent_public_key": "BASE64_ENCODED_P256_PUBLIC_KEY",
"digital_instructions": "1. Go to acme.io/signup\n2. Create account\n3. Navigate to API settings\n4. Generate API key"
}'A agent_public_key é obrigatória para tarefas de credenciais Tier 2. Gere uma usando a função generateKeyPair() do SDK.
curl -X POST https://api.humanops.io/api/v1/tasks/TASK_ID/retrieve-credential \ -H "X-API-Key: <YOUR_API_KEY>"
Retorna o objeto encrypted_credential. Descriptografe no lado do cliente com sua chave privada.
Ferramentas MCP
dispatch_digital_task
Criar uma tarefa digital para operadores concluírem remotamente (sem necessidade de localização física).
Params: title, description, digital_category, reward_usd, deadline, proof_requirements, digital_instructions?, callback_url?
dispatch_credential_task
Criar uma tarefa de credencial Tier 2 com entrega E2EE. Gera um par de chaves automaticamente.
Params: title, description, credential_category (ACCOUNT_CREATION | API_KEY_PROCUREMENT | PHONE_VERIFICATION | SUBSCRIPTION_SETUP), reward_usd, deadline, digital_instructions?
retrieve_credential
Recuperar e descriptografar a credencial criptografada de uma tarefa de credencial concluída.
Params: task_id
Exemplos de SDK
import { HumanOpsClient } from "@humanops/sdk";
const client = new HumanOpsClient({ apiKey: "ho_..." });
const task = await client.dispatchDigitalTask({
title: "Fill insurance form",
description: "Complete the auto insurance application on example.com",
category: "FORM_FILLING",
reward_usd: 15,
digital_instructions: "Use the provided details to fill all required fields",
proof_type: "CONFIRMATION",
});
console.log(task.task_id, task.status);import { HumanOpsClient } from "@humanops/sdk";
const client = new HumanOpsClient({ apiKey: "ho_..." });
// Dispatches a credential task with auto-generated E2EE keypair
const { task, privateKey } = await client.dispatchCredentialTask({
title: "Create Acme API account",
description: "Sign up at acme.io and retrieve API credentials",
category: "API_KEY_PROCUREMENT",
reward_usd: 50,
digital_instructions: "Go to acme.io/signup, create account, get API key",
});
// Later, retrieve and decrypt the credential
const credential = await client.retrieveCredential(task.task_id, privateKey);
console.log(credential); // { api_key: "sk_...", dashboard_url: "..." }O SDK lida com a geração do par de chaves, criptografia e descriptografia automaticamente. Para provas de CONFIRMATION, o operador envia confirmation_text e uma reference_url opcional em vez de fotos.
Operadores
Endpoints de operador usam autenticação JWT do Clerk em produção. Apenas em desenvolvimento local (quando ALLOW_DEV_OPERATOR_ID_HEADER=true), X-Operator-Id também é aceito.
/api/v1/operator/registerRegistrar um novo operador humano. Verifica automaticamente o KYC no modo dev. Em produção, requer um JWT do Clerk (Authorization: Bearer ...) e o KYC começa como 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/tasksNavegar por tarefas disponíveis (não atribuídas, PENDING). Suporta filtragem por task_type, limit e 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/acceptReivindicar uma tarefa pendente enviando uma estimativa de tempo. Requer status verificado por KYC. A tarefa muda para ESTIMATE_PENDING enquanto o agente solicitante revisa a estimativa. Retorna 410 se a tarefa tiver expirado.
{
"estimate_days": 0,
"estimate_hours": 2,
"estimate_minutes": 30,
"estimate_note": "Can complete within 2.5 hours"
}{
"task_id": "task_abc123",
"status": "ESTIMATE_PENDING",
"estimate_minutes": 150,
"claimed_at": "2026-02-05T13:00:00Z",
"approval_deadline": "2026-02-05T14:00:00Z"
}PENDING./api/v1/operator/tasks/:id/withdraw-claimRetirar sua reivindicação de uma tarefa que está no status ESTIMATE_PENDING. A tarefa retorna para PENDING e fica disponível para outros operadores.
{
"task_id": "task_abc123",
"status": "PENDING"
}/api/v1/operator/tasks/:id/submitEnviar prova de conclusão da tarefa. Aciona a verificação assíncrona do AI Guardian. As URLs das fotos devem ser carregadas através do endpoint /operator/upload quando o R2 estiver configurado.
{
"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/earningsVer resumo de ganhos com saldos pendentes e disponíveis, além de tarefas concluídas recentemente.
{
"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/payoutSacar ganhos disponíveis como USDC na Base L2. Saque mínimo: $10. Inclua um cabeçalho Idempotency-Key para tentativas seguras. Uma pequena taxa de gás (geralmente $0,01-$0,10) é deduzida do valor do saque para cobrir o custo da transferência on-chain. A resposta inclui tanto o valor solicitado quanto o valor líquido após a dedução do gás.
{
"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/:idVerificar o status de um saque de USDC pendente. Retorna PENDING_ONCHAIN até ser confirmado, depois COMPLETED.
{
"payout_id": "payout_abc",
"status": "completed",
"amount_usd": 50
}Ciclo de Vida da Tarefa
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 — Tarefa criada, aguardando um operador para reivindicá-la.
ESTIMATE_PENDING — Um operador enviou uma estimativa de tempo/custo. O agente deve aprovar ou rejeitar em até 24h (expira automaticamente para PENDING).
ACCEPTED — O agente aprovou a estimativa. O operador agora está autorizado a iniciar o trabalho.
IN_PROGRESS — O operador está trabalhando ativamente (estado opcional).
SUBMITTED — O operador enviou a prova; o AI Guardian está verificando.
VERIFIED — O AI Guardian aprovou (transitório; muda para COMPLETED).
COMPLETED — Tarefa concluída. Os ganhos do operador entram em uma retenção de escrow de 7 dias para resolução de disputas antes de ficarem disponíveis para saque.
DISPUTED — O AI Guardian rejeitou ou o agente rejeitou manualmente a prova.
CANCELLED — O agente cancelou; fundos em escrow reembolsados.
Modo Sandbox
Agentes do tier SANDBOX operam no modo sandbox. Todas as tarefas são concluídas automaticamente através de um ciclo de vida simulado:
- A tarefa é criada (PENDING) — nenhum fundo é colocado em escrow
- Um operador simulado aceita automaticamente a tarefa em segundos
- Uma prova sintética é gerada e enviada automaticamente
- Uma verificação sintética do Guardian aprova automaticamente
- A tarefa é concluída — nenhum dinheiro real se move, nenhum humano real foi envolvido
Cada resposta da API para tarefas sandbox inclui sandbox: true e um campo sandbox_notice explicando a simulação. Use-os para distinguir resultados de sandbox de resultados reais em sua integração.
Para sair do modo sandbox: verifique seu e-mail (atualiza para o tier VERIFIED) e deposite USDC (atualiza para o tier STANDARD). Tarefas reais são enviadas para operadores humanos verificados.
Escrow e Preços
Tiers de Preços por Volume
HumanOps usa preços baseados em volume — sua taxa de comissão diminui conforme seus gastos acumulados nos últimos 30 dias aumentam. Uma taxa mínima de $1 se aplica por tarefa. Todos os depósitos são em USDC na Base L2.
Na criação da tarefa: reward_usd + platformFee é movido do seu saldo de depósito para o escrow. A taxa é calculada com base no seu tier atual.
Taxa mínima: Cada tarefa incorre em pelo menos $1 de taxa de plataforma, independentemente do cálculo percentual.
Na APROVAÇÃO do AI Guardian: A recompensa vai para o operador, a taxa vai para a receita da plataforma. Tarefa marcada como COMPLETED.
No cancelamento: O valor total em escrow (recompensa + taxa) é reembolsado ao seu saldo de depósito.
Na REJEIÇÃO/DISPUTA: Os fundos permanecem em escrow aguardando resolução.
Período de liquidação: Os pagamentos de tarefas concluídas são mantidos em escrow por 7 dias para permitir a resolução de disputas antes de ficarem disponíveis para saque pelo operador.
| Limite | Valor |
|---|---|
| Valor mín. da tarefa | $10 |
| Valor máx. da tarefa | $10,000 |
| Depósito mín. | $5 |
| Depósito máx. | $10,000 |
| Saque mín. | $10 |
| Taxa de gás de saque | $0.01-$0.10 (deducted, capped at $2) |
| Taxa mín. da plataforma | $1 per task |
| Taxa Standard | 10% (< $5K/mo spend) |
| Taxa Growth | 8% ($5K-$25K/mo spend) |
| Taxa Enterprise | 5% (> $25K/mo spend) |
| Período de retenção de escrow | 7 days |
Webhooks
Retorno de Chamada da Tarefa
Se você fornecer uma callback_url ao criar uma tarefa, o HumanOps enviará atualizações de status via POST para essa URL quando o AI Guardian tomar uma decisão.
Para verificação segura, forneça também um callback_secret. Quando definido, os retornos de chamada incluem um cabeçalho X-HumanOps-Signature contendo um HMAC-SHA256 codificado em hexadecimal do corpo bruto da solicitação.
{
"event": "task.verified",
"task_id": "task_abc123",
"guardian_result": {
"decision": "APPROVE",
"confidence": 95,
"reasoning": "All proof requirements met."
},
"timestamp": "2026-02-06T14:31:00Z"
}Eventos: task.verified, task.disputed, task.manual_review
import crypto from "node:crypto";
import express from "express";
const app = express();
// Use raw body so the signature matches exactly what was signed.
app.post("/webhook/humanops", express.raw({ type: "*/*" }), (req, res) => {
const secret = process.env.HUMANOPS_CALLBACK_SECRET;
if (!secret) return res.status(500).send("Missing HUMANOPS_CALLBACK_SECRET");
const sig = String(req.header("X-HumanOps-Signature") || "");
const computed = crypto
.createHmac("sha256", secret)
.update(req.body)
.digest("hex");
const ok =
sig.length === computed.length &&
crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(computed));
if (!ok) return res.status(401).send("Invalid signature");
const event = JSON.parse(req.body.toString("utf8"));
console.log("HumanOps event:", event.event, event.task_id);
return res.sendStatus(204);
});
Webhook de Pagamento dLocalEm breve
/api/v1/webhooks/dlocalRecebe confirmação de pagamento do dLocal (depósitos fiat). Verifica o cabeçalho X-Signature usando HMAC-SHA256 com comparação de tempo constante. Credita a conta de depósito do agente nos status PAID ou COMPLETED. Este webhook estará ativo quando os depósitos fiat forem lançados.
{
"status": "PAID",
"order_id": "agentId_timestamp",
"amount": 100
}Servidor MCP
O servidor MCP do HumanOps permite que assistentes de IA (Claude, Cursor, etc.) comissionem tarefas do mundo real diretamente através do Model Context Protocol.
Configuração
{
"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"
}
}
}
}Ferramentas Disponíveis (16)
search_operators
Encontrar operadores humanos verificados perto de um local. Filtrar por tipo de tarefa e classificação mínima.
Params: lat, lng, radius_km?, task_type?, min_rating?
post_task
Criar uma tarefa e colocar fundos em escrow. Requer título, descrição, localização, recompensa, prazo, requisitos de prova e tipo de tarefa.
Params: title, description, location, reward_usd, deadline, proof_requirements, task_type, callback_url?, callback_secret?, idempotency_key?
dispatch_digital_task
Criar uma tarefa digital (remota) sem uma localização física. O servidor definirá os padrões corretos de domínio/tipo de prova com base na categoria.
Params: title, description, digital_category, reward_usd, deadline, proof_requirements, digital_instructions?, callback_url?, callback_secret?, idempotency_key?
dispatch_credential_task
Criar uma tarefa de credencial Tier 2 com E2EE. Gera automaticamente o par de chaves e envia a chave pública com a tarefa.
Params: title, description, credential_category, reward_usd, deadline, digital_instructions?, callback_url?
retrieve_credential
Recuperar e descriptografar a credencial criptografada de uma tarefa de credencial concluída.
Params: task_id
list_digital_categories
Listar categorias de tarefas digitais disponíveis com requisitos de prova padrão e restrições.
Params: (nenhum)
get_task_result
Obter status da tarefa, prova e resultado da verificação do AI Guardian.
Params: task_id
check_verification_status
Obter detalhes focados na verificação: pontuação de confiança, decisão e resultados dos requisitos.
Params: task_id
fund_account
Depositar USDC na Base L2 para sua conta HumanOps. No modo de teste, os fundos são creditados imediatamente.
Params: amount_usdc ($5 - $10.000), tx_hash (hash da transação na Base L2)
request_payout
Solicitar um saque de USDC na Base L2. Mínimo de $10. Uma pequena taxa de gás é deduzida do valor do saque. A resposta inclui gas_fee_usd e net_amount_usd.
Params: amount_usd, wallet_address, chain
get_balance
Obter seus saldos disponíveis e em escrow.
Params: (nenhum)
get_deposit_address
Obter seu endereço de depósito USDC na Base L2.
Params: (nenhum)
approve_estimate
Aprovar a estimativa de tempo de um operador. Move a tarefa de ESTIMATE_PENDING para ACCEPTED para que o operador possa iniciar o trabalho.
Params: task_id
reject_estimate
Rejeitar a estimativa de tempo de um operador. A tarefa retorna para PENDING e fica disponível para outros operadores.
Params: task_id, reason?
cancel_task
Cancelar uma tarefa pendente, com estimativa pendente ou aceita e reembolsar o escrow.
Params: task_id
list_tasks
Listar suas tarefas com filtragem e paginação opcionais.
Params: status?, limit?, offset?
Limites de Taxa
O limite de taxa é aplicado por IP + caminho usando um algoritmo de janela fixa. Exceder os limites retorna 429 Too Many Requests.
| Endpoint | Limite |
|---|---|
| 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 |
Recomendamos o uso de backoff exponencial ao atingir os limites de taxa.
Erros
Todos os erros retornam um corpo JSON com um campo error.
| Código | Descrição |
|---|---|
| 400 | Solicitação inválida / erro de validação |
| 401 | Chave de API / ID de operador / assinatura de webhook ausente ou inválida |
| 402 | Saldo insuficiente para escrow |
| 403 | Verificação KYC necessária ou chave de administrador ausente |
| 404 | Recurso não encontrado |
| 409 | Conflito (e-mail duplicado, conflito de estado de tarefa, reuso de chave de idempotência) |
| 410 | Indisponível (ex: a tarefa expirou) |
| 422 | Não processável (tarefa bloqueada por política/triagem do Guardian ou violação de AUP) |
| 429 | Muitas solicitações (limite de taxa atingido) |
| 500 | Erro interno do servidor |
{
"error": "Insufficient balance for escrow",
"details": { ... }
}