{"name":"callable","version":"1.0.0","description":"Callable verifies accounts for AI agents. When your agent gets blocked on a KYC check, platform sign-in, CAPTCHA, or identity confirmation, Callable sends a real human to verify it and returns a structured result with screenshot proof.","tools":[{"name":"submit_task","description":"Submit an account verification task to a real human operator. Use this when your agent is blocked on something only a real person can complete — a KYC check, a platform sign-in or 2FA prompt, a CAPTCHA, an identity confirmation, or any verification step that requires a human. The task is charged automatically via Stripe ($39). A vetted operator claims it, performs the verification on real hardware, and returns the result (with optional screenshot) to your callback_url or via get_task_status. Typical completion: 30 minutes.","inputSchema":{"type":"object","required":["task_type","instructions","deadline_minutes"],"properties":{"task_type":{"type":"string","enum":["account_verification"],"description":"account_verification — a real human verifies an account, KYC check, sign-in, or CAPTCHA on real hardware and returns structured proof ($39)."},"instructions":{"type":"object","description":"Structured input for account_verification. Required fields: platform (e.g. 'gmail', 'stripe'), url (where to perform the verification), credentials (login info or how to obtain the code), what_to_verify (what the operator must confirm). Optional: screenshot_required (boolean, default true), additional_notes."},"deadline_minutes":{"type":"integer","minimum":20,"description":"Time in minutes the operator has to complete the verification after claiming it. Minimum 20. Recommended: 30."},"callback_url":{"type":"string","description":"Webhook URL to receive a POST request with the task result when completed. Recommended for async agent workflows. If omitted, poll get_task_status instead."},"payment_credential":{"type":"object","description":"Stripe Link Agent Wallet Single-use Payment Token (SPT) for fully autonomous agent payments with no human intervention required. Omit if the developer account has a saved card on file."}}},"outputSchema":{"type":"object","properties":{"task_id":{"type":"string","description":"Unique identifier for the submitted task"},"status":{"type":"string","enum":["pending","in_progress","pending_review","completed","disputed"],"description":"Current task status"},"message":{"type":"string","description":"Confirmation or error message"},"estimated_completion":{"type":"string","description":"Estimated completion time based on deadline_minutes"}},"required":["task_id","status"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},{"name":"get_task_status","description":"Poll the status and retrieve the result of a previously submitted task. Returns the current status (pending, in_progress, pending_review, completed, disputed), the result payload, and any output URLs (video, screenshot). Use this in a polling loop after submit_task if no callback_url was provided.","inputSchema":{"type":"object","required":["task_id"],"properties":{"task_id":{"type":"string","description":"The task ID returned when the task was submitted"}}},"outputSchema":{"type":"object","properties":{"task_id":{"type":"string"},"status":{"type":"string","enum":["pending","in_progress","pending_review","completed","disputed"]},"result":{"type":"object","description":"Task result payload when completed"},"output_url":{"type":"string","description":"URL to download output file (video, screenshot, etc.)"},"completed_at":{"type":"string","description":"ISO timestamp of completion"},"operator":{"type":"string","description":"Name of the operator who completed the task"}},"required":["task_id","status"]},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"review_task","description":"Optional. Approve or dispute a task that is in `pending_review` status. Use this after get_task_status reports the operator has completed the work. Approving releases the operator payout. Disputing requires a reason and a description of what is needed for acceptance; the operator is then allowed to resubmit. If you never call review_task, tasks are auto-approved after the review window expires.","inputSchema":{"type":"object","required":["task_id","decision"],"properties":{"task_id":{"type":"string","description":"The task ID returned by submit_task."},"decision":{"type":"string","enum":["approve","dispute"],"description":"approve to accept the result and release payment; dispute to reject it and request a resubmission."},"dispute_reason":{"type":"string","description":"Required when decision = 'dispute'. What went wrong with the submission."},"what_is_needed":{"type":"string","description":"Required when decision = 'dispute'. What the operator must do for the submission to be accepted."}}},"outputSchema":{"type":"object","properties":{"success":{"type":"boolean"},"status":{"type":"string","enum":["completed","disputed"]}},"required":["success","status"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}],"authentication":{"type":"apiKey","in":"header","name":"x-api-key"}}