Tertuyul Captcha API

v1.0
Captcha Solver API

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.

Get API Key
POST http://api.tertuyul.my.id/in.php
GET / POST http://api.tertuyul.my.id/res.php
1

Submit the task

POST to /in.php with your key, method and parameters. The response contains a task ID.

2

Poll the result

Call /res.php?action=get&id=... every 3–5 seconds until the answer is ready.

3

Use the answer

Token solvers return a token. Image solvers return text, order or coordinates.

TOKEN

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

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

EndpointMethodNotes
/in.phpPOSTSubmit captcha task
/res.phpGET / POSTGet result or userinfo

hCaptcha

Solve hCaptcha token. Use method=hcaptcha.

hcaptcha

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyeshcaptcha
sitekeystringyesSitekey
pageurlstringyesPage URL
proxystringnologin:pass@ip:port
jsonintno1 = 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

recaptchav2

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesuserrecaptcha
googlekeystringyesSite key
pageurlstringyesPage URL
invisibleintno1 = invisible
proxystringnologin:pass@ip:port
jsonintno1 = 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

recaptchav3

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesuserrecaptcha
googlekeystringyesSite key
pageurlstringyesPage URL
versionstringyesv3
actionstringyese.g. verify
proxystringnologin:pass@ip:port
jsonintno1 = 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

turnstile

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesturnstile
sitekeystringyesSitekey
pageurlstringyesPage URL
actionstringnoaction
cdatastringnocdata
jsonintno1 = 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

cloudflare

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyescloudflare
pageurlstringyesPage URL
proxystringyeslogin:pass@ip:port
jsonintno1 = 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.

reCAPTCHA 3x3 grid
Grid cells: numbered 1..N from left to right, top to bottom. Result 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

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesuserrecaptcha
bodyBase64yesGrid image only (raw base64, PNG / JPG)
textinstructionsstringyese.g. Select all images with bicycles
sizexintyes9 = 3×3, 16 = 4×4
rows / columnsintnoOptional alternative if the grid is not square
jsonintno1 = 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...)

antibot
a1 a2 a3 a4

Parameters

ParameterTypeReq
keystringyes
methodstringantibot
mainBase64yes
1 / 2 / 3 / 4Base64yes

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...)

antibotv2full

Parameters

ParameterTypeReq
keystringyes
methodstringantibotv2
mainBase64yes
1 / 2 / 3 / 4Base64yes

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

rscaptcha

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesrscaptcha
bodyBase64yesCaptcha image (raw base64)
jsonintno1 = 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

upside upside2 upside3 upside4 upside5 upside6 upside7 upside8 upside9

Parameters

ParameterTypeReq
keystringyes
methodstringupside
bodyBase64yesCaptcha image (raw base64)
jsonintno1 = 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...)

bitcotask
a1 a2 a3 a4

Parameters

ParameterTypeReq
keystringyes
methodstringbitcotask
mainBase64yes
1 / 2 / 3Base64yes

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

sliders

Parameters

ParameterTypeReq
keystringyes
methodstringsliders
pageurlstringyes
bodyBase64yes
thumb_width / thumb_heightstringyes
display_x / display_ystringyes

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));
}

TeaserFast

method=teaserfast

teaserfast

Parameters

ParameterTypeReq
keystringyes
methodstringteaserfast
bodyBase64yes
jsonintno

Example PHP

$apiKey = 'YOUR_API_KEY';

$post = [
  'key'    => $apiKey,
  'method' => 'teaserfast',
  'body'   => base64_encode(file_get_contents('teaserfast.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));
}

motion_pattern

method=motion_pattern

motion_pattern

Parameters

ParameterTypeReq
keystringyes
methodstringmotion_pattern
bodyBase64yes
jsonintno

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

adslab adslab

Parameters

ParameterTypeReq
keystringyes
methodstringadslab
pageurlurlyes
sitekeysitekeyyes
subidstringyes
jsonintno

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

coinpayz

Parameters

ParameterTypeReq
keystringyes
methodstringcoinpayz
datajsonyes
jsonintno

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

seotask

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesseotask
bodyBase64yesCaptcha image (raw base64)
textinstructionsstringyesmark the images with flowers
jsonintno1 = 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

earnloop

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesgridvision
bodyBase64yesCaptcha image (raw base64)
textinstructionsstringyesselect the key
jsonintno1 = 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

satoshifaucet

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesiconorder
bodyBase64yesCaptcha image (raw base64)
jsonintno1 = 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

nxcaptcha

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesnxcaptcha
promptstringyespick the star
1stringyesCaptcha image (raw base64)
2stringyesCaptcha image (raw base64)
3stringyesCaptcha image (raw base64)
4stringyesCaptcha image (raw base64)
jsonintno1 = 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

universal

Parameters

ParameterTypeReqNotes
keystringyesAPI key
methodstringyesuniversal
bodyBase64yes Captcha image (raw base64)
phraseintno1 = ≥2 words
numericintno0-4 preference
calcintno1 = calculation
langstringnoen, 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

ErrorDescriptionAction
CAPCHA_NOT_READYNot solved yetWait 5-10s, retry
ERROR_REQUEST_COOLDOWNAPI cooldownRetry after 5s
ERROR_CAPTCHA_UNSOLVABLEToo hard / unsupportedRetry or check type
ERROR_CAPTCHA_TIMEOUTTimeout 5 minCreate new task
ERROR_WRONG_USER_KEYKey format invalidCheck key (32 chars)
ERROR_KEY_DOES_NOT_EXISTKey not foundCheck key
ERROR_ZERO_BALANCENo balanceTop up
ERROR_INVALID_IMAGEBad imageSend valid base64
ERROR_INVALID_METHODUnknown methodCheck method name
ERROR_NO_SLOT_AVAILABLENo solver slotWait & retry
ERROR_PROXY_CONNECTION_FAILEDProxy failChange proxy
ERROR_INTERNAL_SERVERServer errorRetry 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;
  }
}