Tertuyul Captcha API

GET YOUR APIKEY HERE
V1 Try POST in.php

Overview

Flow: submit task → get taskId → poll result. All /in.php submits must use POST multipart/form-data (recommended) or JSON (for createTask-style). Results are fetched from /res.php.

Submit (in.php)

URL: http://api.tertuyul.my.id/in.php (POST)

Get Result (res.php)

URL: http://api.tertuyul.my.id/res.php (GET/POST)

Endpoints

EndpointMethodNotes
/in.phpPOSTSubmit captcha task (multipart/form-data)
/res.phpGET / POSTGet result or userinfo

Supported methods

  • shortlinks — skip links
  • userrecaptcha — reCAPTCHA v2/v3 token
  • turnstile — Cloudflare Turnstile token
  • cloudflare — Cloudflare CF_CLEARANCE
  • rscaptcha — Icons / grid coordinates
  • upside — Icons / grid coordinates
  • iconfinder — Icons / grid coordinates
  • bitcotask — image-order (main + options)
  • iconflip — Icons / grid coordinates
  • hunter — icon name (FontAwesome)
  • anticap — icon name (AntiCap)
  • sliders — sliders token
  • antibot — image-order (main + options)
  • teaserfast — teaserfast coordinates
  • universal — OCR (text)

reCAPTCHA V2 (userrecaptcha)

Submit sitekey & pageurl.

