One API for token and image captchas
Submit a task, receive a task ID, then poll the result. Works with any HTTP client and every captcha family below.
http://api.tertuyul.my.id/in.php
http://api.tertuyul.my.id/res.php
Submit the task
POST to /in.php with your key, method and parameters. The response contains a task ID.
Poll the result
Call /res.php?action=get&id=... every 3–5 seconds until the answer is ready.
Use the answer
Token solvers return a token. Image solvers return text, order or coordinates.
Token-based solvers
Best for reCAPTCHA, hCaptcha, Turnstile and Cloudflare. Send the sitekey and page URL; the API returns a token you inject into the page.
method,sitekey/googlekey,pageurl- Optional:
proxy,action,invisible - Result: token string or cf_clearance data
Image-based solvers
For grid, order, OCR and slider captchas. Send the captcha image as raw Base64 in body (or a JSON payload in data).
method,body(raw Base64)- Optional:
textinstructions,pageurl - Result: recognized text, order or coordinates
Endpoints
| Endpoint | Method | Notes |
|---|---|---|
/in.php | POST | Submit captcha task |
/res.php | GET / POST | Get result or userinfo |
ShortLinks
Skip shortlink pages. Use method=shortlink.
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | shortlink |
| pageurl | string | yes | Target URL |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$pageUrl = 'https://example.com/shortlink';
// 1. Submit task
$post = [
'key' => $apiKey,
'method' => 'shortlink',
'pageurl' => $pageUrl,
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
if (($task['status'] ?? 0) != 1) {
die('Submit error: ' . print_r($task, true));
}
$taskId = $task['request'];
echo "Task ID: $taskId\n";
// 2. Poll result
while (true) {
sleep(5);
$post = [
'key' => $apiKey,
'action' => 'get',
'id' => $taskId,
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) {
echo "Solved: " . $res['request'] . "\n";
break;
}
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') {
continue;
}
die('Error: ' . print_r($res, true));
}
hCaptcha
Solve hCaptcha token. Use method=hcaptcha.
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | hcaptcha |
| sitekey | string | yes | Sitekey |
| pageurl | string | yes | Page URL |
| proxy | string | no | login:pass@ip:port |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$siteKey = 'your-hcaptcha-sitekey';
$pageUrl = 'https://example.com/page';
// 1. Submit task
$post = [
'key' => $apiKey,
'method' => 'hcaptcha',
'sitekey' => $siteKey,
'pageurl' => $pageUrl,
// 'proxy' => 'login:pass@ip:port', // optional
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
if (($task['status'] ?? 0) != 1) {
die('Submit error: ' . print_r($task, true));
}
$taskId = $task['request'];
// 2. Poll result (same pattern for all methods)
while (true) {
sleep(5);
$post = ['key'=>$apiKey, 'action'=>'get', 'id'=>$taskId, 'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) {
echo "Token: " . $res['request'] . "\n"; // use this token
break;
}
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die('Error: ' . print_r($res, true));
}
reCAPTCHA V2
method=userrecaptcha
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | userrecaptcha |
| googlekey | string | yes | Site key |
| pageurl | string | yes | Page URL |
| invisible | int | no | 1 = invisible |
| proxy | string | no | login:pass@ip:port |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$siteKey = 'your-recaptcha-v2-sitekey';
$pageUrl = 'https://example.com/page';
// 1. Submit task
$post = [
'key' => $apiKey,
'method' => 'userrecaptcha',
'googlekey' => $siteKey,
'pageurl' => $pageUrl,
// 'invisible' => '1', // if invisible
// 'proxy' => 'login:pass@ip:port',
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
if (($task['status'] ?? 0) != 1) {
die('Submit error: ' . print_r($task, true));
}
$taskId = $task['request'];
// 2. Poll result
while (true) {
sleep(5);
$post = ['key'=>$apiKey, 'action'=>'get', 'id'=>$taskId, 'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) {
echo "Token: " . $res['request'] . "\n";
break;
}
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die('Error: ' . print_r($res, true));
}
reCAPTCHA V3
method=userrecaptcha + version=v3 + action
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | userrecaptcha |
| googlekey | string | yes | Site key |
| pageurl | string | yes | Page URL |
| version | string | yes | v3 |
| action | string | yes | e.g. verify |
| proxy | string | no | login:pass@ip:port |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$siteKey = 'your-recaptcha-v3-sitekey';
$pageUrl = 'https://example.com/page';
// 1. Submit task
$post = [
'key' => $apiKey,
'method' => 'userrecaptcha',
'googlekey' => $siteKey,
'pageurl' => $pageUrl,
'version' => 'v3',
'action' => 'verify',
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
if (($task['status'] ?? 0) != 1) {
die('Submit error: ' . print_r($task, true));
}
$taskId = $task['request'];
// 2. Poll result
while (true) {
sleep(5);
$post = ['key'=>$apiKey, 'action'=>'get', 'id'=>$taskId, 'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) {
echo "Token: " . $res['request'] . "\n";
break;
}
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die('Error: ' . print_r($res, true));
}
Cloudflare Turnstile
method=turnstile
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | turnstile |
| sitekey | string | yes | Sitekey |
| pageurl | string | yes | Page URL |
| action | string | no | action |
| cdata | string | no | cdata |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$siteKey = 'your-turnstile-sitekey';
$pageUrl = 'https://example.com/page';
// 1. Submit task
$post = [
'key' => $apiKey,
'method' => 'turnstile',
'sitekey' => $siteKey,
'pageurl' => $pageUrl,
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
if (($task['status'] ?? 0) != 1) {
die('Submit error: ' . print_r($task, true));
}
$taskId = $task['request'];
// 2. Poll result
while (true) {
sleep(5);
$post = ['key'=>$apiKey, 'action'=>'get', 'id'=>$taskId, 'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) {
echo "Token: " . $res['request'] . "\n";
break;
}
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die('Error: ' . print_r($res, true));
}
Cloudflare cf_clearance
method=cloudflare — returns cf_clearance + user-agent
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | cloudflare |
| pageurl | string | yes | Page URL |
| proxy | string | yes | login:pass@ip:port |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$pageUrl = 'https://example.com/page';
$proxy = 'login:pass@ip:port'; // required
// 1. Submit task
$post = [
'key' => $apiKey,
'method' => 'cloudflare',
'pageurl' => $pageUrl,
'proxy' => $proxy,
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
if (($task['status'] ?? 0) != 1) {
die('Submit error: ' . print_r($task, true));
}
$taskId = $task['request'];
// 2. Poll result
while (true) {
sleep(8); // cloudflare can take longer
$post = ['key'=>$apiKey, 'action'=>'get', 'id'=>$taskId, 'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) {
// usually returns cf_clearance cookie + user-agent
print_r($res['request']);
break;
}
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die('Error: ' . print_r($res, true));
}
reCAPTCHA Image (RC2 Grid)
method=userrecaptcha — send the grid image in body, the prompt in textinstructions, and sizex 9 (3×3) or 16 (4×4). The API returns cell numbers such as 1,7,9.
1,7,9 means click cells 1, 7 and 9. Send only the cropped grid area — pass the instruction text separately. If no cell matches, the result is ERROR_CAPTCHA_UNSOLVABLE (press Skip / Verify).
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | userrecaptcha |
| body | Base64 | yes | Grid image only (raw base64, PNG / JPG) |
| textinstructions | string | yes | e.g. Select all images with bicycles |
| sizex | int | yes | 9 = 3×3, 16 = 4×4 |
| rows / columns | int | no | Optional alternative if the grid is not square |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
// 1. Submit the cropped grid image
$post = [
'key' => $apiKey,
'method' => 'userrecaptcha',
'body' => base64_encode(file_get_contents('rcimg.png')),
'textinstructions' => 'Select all images with bicycles',
'sizex' => '9', // 9 = 3x3, 16 = 4x4
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
// 2. Poll result — returns cell numbers, e.g. 1,7,9
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) {
$answer = trim((string)$res['request']);
$answer = preg_replace('/^(OK\|)?click:\s*/i', '', $answer);
if (strcasecmp($answer, 'ERROR_CAPTCHA_UNSOLVABLE') === 0) {
echo "No matching cells — press Skip / Verify\n";
} else {
$cells = array_map('intval', array_filter(explode(',', $answer)));
echo "Click cells: " . implode(',', $cells) . "\n";
}
break;
}
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
AntiBot
Image order. Submit main + numbered images (1,2,3...)
Parameters
| Parameter | Type | Req |
|---|---|---|
| key | string | yes |
| method | string | antibot |
| main | Base64 | yes |
| 1 / 2 / 3 / 4 | Base64 | yes |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'antibot',
'main' => base64_encode(file_get_contents('main.png')),
'1' => base64_encode(file_get_contents('1.png')),
'2' => base64_encode(file_get_contents('2.png')),
'3' => base64_encode(file_get_contents('3.png')),
'4' => base64_encode(file_get_contents('4.png')),
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Order: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
AntiBot V2 ( letters only )
Image order. Submit main + numbered images (1,2,3...)
Parameters
| Parameter | Type | Req |
|---|---|---|
| key | string | yes |
| method | string | antibotv2 |
| main | Base64 | yes |
| 1 / 2 / 3 / 4 | Base64 | yes |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'antibotv2',
'main' => base64_encode(file_get_contents('main.png')),
'1' => base64_encode(file_get_contents('1.png')),
'2' => base64_encode(file_get_contents('2.png')),
'3' => base64_encode(file_get_contents('3.png')),
'4' => base64_encode(file_get_contents('4.png')),
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Order: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
rscaptcha
method=rscaptcha
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | rscaptcha |
| body | Base64 | yes | Captcha image (raw base64) |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'rscaptcha',
'body' => base64_encode(file_get_contents('rscaptcha.png')),
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Result: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
upside
method=upside
Parameters
| Parameter | Type | Req | |
|---|---|---|---|
| key | string | yes | |
| method | string | upside | |
| body | Base64 | yes | Captcha image (raw base64) |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'upside',
'body' => base64_encode(file_get_contents('upside.png')),
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Order: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
bitcotask
Image order. Submit main + numbered images (1,2,3...)
Parameters
| Parameter | Type | Req |
|---|---|---|
| key | string | yes |
| method | string | bitcotask |
| main | Base64 | yes |
| 1 / 2 / 3 | Base64 | yes |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'bitcotask',
'main' => base64_encode(file_get_contents('main.png')),
'1' => base64_encode(file_get_contents('1.png')),
'2' => base64_encode(file_get_contents('2.png')),
'3' => base64_encode(file_get_contents('3.png')),
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Order: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
Sliders
method=sliders
Parameters
| Parameter | Type | Req |
|---|---|---|
| key | string | yes |
| method | string | sliders |
| pageurl | string | yes |
| body | Base64 | yes |
| thumb_width / thumb_height | string | yes |
| display_x / display_y | string | yes |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'sliders',
'pageurl' => 'https://claimtrx.com',
'body' => base64_encode(file_get_contents('sliders.png')),
'thumb_width' => '111',
'thumb_height' => '111',
'display_x' => '111',
'display_y' => '111',
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Result: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
motion_pattern
method=motion_pattern
Parameters
| Parameter | Type | Req |
|---|---|---|
| key | string | yes |
| method | string | motion_pattern |
| body | Base64 | yes |
| json | int | no |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'motion_pattern',
'body' => base64_encode(file_get_contents('motion_pattern.gif')),
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Result: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
adslab
method=adslab
Parameters
| Parameter | Type | Req |
|---|---|---|
| key | string | yes |
| method | string | adslab |
| pageurl | url | yes |
| sitekey | sitekey | yes |
| subid | string | yes |
| json | int | no |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'adslab',
'pageurl' => 'http://example.com',
'sitekey' => 'lA0Ltc...',
'subid' => 'widget_user',
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Result: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
coinpayz
method=coinpayz
Parameters
| Parameter | Type | Req |
|---|---|---|
| key | string | yes |
| method | string | coinpayz |
| data | json | yes |
| json | int | no |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'coinpayz',
'data' => '{ ... full challenge JSON ... }',
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Result: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
seotask
method=seotask
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | seotask |
| body | Base64 | yes | Captcha image (raw base64) |
| textinstructions | string | yes | mark the images with flowers |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'seotask',
'body' => base64_encode(file_get_contents('seotask.png')),
'textinstructions' => 'Mark the images with flowers',
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Result: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
earnloop
method=gridvision
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | gridvision |
| body | Base64 | yes | Captcha image (raw base64) |
| textinstructions | string | yes | select the key |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'gridvision',
'body' => base64_encode(file_get_contents('earnloop.png')),
'textinstructions' => 'select the key',
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Result: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
satoshifaucet
method=iconorder
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | iconorder |
| body | Base64 | yes | Captcha image (raw base64) |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'iconorder',
'body' => base64_encode(file_get_contents('satoshifaucet.png')),
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Result: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
nxcaptcha
method=nxcaptcha
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | nxcaptcha |
| prompt | string | yes | pick the star |
| 1 | string | yes | Captcha image (raw base64) |
| 2 | string | yes | Captcha image (raw base64) |
| 3 | string | yes | Captcha image (raw base64) |
| 4 | string | yes | Captcha image (raw base64) |
| json | int | no | 1 = JSON |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'nxcaptcha',
'prompt' => 'pick the star',
'1' => base64_encode(file_get_contents('1.png')),
'2' => base64_encode(file_get_contents('2.png')),
'3' => base64_encode(file_get_contents('3.png')),
'4' => base64_encode(file_get_contents('4.png')),
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Result: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
Universal OCR
method=universal — returns recognized text
Parameters
| Parameter | Type | Req | Notes |
|---|---|---|---|
| key | string | yes | API key |
| method | string | yes | universal |
| body | Base64 | yes | Captcha image (raw base64) |
| phrase | int | no | 1 = ≥2 words |
| numeric | int | no | 0-4 preference |
| calc | int | no | 1 = calculation |
| lang | string | no | en, ru, id... |
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'method' => 'universal',
'body' => base64_encode(file_get_contents('universal.png')),
// 'phrase' => '1',
// 'numeric' => '0',
// 'calc' => '1',
// 'lang' => 'en',
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$task = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($task['status'] ?? 0) != 1) die(print_r($task, true));
$taskId = $task['request'];
while (true) {
sleep(3);
$post = ['key'=>$apiKey,'action'=>'get','id'=>$taskId,'json'=>'1'];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>$post]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['status'] ?? 0) == 1) { echo "Text: ".$res['request']."\n"; break; }
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
die(print_r($res, true));
}
User Info
/res.php?action=userinfo&key=...&json=1
Example PHP
$apiKey = 'YOUR_API_KEY';
$post = [
'key' => $apiKey,
'action' => 'userinfo',
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$resp = curl_exec($ch);
curl_close($ch);
$data = json_decode($resp, true);
print_r($data);
// Example: {"email":"[email protected]","balance":"10000.00"}
Result Polling
/res.php?action=get&id=TASK_ID&key=...&json=1
Example PHP
function get_result($apiKey, $taskId) {
$post = [
'key' => $apiKey,
'action' => 'get',
'id' => $taskId,
'json' => '1'
];
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post
]);
$res = curl_exec($ch);
curl_close($ch);
return json_decode($res, true);
}
// Usage after you have $taskId from submit:
while (true) {
$answer = get_result($apiKey, $taskId);
if (!empty($answer['status']) && $answer['status'] == 1) {
echo "Solved: " . $answer['request'] . "\n";
break;
}
if (($answer['request'] ?? '') === 'CAPCHA_NOT_READY') {
sleep(5);
continue;
}
// other error
print_r($answer);
break;
}
Error Codes
| Error | Description | Action |
|---|---|---|
CAPCHA_NOT_READY | Not solved yet | Wait 5-10s, retry |
ERROR_REQUEST_COOLDOWN | API cooldown | Retry after 5s |
ERROR_CAPTCHA_UNSOLVABLE | Too hard / unsupported | Retry or check type |
ERROR_CAPTCHA_TIMEOUT | Timeout 5 min | Create new task |
ERROR_WRONG_USER_KEY | Key format invalid | Check key (32 chars) |
ERROR_KEY_DOES_NOT_EXIST | Key not found | Check key |
ERROR_ZERO_BALANCE | No balance | Top up |
ERROR_INVALID_IMAGE | Bad image | Send valid base64 |
ERROR_INVALID_METHOD | Unknown method | Check method name |
ERROR_NO_SLOT_AVAILABLE | No solver slot | Wait & retry |
ERROR_PROXY_CONNECTION_FAILED | Proxy fail | Change proxy |
ERROR_INTERNAL_SERVER | Server error | Retry later |
Full Working Example
Copy-paste PHP client. Works for both token-based and image-based tasks.
function submit_task(array $post) {
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post,
]);
$r = curl_exec($ch);
curl_close($ch);
return json_decode($r, true);
}
function get_result(string $apiKey, $taskId) {
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'key' => $apiKey,
'action' => 'get',
'id' => $taskId,
'json' => '1',
],
]);
$r = curl_exec($ch);
curl_close($ch);
return json_decode($r, true);
}
$apiKey = 'YOUR_API_KEY';
/* ---------- TOKEN EXAMPLE: Cloudflare Turnstile ---------- */
$tokenTask = submit_task([
'key' => $apiKey,
'method' => 'turnstile',
'sitekey' => 'your-turnstile-sitekey',
'pageurl' => 'https://example.com/page',
'json' => '1',
]);
/* ---------- IMAGE EXAMPLE: Upside ---------- */
$imageTask = submit_task([
'key' => $apiKey,
'method' => 'upside',
'body' => base64_encode(file_get_contents('upside.png')), // raw base64
'json' => '1',
]);
foreach (['token' => $tokenTask, 'image' => $imageTask] as $label => $task) {
if (($task['status'] ?? 0) != 1) {
echo "$label submit error: " . print_r($task, true);
continue;
}
$taskId = $task['request'];
echo "$label task ID: $taskId\n";
while (true) {
sleep(3);
$res = get_result($apiKey, $taskId);
if (($res['status'] ?? 0) == 1) {
echo "$label result: " . print_r($res['request'], true) . "\n";
break;
}
if (($res['request'] ?? '') === 'CAPCHA_NOT_READY') continue;
echo "$label error: " . print_r($res, true);
break;
}
}