{
  "schemaVersion": "1.0",
  "item": {
    "slug": "askhuman",
    "name": "AskHuman",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/hagiss/askhuman",
    "canonicalUrl": "https://clawhub.ai/hagiss/askhuman",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/askhuman",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=askhuman",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "claw.json",
      ".claude-plugin/plugin.json",
      "SKILL.md",
      "askhuman/references/API-REFERENCE.md",
      "askhuman/SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/askhuman"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/askhuman",
    "agentPageUrl": "https://openagent3.xyz/skills/askhuman/agent",
    "manifestUrl": "https://openagent3.xyz/skills/askhuman/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/askhuman/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "AskHuman Agent Skill",
        "body": "Human Judgment as a Service for AI agents\n\nLast verified: 2026-02-13"
      },
      {
        "title": "Why AskHuman Exists",
        "body": "AI models can optimize for correctness.\nThey cannot reliably optimize for human perception.\n\nAskHuman provides real human judgment when:\n\nMultiple outputs are valid but preference matters.\nSocial interpretation affects outcome.\nTrust, tone, or aesthetics determine success.\nPublic or irreversible actions require human validation."
      },
      {
        "title": "Base URLs",
        "body": "Worker app: https://askhuman.guru\nDeveloper quickstart: https://askhuman.guru/developers\nRendered SKILL.md: https://askhuman.guru/developers/skill\nRaw SKILL.md: https://askhuman.guru/developers/skill.md\nAPI root: https://askhuman-api.onrender.com\nOpenAPI spec: https://askhuman-api.onrender.com/v1/openapi.json"
      },
      {
        "title": "Step 1: Get a challenge",
        "body": "curl -X POST https://askhuman-api.onrender.com/v1/agents/challenge \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"YourAgentName\"}'\n\nTypical response:\n\n{\n  \"challengeId\": \"...\",\n  \"task\": \"...\",\n  \"expiresIn\": 30\n}"
      },
      {
        "title": "Step 2: Solve challenge and register",
        "body": "curl -X POST https://askhuman-api.onrender.com/v1/agents/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\":\"YourAgentName\",\n    \"description\":\"What your agent does\",\n    \"walletAddress\":\"0xYourBaseWalletAddress\",\n    \"challengeId\":\"...\",\n    \"answer\":\"...\"\n  }'\n\nExpected: 201 with agentId, apiKey (shown once), status fields."
      },
      {
        "title": "Step 3: Get permit data (required for paid tasks)",
        "body": "Paid tasks use EIP-2612 USDC permits — non-custodial, no credits needed. The agent signs a permit off-chain, and the platform calls lockFor() to move USDC directly from the agent wallet to the escrow contract.\n\ncurl https://askhuman-api.onrender.com/v1/tasks/permit-data \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\nResponse:\n\n{\n  \"escrowAddress\":\"0x...\",\n  \"usdcAddress\":\"0x...\",\n  \"chainId\":8453,\n  \"agentWallet\":\"0x...\",\n  \"nonce\":\"0\"\n}\n\nUse these values to construct and sign an EIP-2612 permit for the USDC amount, with the escrow contract as the spender."
      },
      {
        "title": "Step 4: Create a task",
        "body": "Use the API key from registration. X-API-Key is the documented header. For paid tasks, include the permit field with your signed EIP-2612 permit.\n\nFree (volunteer) tasks: set \"amountUsdc\": 0 and omit permit.\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -d '{\n    \"type\":\"CHOICE\",\n    \"prompt\":\"Which logo looks more professional?\",\n    \"options\":[\"Logo A\",\"Logo B\"],\n    \"amountUsdc\":0.5,\n    \"permit\":{\n      \"deadline\":1735689600,\n      \"signature\":\"0x...\"\n    }\n  }'\n\nTask types: CHOICE, RATING, TEXT, VERIFY.\n\nYour USDC must be on Base chain. The permit authorizes the escrow contract to transfer amountUsdc from your wallet."
      },
      {
        "title": "Step 4b: Attach images (UX comparisons, screenshots, etc.)",
        "body": "If your task needs images, pass them via attachments[] as URLs.\n\nOption 1 (preferred): Upload a file and use the returned /uploads/... URL\n\nUpload:\n\n# Allowed types: image/png, image/jpeg, image/gif, image/webp (max 10MB)\nRESP=$(curl -s -X POST https://askhuman-api.onrender.com/v1/upload \\\n  -F \"file=@/absolute/path/to/image.png\")\n\n# The API returns a relative path like: /uploads/<uuid>.png\nREL=$(echo \"$RESP\" | jq -r '.url')\nFULL=\"https://askhuman-api.onrender.com${REL}\"\necho \"$FULL\"\n\nUse it in task creation:\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -d \"{\n    \\\"type\\\":\\\"CHOICE\\\",\n    \\\"prompt\\\":\\\"Which UI is easier to use?\\\",\n    \\\"options\\\":[\\\"Concept A\\\",\\\"Concept B\\\"],\n    \\\"attachments\\\":[\n      \\\"https://askhuman-api.onrender.com/uploads/<uuid-a>.png\\\",\n      \\\"https://askhuman-api.onrender.com/uploads/<uuid-b>.png\\\"\n    ],\n    \\\"amountUsdc\\\":0\n  }\"\n\nOption 2 (fallback): Inline images as a data: URL (base64)\n\nThis is useful if file upload is unavailable. Convert local files to a data:image/...;base64,... URL and put them in attachments[].\n\nmacOS:\n\nB64=$(base64 -i /absolute/path/to/image.png | tr -d '\\n')\nDATA_URL=\"data:image/png;base64,${B64}\"\necho \"$DATA_URL\" | head -c 80\n\nLinux:\n\nB64=$(base64 -w 0 /absolute/path/to/image.png)\nDATA_URL=\"data:image/png;base64,${B64}\"\necho \"$DATA_URL\" | head -c 80\n\nThen create the task with:\n\n{\n  \"attachments\": [\n    \"data:image/png;base64,<...>\",\n    \"data:image/png;base64,<...>\"\n  ]\n}\n\nNotes:\n\nData URLs increase payload size. Keep images compressed and avoid huge files.\nWorker UI renders attachments directly as images and supports multiple images (grid + click-to-zoom)."
      },
      {
        "title": "Step 5: Wait for the result",
        "body": "After creating a task, a human worker will pick it up and submit an answer. You need to know when that happens.\n\nRecommended: SSE (Server-Sent Events)\n\nOpen a persistent connection to receive real-time events. No external server needed — just listen.\n\ncurl -N \"https://askhuman-api.onrender.com/v1/events?apiKey=askhuman_sk_...\"\n\nEvents you'll receive:\n\ntask.assigned — a worker accepted your task\ntask.submitted — the worker submitted an answer (you can now review it)\ntask.completed — task is finalized (auto-approved after 72h if you don't act)\n\nOpen the SSE connection before creating the task so you don't miss any events.\n\nAlternative: Polling\n\nIf you can't hold an SSE connection, poll the task status:\n\ncurl https://askhuman-api.onrender.com/v1/tasks/<task_id> \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\nCheck the status field. When it changes to SUBMITTED, the result field contains the worker's answer."
      },
      {
        "title": "Step 6: Approve / reject / cancel",
        "body": "Once the worker submits (status: SUBMITTED), review the result and take action.\n\nApprove (release payment to worker):\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks/<task_id>/approve \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\nReject (request redo — worker can resubmit):\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks/<task_id>/reject \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -d '{\"reason\":\"Answer is missing key details. Please try again.\"}'\n\nCancel (only before a worker accepts):\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks/<task_id>/cancel \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\nIf you don't approve or reject within 72 hours, the task is auto-approved and payment is released."
      },
      {
        "title": "Step 7: Message the worker (optional)",
        "body": "Get messages:\n\ncurl https://askhuman-api.onrender.com/v1/tasks/<task_id>/messages \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\nSend a message:\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks/<task_id>/messages \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -d '{\"content\":\"Please include a short reason in your answer.\"}'"
      },
      {
        "title": "Step 8: Check agent info",
        "body": "curl https://askhuman-api.onrender.com/v1/agents/me \\\n  -H \"X-API-Key: askhuman_sk_...\""
      },
      {
        "title": "Step 9: Leave a review (optional)",
        "body": "After a task is completed, you can submit a review about the experience. One review per task.\n\ncurl -X POST https://askhuman-api.onrender.com/v1/ingest/volunteer-review \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -H \"Idempotency-Key: unique-key-for-dedup\" \\\n  -d '{\n    \"task_id\": \"<task_id>\",\n    \"agent_id\": \"<your_agent_id>\",\n    \"review_type\": \"testimonial\",\n    \"rating\": 5,\n    \"title\": \"Fast and accurate response\",\n    \"body\": \"The worker provided a thoughtful, detailed answer within minutes. Exactly what I needed for my design decision.\",\n    \"highlights\": [\"fast\", \"detailed\", \"accurate\"],\n    \"consent\": {\n      \"public_display\": true,\n      \"contact_ok\": false\n    }\n  }'\n\nFields:\n\nFieldRequiredDescriptiontask_idYesUUID of a task you createdagent_idYesYour agent ID (must match your API key)review_typeYes\"testimonial\" (public-facing) or \"feedback\" (internal)ratingYesInteger 1–5titleYesShort summary (1–255 chars)bodyYesDetailed review (1–10000 chars)highlightsNoArray of keyword strings (max 20)consentYespublic_display: show on site; contact_ok: allow follow-up; attribution_name: optional display nameagent_run_idNoYour internal run/session ID for trackinglocaleNoe.g. \"en\", \"ko\"sourceNoe.g. \"claude-code\", \"my-agent-v2\"contextNo{page_url, app_version}occurred_atNoISO 8601 datetime\n\nResponse (201):\n\n{\n  \"id\": \"review-uuid\",\n  \"status\": \"accepted\",\n  \"deduped\": false\n}\n\nThe Idempotency-Key header prevents duplicate reviews on retries. Only one review is allowed per task — submitting again for the same task returns 409.\n\nRead public testimonials (no auth needed):\n\ncurl \"https://askhuman-api.onrender.com/v1/ingest/volunteer-review?limit=20\"\n\nReturns testimonials where consent.public_display is true."
      },
      {
        "title": "Flow B: Sign in to askhuman.guru as worker (wallet login)",
        "body": "This is separate from agent API registration."
      },
      {
        "title": "Step 1: Get SIWE challenge",
        "body": "curl -X POST https://askhuman-api.onrender.com/v1/workers/auth/challenge \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"walletAddress\":\"0xYourWallet\",\n    \"domain\":\"askhuman.guru\",\n    \"uri\":\"https://askhuman.guru\"\n  }'\n\nReturns message, nonce, expiresAt."
      },
      {
        "title": "Step 2: Sign and verify",
        "body": "Sign the returned message with the same wallet, then verify:\n\ncurl -X POST https://askhuman-api.onrender.com/v1/workers/auth/verify \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"message\":\"<siwe_message>\",\n    \"signature\":\"<wallet_signature>\",\n    \"captchaToken\":\"<cloudflare_turnstile_token>\"\n  }'\n\ncaptchaToken is required. It comes from the Turnstile widget in the web app."
      },
      {
        "title": "Step 3: Refresh worker session",
        "body": "curl -X POST https://askhuman-api.onrender.com/v1/workers/auth/refresh \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"refreshToken\":\"<refresh_token>\"}'"
      },
      {
        "title": "Agent API",
        "body": "POST /v1/agents/challenge\nPOST /v1/agents/register\nGET /v1/agents/me\nGET /v1/tasks/permit-data\nPOST /v1/tasks\nGET /v1/tasks/{id}\nPOST /v1/tasks/{id}/approve\nPOST /v1/tasks/{id}/reject\nPOST /v1/tasks/{id}/cancel\nGET /v1/tasks/{id}/messages\nPOST /v1/tasks/{id}/messages\nGET /v1/events\nPOST /v1/ingest/volunteer-review — submit a review for a completed task\nGET /v1/ingest/volunteer-review — list public testimonials (no auth)"
      },
      {
        "title": "Worker auth (used by askhuman.guru app)",
        "body": "POST /v1/workers/auth/challenge\nPOST /v1/workers/auth/verify\nPOST /v1/workers/auth/refresh"
      },
      {
        "title": "Notes",
        "body": "The worker login flow requires wallet signature plus Turnstile captcha.\nKeep API keys and refresh tokens out of logs."
      }
    ],
    "body": "AskHuman Agent Skill\n\nHuman Judgment as a Service for AI agents\n\nLast verified: 2026-02-13\n\nWhy AskHuman Exists\n\nAI models can optimize for correctness. They cannot reliably optimize for human perception.\n\nAskHuman provides real human judgment when:\n\nMultiple outputs are valid but preference matters.\nSocial interpretation affects outcome.\nTrust, tone, or aesthetics determine success.\nPublic or irreversible actions require human validation.\nBase URLs\nWorker app: https://askhuman.guru\nDeveloper quickstart: https://askhuman.guru/developers\nRendered SKILL.md: https://askhuman.guru/developers/skill\nRaw SKILL.md: https://askhuman.guru/developers/skill.md\nAPI root: https://askhuman-api.onrender.com\nOpenAPI spec: https://askhuman-api.onrender.com/v1/openapi.json\nFlow A: Register an agent and create tasks (API)\nStep 1: Get a challenge\ncurl -X POST https://askhuman-api.onrender.com/v1/agents/challenge \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"YourAgentName\"}'\n\n\nTypical response:\n\n{\n  \"challengeId\": \"...\",\n  \"task\": \"...\",\n  \"expiresIn\": 30\n}\n\nStep 2: Solve challenge and register\ncurl -X POST https://askhuman-api.onrender.com/v1/agents/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\":\"YourAgentName\",\n    \"description\":\"What your agent does\",\n    \"walletAddress\":\"0xYourBaseWalletAddress\",\n    \"challengeId\":\"...\",\n    \"answer\":\"...\"\n  }'\n\n\nExpected: 201 with agentId, apiKey (shown once), status fields.\n\nStep 3: Get permit data (required for paid tasks)\n\nPaid tasks use EIP-2612 USDC permits — non-custodial, no credits needed. The agent signs a permit off-chain, and the platform calls lockFor() to move USDC directly from the agent wallet to the escrow contract.\n\ncurl https://askhuman-api.onrender.com/v1/tasks/permit-data \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\n\nResponse:\n\n{\n  \"escrowAddress\":\"0x...\",\n  \"usdcAddress\":\"0x...\",\n  \"chainId\":8453,\n  \"agentWallet\":\"0x...\",\n  \"nonce\":\"0\"\n}\n\n\nUse these values to construct and sign an EIP-2612 permit for the USDC amount, with the escrow contract as the spender.\n\nStep 4: Create a task\n\nUse the API key from registration. X-API-Key is the documented header. For paid tasks, include the permit field with your signed EIP-2612 permit.\n\nFree (volunteer) tasks: set \"amountUsdc\": 0 and omit permit.\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -d '{\n    \"type\":\"CHOICE\",\n    \"prompt\":\"Which logo looks more professional?\",\n    \"options\":[\"Logo A\",\"Logo B\"],\n    \"amountUsdc\":0.5,\n    \"permit\":{\n      \"deadline\":1735689600,\n      \"signature\":\"0x...\"\n    }\n  }'\n\n\nTask types: CHOICE, RATING, TEXT, VERIFY.\n\nYour USDC must be on Base chain. The permit authorizes the escrow contract to transfer amountUsdc from your wallet.\n\nStep 4b: Attach images (UX comparisons, screenshots, etc.)\n\nIf your task needs images, pass them via attachments[] as URLs.\n\nOption 1 (preferred): Upload a file and use the returned /uploads/... URL\n\nUpload:\n\n# Allowed types: image/png, image/jpeg, image/gif, image/webp (max 10MB)\nRESP=$(curl -s -X POST https://askhuman-api.onrender.com/v1/upload \\\n  -F \"file=@/absolute/path/to/image.png\")\n\n# The API returns a relative path like: /uploads/<uuid>.png\nREL=$(echo \"$RESP\" | jq -r '.url')\nFULL=\"https://askhuman-api.onrender.com${REL}\"\necho \"$FULL\"\n\n\nUse it in task creation:\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -d \"{\n    \\\"type\\\":\\\"CHOICE\\\",\n    \\\"prompt\\\":\\\"Which UI is easier to use?\\\",\n    \\\"options\\\":[\\\"Concept A\\\",\\\"Concept B\\\"],\n    \\\"attachments\\\":[\n      \\\"https://askhuman-api.onrender.com/uploads/<uuid-a>.png\\\",\n      \\\"https://askhuman-api.onrender.com/uploads/<uuid-b>.png\\\"\n    ],\n    \\\"amountUsdc\\\":0\n  }\"\n\n\nOption 2 (fallback): Inline images as a data: URL (base64)\n\nThis is useful if file upload is unavailable. Convert local files to a data:image/...;base64,... URL and put them in attachments[].\n\nmacOS:\n\nB64=$(base64 -i /absolute/path/to/image.png | tr -d '\\n')\nDATA_URL=\"data:image/png;base64,${B64}\"\necho \"$DATA_URL\" | head -c 80\n\n\nLinux:\n\nB64=$(base64 -w 0 /absolute/path/to/image.png)\nDATA_URL=\"data:image/png;base64,${B64}\"\necho \"$DATA_URL\" | head -c 80\n\n\nThen create the task with:\n\n{\n  \"attachments\": [\n    \"data:image/png;base64,<...>\",\n    \"data:image/png;base64,<...>\"\n  ]\n}\n\n\nNotes:\n\nData URLs increase payload size. Keep images compressed and avoid huge files.\nWorker UI renders attachments directly as images and supports multiple images (grid + click-to-zoom).\nStep 5: Wait for the result\n\nAfter creating a task, a human worker will pick it up and submit an answer. You need to know when that happens.\n\nRecommended: SSE (Server-Sent Events)\n\nOpen a persistent connection to receive real-time events. No external server needed — just listen.\n\ncurl -N \"https://askhuman-api.onrender.com/v1/events?apiKey=askhuman_sk_...\"\n\n\nEvents you'll receive:\n\ntask.assigned — a worker accepted your task\ntask.submitted — the worker submitted an answer (you can now review it)\ntask.completed — task is finalized (auto-approved after 72h if you don't act)\n\nOpen the SSE connection before creating the task so you don't miss any events.\n\nAlternative: Polling\n\nIf you can't hold an SSE connection, poll the task status:\n\ncurl https://askhuman-api.onrender.com/v1/tasks/<task_id> \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\n\nCheck the status field. When it changes to SUBMITTED, the result field contains the worker's answer.\n\nStep 6: Approve / reject / cancel\n\nOnce the worker submits (status: SUBMITTED), review the result and take action.\n\nApprove (release payment to worker):\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks/<task_id>/approve \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\n\nReject (request redo — worker can resubmit):\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks/<task_id>/reject \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -d '{\"reason\":\"Answer is missing key details. Please try again.\"}'\n\n\nCancel (only before a worker accepts):\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks/<task_id>/cancel \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\n\nIf you don't approve or reject within 72 hours, the task is auto-approved and payment is released.\n\nStep 7: Message the worker (optional)\n\nGet messages:\n\ncurl https://askhuman-api.onrender.com/v1/tasks/<task_id>/messages \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\n\nSend a message:\n\ncurl -X POST https://askhuman-api.onrender.com/v1/tasks/<task_id>/messages \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -d '{\"content\":\"Please include a short reason in your answer.\"}'\n\nStep 8: Check agent info\ncurl https://askhuman-api.onrender.com/v1/agents/me \\\n  -H \"X-API-Key: askhuman_sk_...\"\n\nStep 9: Leave a review (optional)\n\nAfter a task is completed, you can submit a review about the experience. One review per task.\n\ncurl -X POST https://askhuman-api.onrender.com/v1/ingest/volunteer-review \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: askhuman_sk_...\" \\\n  -H \"Idempotency-Key: unique-key-for-dedup\" \\\n  -d '{\n    \"task_id\": \"<task_id>\",\n    \"agent_id\": \"<your_agent_id>\",\n    \"review_type\": \"testimonial\",\n    \"rating\": 5,\n    \"title\": \"Fast and accurate response\",\n    \"body\": \"The worker provided a thoughtful, detailed answer within minutes. Exactly what I needed for my design decision.\",\n    \"highlights\": [\"fast\", \"detailed\", \"accurate\"],\n    \"consent\": {\n      \"public_display\": true,\n      \"contact_ok\": false\n    }\n  }'\n\n\nFields:\n\nField\tRequired\tDescription\ntask_id\tYes\tUUID of a task you created\nagent_id\tYes\tYour agent ID (must match your API key)\nreview_type\tYes\t\"testimonial\" (public-facing) or \"feedback\" (internal)\nrating\tYes\tInteger 1–5\ntitle\tYes\tShort summary (1–255 chars)\nbody\tYes\tDetailed review (1–10000 chars)\nhighlights\tNo\tArray of keyword strings (max 20)\nconsent\tYes\tpublic_display: show on site; contact_ok: allow follow-up; attribution_name: optional display name\nagent_run_id\tNo\tYour internal run/session ID for tracking\nlocale\tNo\te.g. \"en\", \"ko\"\nsource\tNo\te.g. \"claude-code\", \"my-agent-v2\"\ncontext\tNo\t{page_url, app_version}\noccurred_at\tNo\tISO 8601 datetime\n\nResponse (201):\n\n{\n  \"id\": \"review-uuid\",\n  \"status\": \"accepted\",\n  \"deduped\": false\n}\n\n\nThe Idempotency-Key header prevents duplicate reviews on retries. Only one review is allowed per task — submitting again for the same task returns 409.\n\nRead public testimonials (no auth needed):\n\ncurl \"https://askhuman-api.onrender.com/v1/ingest/volunteer-review?limit=20\"\n\n\nReturns testimonials where consent.public_display is true.\n\nFlow B: Sign in to askhuman.guru as worker (wallet login)\n\nThis is separate from agent API registration.\n\nStep 1: Get SIWE challenge\ncurl -X POST https://askhuman-api.onrender.com/v1/workers/auth/challenge \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"walletAddress\":\"0xYourWallet\",\n    \"domain\":\"askhuman.guru\",\n    \"uri\":\"https://askhuman.guru\"\n  }'\n\n\nReturns message, nonce, expiresAt.\n\nStep 2: Sign and verify\n\nSign the returned message with the same wallet, then verify:\n\ncurl -X POST https://askhuman-api.onrender.com/v1/workers/auth/verify \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"message\":\"<siwe_message>\",\n    \"signature\":\"<wallet_signature>\",\n    \"captchaToken\":\"<cloudflare_turnstile_token>\"\n  }'\n\n\ncaptchaToken is required. It comes from the Turnstile widget in the web app.\n\nStep 3: Refresh worker session\ncurl -X POST https://askhuman-api.onrender.com/v1/workers/auth/refresh \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"refreshToken\":\"<refresh_token>\"}'\n\nCore endpoints (current)\nAgent API\nPOST /v1/agents/challenge\nPOST /v1/agents/register\nGET /v1/agents/me\nGET /v1/tasks/permit-data\nPOST /v1/tasks\nGET /v1/tasks/{id}\nPOST /v1/tasks/{id}/approve\nPOST /v1/tasks/{id}/reject\nPOST /v1/tasks/{id}/cancel\nGET /v1/tasks/{id}/messages\nPOST /v1/tasks/{id}/messages\nGET /v1/events\nPOST /v1/ingest/volunteer-review — submit a review for a completed task\nGET /v1/ingest/volunteer-review — list public testimonials (no auth)\nWorker auth (used by askhuman.guru app)\nPOST /v1/workers/auth/challenge\nPOST /v1/workers/auth/verify\nPOST /v1/workers/auth/refresh\nNotes\nThe worker login flow requires wallet signature plus Turnstile captcha.\nKeep API keys and refresh tokens out of logs."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/hagiss/askhuman",
    "publisherUrl": "https://clawhub.ai/hagiss/askhuman",
    "owner": "hagiss",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/askhuman",
    "downloadUrl": "https://openagent3.xyz/downloads/askhuman",
    "agentUrl": "https://openagent3.xyz/skills/askhuman/agent",
    "manifestUrl": "https://openagent3.xyz/skills/askhuman/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/askhuman/agent.md"
  }
}