recaptchav2
Parameters (POST multipart/form-data)
ParameterTypeRequiredDescription
keyStringYesYour API key
methodStringYesuserrecaptcha
googlekeyStringYesSite key from page
pageurlStringYesPage URL where captcha appears
invisibleInteger Default: 0No1 - means that reCAPTCHA is invisible. 0 - normal reCAPTCHA.
proxyStringNoFormat: login:pass@ip:port
proxytypeStringNoHTTP, HTTPS, SOCKS4, SOCKS5
cookiesStringNoFormat: KEY:Value, separator: semicolon, example: KEY1:Value1;KEY2:Value2;
userAgentStringNoBrowser user-agent string
jsonIntegerNo1 = JSON response
Example — PHP (cURL, multipart/form-data)
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
$post = http_build_query([
  'key' => $apiKey,
  'method' => 'userrecaptcha',
  'googlekey' => $siteKey,
  'pageurl' => $pageUrl,
  'json' => '1'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
curl_close($ch);
$data = json_decode($resp, true);
// $data['request'] => task id or error
Example — Command-line curl
curl -X POST "http://api.tertuyul.my.id/in.php" \
  -F "key=YOUR_API_KEY" \
  -F "method=userrecaptcha" \
  -F "googlekey=SITEKEY" \
  -F "pageurl=https://example.com" \
  -F "json=1"

reCAPTCHA V3 (userrecaptcha)

Submit sitekey & pageurl. For v3 include version=v3 and action.

recaptchav3
Parameters (POST multipart/form-data)
ParameterTypeRequiredDescription
keystringyesAPI key
methodstringyesuserrecaptcha
googlekeystringyesSite key
pageurlstringyesTarget page URL
versionStringYesv3
actionStringYesAction used in reCAPTCHA (ex: verify)
proxyStringNoFormat: login:pass@ip:port
proxytypeStringNoHTTP, HTTPS, SOCKS4, SOCKS5
cookiesStringNoFormat: KEY:Value, separator: semicolon, example: KEY1:Value1;KEY2:Value2;
userAgentStringNoBrowser user-agent string
jsonintno1 = JSON response
Example — PHP (cURL, multipart/form-data)
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
$post = http_build_query([
  'key' => $apiKey,
  'method' => 'userrecaptcha',
  'googlekey' => $siteKey,
  'pageurl' => $pageUrl,
  'version' => 'v3',
  'action' => 'verify',
  'json' => '1'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
curl_close($ch);
$data = json_decode($resp, true);
// $data['request'] => task id or error
Example — Command-line curl
curl -X POST "http://api.tertuyul.my.id/in.php" \
  -F "key=YOUR_API_KEY" \
  -F "method=userrecaptcha" \
  -F "googlekey=SITEKEY" \
  -F "pageurl=https://example.com" \
  -F "version=v3" \
  -F "action=verify" \
  -F "json=1"

Cloudflare Turnstile

Use method=turnstile with sitekey and pageurl. Supports action/data/pagedata for advanced cases.

turnstile
Parameters (POST)
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesturnstile
sitekeystringyessitekey on page
pageurlstringyespage URL
actionstringnologin
cdatastringnoadvanced params for Cloudflare
jsonintno1 = JSON
Example — PHP cURL

$post = http_build_query([
  'key' => $apiKey,
  'method' => 'turnstile',
  'sitekey' => $siteKey,
  'pageurl' => $pageUrl,
  'json' => '1'
]);
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
// $task['request'] => task id or error

Cloudflare cf_clearance

Use method=cloudflare with proxy and pageurl. Return response cf_clearance:user-agent

cloudflare
Parameters (POST)
ParameterTypeReqNotes
keystringyesAPI key
methodstringyescloudflare
pageurlstringyespage URL
proxystringyes Format: login:pass@ip:port
jsonintno1 = JSON
Example — PHP cURL

$post = http_build_query([
  'key' => $apiKey,
  'method' => 'cloudflare',
  'pageurl' => $pageUrl,
  'proxy'   => 'login:pass@ip:port',
  'json' => '1'
]);
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
// $task['request'] => task id or error

RS / Icon Captcha

Send image as Base64 in body. Response returns coordinates x:y or list.

rscaptcha
Params
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesrscaptcha
bodyBase64yesstring raw base64
jsonintno1 = JSON
Example — PHP cURL (multipart)
$img = base64_encode(file_get_contents('/path/to/captcha.png'));
$post = http_build_query([
  'key' => $apiKey,
  'method' => 'rscaptcha',
  'body' => $img,
  'json' => '1'
]);
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$data = json_decode($resp, true);
// $data['request'] => task id or error

Upside (detect rotated / upside icons)

Send image as Base64 in body. Response returns coordinates x:y or list.

upside
upside2
upside3
Params
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesupside
bodyBase64yesstring raw base64
jsonintno1 = JSON
Example PHP

$post = http_build_query([
  '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($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$data = json_decode($resp,true);
// $data['request'] => task id or error

Hunter (Icon Name)

Send main image (base64). Service returns icon name (eg. fa-subway) or label.

hunter
hunter1 hunter2 hunter3
Params
ParameterTypeReqNotes
keystringyesAPI key
methodstringyeshunter
bodyBase64yesstring raw base64
jsonintno1 = JSON
Example PHP

$post = http_build_query([
  'key'=>$apiKey,
  'method'=>'hunter',
  'body'=>base64_encode(file_get_contents('huntermain.png')),
  'json'=>'1'
  ]);
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$data = json_decode($resp,true);
// $data['request'] => task id or error

Anticap (Icon Name)

Send main image (base64). Service returns icon name (eg. dragon) or label.

anticap
Params
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesanticap
bodyBase64yesstring raw base64
jsonintno1 = JSON
Example — PHP cURL (multipart)
$img = base64_encode(file_get_contents('/path/to/captcha.png'));
$post = http_build_query([
  'key' => $apiKey,
  'method' => 'anticap',
  'body' => $img,
  'json' => '1'
]);
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$data = json_decode($resp, true);
// $data['request'] => task id or error

iconfinder (detect least displayed icon)

Send image as Base64 in body. Response returns coordinates x:y or list.

iconfinder
Params
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesiconfinder
bodyBase64yesstring raw base64
jsonintno1 = JSON
Example PHP

$post = http_build_query([
  'key'=>$apiKey,
  'method'=>'iconfinder',
  'body'=>base64_encode(file_get_contents('iconfinder.png')),
  'json'=>'1'
  ]);
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$data = json_decode($resp,true);
// $data['request'] => task id or error

iconflip (Icon flip)

Send image as Base64 in body. Response returns coordinates x:y:px:py or list.

iconflip
Params
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesiconflip
bodyBase64yesstring raw base64
jsonintno1 = JSON
Example — PHP cURL (multipart)
$img = base64_encode(file_get_contents('/path/to/captcha.png'));
$post = http_build_query([
  'key' => $apiKey,
  'method' => 'iconflip',
  'body' => $img,
  'json' => '1'
]);
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$data = json_decode($resp, true);
// $data['request'] => task id or error

AntiBot (image order)

Submit main + multiple numbered images (eg. 1, 2, 3, 4). Returns order index or identifier.

antibot1 antibot2 antibot3 antibot4
Params
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesantibot
mainBase64yesstring raw base64
1Base64yesstring raw base64
2Base64yesstring raw base64
3Base64yesstring raw base64
jsonintno1 = JSON
Example PHP

$post = http_build_query([
  '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')),
  'json'=>'1'
]);
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$task = json_decode($resp,true);
// $task['request'] => task id or error

bitcotask (image order)

Submit main + multiple numbered images (eg. 0, 1, 2, 3). Returns order index or identifier ex bus:3.

bitcotask1 bitcotask2 bitcotask3 bitcotask4
Params
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesbitcotask
mainBase64yesstring raw base64
0Base64yesstring raw base64
1Base64yesstring raw base64
2Base64yesstring raw base64
3Base64yesstring raw base64
jsonintno1 = JSON
Example PHP

$post = http_build_query([
  'key'=>$apiKey,
  'method'=>'bitcotask',
  'main'=>base64_encode(file_get_contents('main.png')),
  '0'=>base64_encode(file_get_contents('1.png')),
  '1'=>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($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$task = json_decode($resp,true);
// $task['request'] => task id or error

sliders (coordinate)

Send image as Base64 in body and payload.. Response returns coordinates x:y or list.

sliders
Parameters (POST)
ParameterTypeReqNotes
keystringyesAPI key
methodstringyessliders
pageurlstringyespage URL ex(claimtrx.com)
bodyBase64yesstring raw base64 ( main/master image )
thumb_widthstringyesthumb_width on page
thumb_heightstringyesthumb_height on page
display_xstringyesdisplay_x on page
display_ystringyesdisplay_y on page
jsonintno1 = JSON
Example — PHP cURL

$post = http_build_query([
  '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($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
// $task['request'] => task id or error

teaserfast (coordinate)

Send image as Base64 in body. Response returns coordinates x:y or list.

teaserfast
Parameters (POST)
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesteaserfast
bodyBase64yesstring raw base64
jsonintno1 = JSON
Example — PHP cURL

$post = http_build_query([
  '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($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
curl_close($ch);
$task = json_decode($resp, true);
// $task['request'] => task id or error

Universal OCR

Send body base64 (image). Service returns recognized text.

universal
Params
ParameterTypeReqNotes
keystringyesAPI key
methodstringyesuniversal
bodyBase64yesstring raw base64
jsonintno1 = JSON
phraseboleanno false - no preference true - the answer should contain at least two words separated by space.
caseboleanno1 = JSON
numericintno0 - no preference 1 - answer should contain only numbers 2 - answer should contain only letters 3 - answer should contain only numbers OR only letters 4 - answer MUST contain both numbers AND letters
mathboleannofalse - no preference true - captcha requires calculation
minLengthintno 0 - no preference >=1 - defines minimal answer length
maxLengthintno 0 - no preference >=1 - defines maximal answer length
commentstringnoA comment will be shown to workers to help them to solve the captcha properly
imgInstructionsstringnoAn optional image with instruction that will be shown to workers. Image should be encoded into Base64 format.
Example PHP

$post = http_build_query([
  'key'=>$apiKey,
  'method'=>'universal',
  'body'=>base64_encode(file_get_contents('universal.png')),
  'json'=>'1'
  ]);
$ch = curl_init('http://api.tertuyul.my.id/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$task = json_decode($resp,true);
// $task['request'] => task id or error

GET Userinfo

Example PHP

Use /res.php?action=userinfo&key=API_KEY&json=1 — can be GET or POST. Examples below use PHP cURL POST for uniformity.


$post = http_build_query([
  'key'=>$apiKey,
  'action'=>'userinfo',
  'json'=>'1'
  ]);
$ch = curl_init('http://api.tertuyul.my.id/res.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$resp = curl_exec($ch);
$task = json_decode($resp,true);
// Response in JSON format:
// {"email":"[email protected]","balance":"10000.00"}

Result Examples

Use /res.php?action=get&id=TASK_ID&key=API_KEY&json=1 — can be GET or POST. Examples below use PHP cURL POST for uniformity.

Generic poll (cURL PHP)

function get_result($apiKey, $taskId){
  $post = http_build_query([
    'key'=>$apiKey,
    'action'=>'get',
    'id'=>$taskId,
    'json'=>'1'
    ]);
  $ch = curl_init('http://api.tertuyul.my.id/res.php');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  $res = curl_exec($ch);
  curl_close($ch);
  return json_decode($res, true);
}

// usage
$answer = get_result($apiKey, $taskId);
if(!empty($answer['status']) && $answer['status']==1){
  // solved
  var_dump($answer['request']);
} else {
  // CAPCHA_NOT_READY or error
  var_dump($answer['request']);
}

Notes

Error codes

ErrorDescriptionAction
CAPCHA_NOT_READYCaptcha not solved yetWait 10 seconds, retry
ERROR_REQUEST_COOLDOWNAPI CooldownRetry after 5 seconds
ERROR_CAPTCHA_UNSOLVABLECaptcha not supported or too hardRetry or check captcha type
ERROR_CAPTCHA_TIMEOUTCaptcha was not solved within 5 minutesCreate a new task and retry
ERROR_WRONG_USER_KEYYou've provided key parameter value in incorrect format, it shouldcontain 32 symbols.Stop sending requests. Check your API key.
ERROR_KEY_DOES_NOT_EXISTThe key you've provided does not exists.Stop sending requests. Check your API key.
ERROR_ZERO_BALANCEYou don't have token.Top up your account balance to continue recognition.
ERROR_WRONG_PAGEURLInvalid, missing, or unreachable page URLVerify the page URL and try again
ERROR_SITEKEY_IS_INCORRECTInvalid or missing sitekey parameterVerify the sitekey and try again
ERROR_INVALID_IMAGEInvalid, corrupted, or unsupported image formatProvide a valid captcha image and retry
ERROR_WRONG_DATALess than three images were sent for the "antibot" method.3 or more are needed.Provide a valid data and retry
ERROR_NO_SLOT_AVAILABLENo available solver slot at the momentWait a few seconds and retry
ERROR_NO_SLOT_CONNECTIONThe captcha solver service is currently offline or unavailablePlease wait a few moments and try again
ERROR_INVALID_METHODInvalid or unsupported methodUse the correct method and retry
ERROR_WRONG_ID_FORMATYou've provided captcha ID in wrong format. The ID can contain numbers only.Verify captcha ID
ERROR_WRONG_CAPTCHA_IDYou've provided incorrect captcha ID.Check ID again
ERROR_EMPTY_ACTIONAction parameter is missing or no value is provided for action parameter.Check your request parameters and add the neccessary value, e.g. get
ERROR_PROXY_CONNECTION_FAILEDProxy failed to connectUse another proxy
ERROR_INTERNAL_SERVERServer error occurredRetry after 10 seconds
ERROR_CAPTCHA_SERVER_OFFLINEServer error maintenanceStop request captcha

All Examples — compact helper (PHP)



// helper submit via cURL multipart

function submit_task($post = 0){
  $ch = curl_init('http://api.tertuyul.my.id/in.php');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  $r = curl_exec($ch);
  curl_close($ch);
  return json_decode($r, true);
}

function get_result($apiKey, $taskId){
  $post = http_build_query([
    'key'=>$apiKey,
    'action'=>'get',
    'id'=>$taskId,
    'json'=>'1'
    ]);
  $ch = curl_init('http://api.tertuyul.my.id/res.php');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  $res = curl_exec($ch);
  curl_close($ch);
  return json_decode($res, true);
}


$apiKey  = 'YOUR_API_KEY';
$siteKey = '0x4AAAAAAAA-1LUipBaoBpsG';
$pageUrl = 'https://nopecha.com/captcha/turnstile';

// Example: turnstile
$post = http_build_query([
  'key'=>$apiKey,
  'method'=>'turnstile',
  'sitekey'=>$siteKey,
  'pageurl'=>$pageUrl,
  'json'=>'1'
  ]);
$task = submit_task($post);
$taskId = $task['request'];
if($task['status'] != 1) print_r($task); die();

// Poll
while(true){
  $res = get_result($apiKey, $taskId);
  if(!empty($res['status']) && $res['status']==1){
    echo 'Solved: '.print_r($res['request'],true);
    break;
  }
  if(isset($res['request']) && $res['request']=='CAPCHA_NOT_READY'){
    sleep(5);
    continue;
  }
  echo 'Error: '.print_r($res,true);
  break;
}