Skip to content

Lemin

Lemin CAPTCHA is a puzzle-based verification system that presents interactive challenges such as sliding puzzles and image rotation tasks. It is designed as a privacy-focused alternative to traditional CAPTCHAs. The uCaptcha API solves Lemin challenges and returns a verification token, with or without a proxy.

TypeProxyDescription
LeminTokenProxyLessNoSolve without proxy (recommended)
LeminTokenYesSolve using your proxy
ParameterTypeRequiredDescription
typestringYesTask type from the table above
websiteURLstringYesURL of the page with the Lemin challenge
websiteKeystringYesLemin CAPTCHA ID (the captchaId value)

Required when using the LeminToken task type.

ParameterTypeRequiredDescription
proxyTypestringYeshttp, socks4, or socks5
proxyAddressstringYesProxy IP or hostname
proxyPortintegerYesProxy port
proxyLoginstringNoProxy username
proxyPasswordstringNoProxy password
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "LeminTokenProxyLess",
"websiteURL": "https://example.com/contact",
"websiteKey": "CROPPED_d3d4d56_73ca4008925b4f83a3cb57"
}
}
{
"errorId": 0,
"taskId": "abc-123-def"
}
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6...Sf3xK2Qo"
}
FieldTypeDescription
tokenstringThe Lemin verification token to submit with the form

Once you receive the token value from the solution:

  1. Form submission — Set the Lemin token in the appropriate hidden input field on the page and submit the form.
  2. API call — Include the token in your request to the target server’s verification endpoint.
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": "LeminTokenProxyLess",
"websiteURL": "https://example.com/contact",
"websiteKey": "CROPPED_d3d4d56_73ca4008925b4f83a3cb57"
}
})
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: "LeminTokenProxyLess",
websiteURL: "https://example.com/contact",
websiteKey: "CROPPED_d3d4d56_73ca4008925b4f83a3cb57"
}
})
}).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": "LeminTokenProxyLess",
"websiteURL": "https://example.com/contact",
"websiteKey": "CROPPED_d3d4d56_73ca4008925b4f83a3cb57"
}
}'
# 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