Skip to content

KeyCAPTCHA

KeyCAPTCHA is a puzzle-based CAPTCHA that requires the user to assemble an image from scattered pieces. Unlike traditional text-based CAPTCHAs, it relies on spatial recognition to verify human interaction. The uCaptcha API solves KeyCAPTCHA challenges and returns a verification token, with or without a proxy.

TypeProxyDescription
KeyCaptchaTokenProxyLessNoSolve without proxy (recommended)
KeyCaptchaTokenYesSolve using your proxy
ParameterTypeRequiredDescription
typestringYesTask type from the table above
websiteURLstringYesURL of the page with the KeyCAPTCHA challenge
websiteKeystringYesKeyCAPTCHA site key

Required when using the KeyCaptchaToken task type.

ParameterTypeRequiredDescription
proxyTypestringYeshttp, socks4, or socks5
proxyAddressstringYesProxy IP or hostname
proxyPortintegerYesProxy port
proxyLoginstringNoProxy username
proxyPasswordstringNoProxy password
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "KeyCaptchaTokenProxyLess",
"websiteURL": "https://example.com/register",
"websiteKey": "a86d9a6b-2d8b-11e0-a23a-1c6f65d10e96"
}
}
{
"errorId": 0,
"taskId": "abc-123-def"
}
{
"token": "d190f355|1|0f8|ef23...a512|1638438295"
}
FieldTypeDescription
tokenstringThe KeyCAPTCHA verification token to submit with the form

Once you receive the token value from the solution:

  1. Form submission — Set the token in the hidden capcode input field and submit the form.
  2. JavaScript injection — If the site handles verification through JavaScript, pass the token to the appropriate callback function.
import requests
import time
API_KEY = "YOUR_API_KEY"
# Create task
response = requests.post("https://api.ucaptcha.net/createTask", json={
"clientKey": API_KEY,
"task": {
"type": "KeyCaptchaTokenProxyLess",
"websiteURL": "https://example.com/register",
"websiteKey": "a86d9a6b-2d8b-11e0-a23a-1c6f65d10e96"
}
})
task_id = response.json()["taskId"]
# Poll for result
while True:
result = requests.post("https://api.ucaptcha.net/getTaskResult", json={
"clientKey": API_KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
token = result["solution"]["token"]
print("Token:", token)
break
elif result["status"] == "failed":
print("Error:", result.get("errorDescription"))
break
time.sleep(5)
const API_KEY = "YOUR_API_KEY";
const { taskId } = await fetch("https://api.ucaptcha.net/createTask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: "KeyCaptchaTokenProxyLess",
websiteURL: "https://example.com/register",
websiteKey: "a86d9a6b-2d8b-11e0-a23a-1c6f65d10e96"
}
})
}).then(r => r.json());
while (true) {
const result = await fetch("https://api.ucaptcha.net/getTaskResult", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey: API_KEY, taskId })
}).then(r => r.json());
if (result.status === "ready") {
console.log("Token:", result.solution.token);
break;
} else if (result.status === "failed") {
console.error("Error:", result.errorDescription);
break;
}
await new Promise(r => setTimeout(r, 5000));
}
Terminal window
# Create task
curl -X POST https://api.ucaptcha.net/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "KeyCaptchaTokenProxyLess",
"websiteURL": "https://example.com/register",
"websiteKey": "a86d9a6b-2d8b-11e0-a23a-1c6f65d10e96"
}
}'
# Poll for result (replace TASK_ID with the taskId from above)
curl -X POST https://api.ucaptcha.net/getTaskResult \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID"
}'
  • 2Captcha