Troubleshooting

Diagnose and fix the most common integration problems — auth, uploads, rate limits, and solver-specific issues.

Error Reference

Native endpoints (/api/*.php) return JSON errors; the 2Captcha-compatible pair (in.php/res.php) returns text error strings.

JSON API Errors (native endpoints)

HTTP Error Message Cause & Fix
400 Invalid API key or account inactive Wrong key or disabled account — copy the key from your dashboard; send it in the Authorization: Bearer or X-API-Key header
403 Insufficient credits Balance is empty — top up; new accounts start with $0.50 free
400 No file uploaded Missing multipart file field — the field name must be captcha
400 Invalid file type Unsupported format — upload JPG, PNG, or GIF (WebP is converted server-side)
400 File size exceeds 5MB Image too large — resize or compress before upload
405 Method not allowed GET used on a POST-only endpoint — switch to POST
429 Rate limit exceeded Above your plan's per-minute allowance — wait 1 minute, then retry; see Rate Limits

Legacy Text Errors (in.php / res.php)

Error String Meaning Fix
KEY_DOES_NOT_EXIST API key not recognized Check the key parameter against your dashboard key
ZERO_BALANCE No credit remaining Top up your balance
UPLOAD_FAILURE Image could not be received/decoded Re-send a valid JPG/PNG/GIF image
CAPTCHA_UNSOLVABLE Pipeline could not solve this image Send a clearer capture; not billed
NO_SUCH_CAPCHA_ID res.php?action=get with an unknown task ID Use the exact ID returned by in.php; IDs come only from the xCaptcha pipeline

Common Symptoms

"I get 400 Invalid API key on every request"

"My request times out"

"res.php says NO_SUCH_CAPCHA_ID"

"Accuracy is lower than the benchmarks"

"Am I being double-charged on retries?"

Still Stuck?

Email [email protected] with the endpoint, HTTP status, full error message, and a sample image. Typical response time is under 24 hours.

Related: Error Handling · Task Lifecycle · Rate Limits