3Captcha
DocsLoginSign up

API Documentation

Solve Cloudflare Turnstile, hCaptcha, reCAPTCHA v2, reCAPTCHA v3 & image OCR — authenticated with your API key.

Overview

3Captcha is a pay-per-solve API. You send a sitekey + page URL (or a base64 image for OCR) and receive a token (or the recognized text) you submit on the target site. Every request is authenticated with your API key; you are charged only on a successful solve.

Quick Start

  1. Get your API keycreate an account, then copy the key from your dashboard.
  2. Send a solve request — POST the sitekey + page URL and pass your key in the x-api-key header.
  3. Receive the token — the response returns token, which you submit on the target site.
curl -X POST http://3captcha.world/solve/turnstile \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"sitekey":"0x4AAAAAAActoBfh_En8yr3T","siteurl":"https://example.com/"}'

# Response
{"status":"success","token":"0.w0e4...","elapsed":5.2}

Pricing

Cloudflare Turnstile
invisible / managed
$0.10
per 1,000 solves
reCAPTCHA v2
audio challenge
$2.00
per 1,000 solves
reCAPTCHA v3
score-based token
$3.00
per 1,000 solves
hCaptcha
coming soon
$3.00
per 1,000 solves
Image OCR
text recognition
$0.10
per 1,000 solves

Authentication

# Every solve request requires your API key in the header:
curl -X POST http://3captcha.world/solve/turnstile \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"sitekey":"0x4AAAAAAActoBfh_En8yr3T","siteurl":"https://example.com/"}'

Endpoints

POST/solve/turnstileSolve Cloudflare Turnstile
POST/solve/hcaptchaSolve hCaptcha
POST/solve/recaptcha-v2Solve reCAPTCHA v2 (audio)
POST/solve/recaptcha-v3Solve reCAPTCHA v3 (returns a high-score token)
POST/solve/ocrSolve image OCR (returns the recognized text)
POST/api/user/depositCreate a crypto deposit invoice (USDT)
POST/api/v1/getBalanceCheck your balance
POST/api/v1/getAccountInfoGet account info + stats
POST/api/auth/registerCreate an account
POST/api/auth/loginLog in
GET/api/user/overviewYour balance + stats (dashboard)

Cloudflare Turnstile

# Solve an invisible or managed Turnstile challenge.
curl -X POST http://3captcha.world/solve/turnstile \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"sitekey":"0x4AAAAAAActoBfh_En8yr3T","siteurl":"https://example.com/"}'

# 200 OK
{"status":"success","token":"0.w0e4...","elapsed":5.2}

reCAPTCHA v2

curl -X POST http://3captcha.world/solve/recaptcha-v2 \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"sitekey":"6LfyCr4rAAAAAEEBPic8UihJxtI4IeOMuPXRLebm","siteurl":"https://example.com/"}'

# 200 OK
{"status":"success","token":"03AFcWeA...","elapsed":19.4}

reCAPTCHA v3

# v3 returns a token whose SCORE is decided by Google — no image challenge.
# Submit the token to your own verification endpoint to read the score.
curl -X POST http://3captcha.world/solve/recaptcha-v3 \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"sitekey":"6Lcyqq8oAAAAAJE7eVJ3aZp_hnJcI6LgGdYD8lge","siteurl":"https://example.com/","action":"submit"}'

# 200 OK
{"status":"success","token":"03AGdBq26...","elapsed":33.2}

Image OCR

# Recognize the text in a captcha image. Send the image as base64.
curl -X POST http://3captcha.world/solve/ocr \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"base64":"/9j/4AAQSkZJRg..."}'

# 200 OK — token is the recognized text (letters/numbers only)
{"status":"success","token":"42ST","elapsed":22.7}

hCaptcha (temporarily disabled)

curl -X POST http://3captcha.world/solve/hcaptcha \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"sitekey":"463b917e-e264-403f-ad34-34af0ee10294","siteurl":"https://example.com/"}'

Code examples

# Python
import requests
r = requests.post("http://3captcha.world/solve/turnstile",
  headers={"x-api-key": "YOUR_API_KEY"},
  json={"sitekey":"0x4AAAAAAActoBfh_En8yr3T","siteurl":"https://example.com/"})
print(r.json())

# PHP
$ch = curl_init("http://3captcha.world/solve/turnstile");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => ["Content-Type: application/json", "x-api-key: YOUR_API_KEY"],
  CURLOPT_POSTFIELDS => '{"sitekey":"0x4AAAAAAActoBfh_En8yr3T","siteurl":"https://example.com/"}',
]);
echo curl_exec($ch);

# Node.js
const res = await fetch("http://3captcha.world/solve/turnstile", {
  method: "POST",
  headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY" },
  body: JSON.stringify({ sitekey: "0x4AAAAAAActoBfh_En8yr3T", siteurl: "https://example.com/" }),
});
console.log(await res.json());

Account (API key)

# Check your balance
curl -X POST http://3captcha.world/api/v1/getBalance \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY"

# {"status":"success","balance":12.3456}

# Get your account info
curl -X POST http://3captcha.world/api/v1/getAccountInfo \
  -H "Content-Type: application/json" \
  -d '{"api_key":"YOUR_API_KEY"}'

Payments & Deposits (USDT)

# Create a crypto deposit invoice, then open invoiceUrl in the browser.
# The user pays in USDT (any network); balance is credited automatically.
curl -X POST http://3captcha.world/api/user/deposit \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"amount":10}'

# 201 Created
{"status":"success","orderId":"rcp...","invoiceUrl":"https://ccpayment.com/sl/..."}

# Balance is credited automatically once the payment is confirmed.
# Use POST /api/user/deposit/reconcile to re-check a pending deposit.

Errors

# HTTP status codes
400  Bad request — missing or invalid parameters
401  Invalid or missing API key
402  Insufficient balance — please recharge
403  Banned API key / account
413  Image too large
429  Too many attempts — rate limited
500  Solve failed (captcha could not be solved)
502  Payment / OCR provider error

Rate limits

Registration and login are limited to 3 attempts per IP per hour. OTP codes: one per 60 seconds, 3 per 24 hours. Solve requests are limited only by your balance.