Image captchas in PHP today — reCAPTCHA planned — updated August 2026
CaptchaKings enables fast, zero-dependency captcha solving in PHP via native cURL, GuzzleHttp, and WordPress wp_remote_post.
• Endpoints: https://captchakings.com/api/process.php (Image OCR, ~1.2s median, $0.80/1,000 solves) & specialized endpoints for GeeTest, Tencent, MTCaptcha, Amazon WAF ($1.00/1,000).
• Compatibility: Works on standard shared hosting (cPanel, DirectAdmin) and modern PHP 7.4 / 8.x environments without root access or custom extensions.
• Trial: $0.50 free balance upon registration with instant API key access.
Support status: Live today via the API: image/text captchas ($0.80 per 1,000, ~1.2s median) plus GeeTest, Tencent, xCaptcha, MTCaptcha and Amazon WAF ($1.00 per 1,000) — measured numbers at /benchmarks. reCAPTCHA, hCaptcha and Cloudflare Turnstile are planned, not yet available — see /supported-captchas.
No Composer, no dependencies — just the cURL extension that ships with PHP. CURLFile handles the multipart upload:
<?php
$apiKey = getenv('CAPTCHAKINGS_KEY');
$ch = curl_init('https://captchakings.com/api/process.php');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer $apiKey"],
CURLOPT_POSTFIELDS => ['captcha' => new CURLFile('captcha.jpg')],
CURLOPT_TIMEOUT => 30
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
if ($data['success']) {
echo $data['data']['prediction']; // solved text
echo $data['data']['confidence']; // 0-100
echo $data['billing']['balance_remaining'];
} else {
echo 'Error: ' . $data['error']['message'];
}
Token captchas will be solved by submitting the page URL and site key, then using the returned token. For reCAPTCHA v2 and hCaptcha this flow is planned, not yet available — the exact endpoint and request format will be announced on the changelog when reCAPTCHA support launches; see /recaptcha-solver. The live solvers today (Amazon AWS WAF, GeeTest, Tencent, xCaptcha, MTCaptcha) answer synchronously in one POST. The image-captcha flow above works today. The outline below is a preview of the planned flow:
<?php
function solveRecaptchaV2(string $pageUrl, string $siteKey): string {
// The final reCAPTCHA endpoint and request format will be
// announced on the CaptchaKings changelog at launch.
// Planned flow:
// 1. POST your API key + page URL + site key to the solver endpoint
// 2. Receive the g-recaptcha-response token in the API response
// 3. Return the token for injection into the target form
throw new RuntimeException('reCAPTCHA support is coming soon to CaptchaKings');
}
If your project already uses Guzzle (Laravel, Symfony, Slim...), the same multipart image-captcha call gets shorter — this works today:
<?php
use GuzzleHttp\Client;
$http = new Client();
$img = json_decode($http->post('https://captchakings.com/api/process.php', [
'headers' => ['Authorization' => 'Bearer ' . getenv('CAPTCHAKINGS_KEY')],
'multipart' => [[
'name' => 'captcha',
'contents' => fopen('captcha.jpg', 'r')
]]
])->getBody(), true);
echo $img['data']['prediction'];
Inside a plugin or theme, use WordPress's HTTP API — it picks the right transport automatically. This example outlines the planned reCAPTCHA flow (preview — the exact endpoint and request format will be announced on the changelog at launch; see /recaptcha-solver):
<?php
function myplugin_solve_recaptcha($page_url, $site_key) {
$api_key = get_option('captchakings_api_key');
// The final reCAPTCHA endpoint and request format will be
// announced on the CaptchaKings changelog at launch.
// Planned flow:
// 1. wp_remote_post your API key + page URL + site key
// to the solver endpoint
// 2. Receive the g-recaptcha-response token in the API response
// 3. Return the token for injection into the target form
return false; // reCAPTCHA support is coming soon to CaptchaKings
}
| Captcha Type | Endpoint | Result |
|---|---|---|
| Image captcha — live | captchakings.com/api/process.php | Solved text (synchronous) |
| Amazon AWS WAF, GeeTest, Tencent, xCaptcha, MTCaptcha — live | captchakings.com/api/amazon.php, geetest.php, tencent.php, xcaptcha.php, mtcaptcha.php | Coordinates / solution (synchronous) |
| reCAPTCHA / hCaptcha — Planned | Announced at launch | Preview only, not yet available |
| 2Captcha-compatible | captchakings.com/in.php / res.php | Drop-in migration format (xCaptcha only) |
Yes. The API only needs outbound HTTPS through the cURL extension, which every shared host enables by default. No Composer, root access, or custom ports required.
reCAPTCHA support is planned, not yet available via the API — see /supported-captchas and /recaptcha-solver. At launch the flow will be: POST the page URL and site key to the CaptchaKings solver endpoint (exact request format announced on the changelog) and use the returned gRecaptchaResponse token. The image-captcha flow works today.
Yes — wp_remote_post handles the image API's multipart body today, and the same function will handle the solver request once reCAPTCHA support launches (planned — see /supported-captchas). Preview example above.
Both work. Native cURL = zero dependencies and runs everywhere; Guzzle is nicer in Composer-based projects like Laravel. Both styles shown above.
$0.50 free balance on signup — test with your own captchas.
Get Your API Key