Integrate our solving service into your bots and scripts.
All API requests must be made via HTTP GET or POST to the following endpoints:
If you are using commercial automation software (like Mailbot, BAS, ZennoPoster, or OpenBullet), integration takes just 10 seconds:
99captcha.siteNote: If your software does not have a domain override setting, simply open your Windows hosts file (C:\Windows\System32\drivers\etc\hosts) and add this line to redirect traffic to us: [YOUR_SERVER_IP] 2captcha.com
If you are writing a custom script in Python, PHP, Node.js, etc., our API uses the industry-standard two-step polling process.
Send a request to in.php to submit your captcha details.
| Parameter | Required | Description |
|---|---|---|
key | Yes | Your 32-character API Key. |
method | Yes | The captcha type (e.g., captchafox, userrecaptcha, hcaptcha). |
sitekey | Yes | The sitekey or website key found on the target page. |
pageurl | Yes | The full URL of the page where the captcha is located. |
proxy | Optional | Your proxy in IP:PORT or user:pass@IP:PORT format. |
proxytype | Optional | The type of proxy (HTTP, SOCKS4, or SOCKS5). |
userAgent | Optional | The exact User-Agent your automated browser is using. |
Success Response: OK|123456789 (The number is your Task ID)
Error Response: ERROR_ZERO_BALANCE, ERROR_WRONG_SITEKEY, etc.
Wait 3 to 5 seconds, then poll res.php using the Task ID you received in Step 1.
| Parameter | Required | Description |
|---|---|---|
key | Yes | Your 32-character API Key. |
action | Yes | Must be set to exactly get. |
id | Yes | The Task ID you received from Step 1. |
Still Solving: CAPCHA_NOT_READY (Wait 3 seconds and request again)
Success Response: OK|0x_solved_token_string_here
Use this drop-in Python snippet to start solving captchas immediately:
import requests
import time
API_KEY = "YOUR_99CAPTCHA_API_KEY"
def solve_captcha(site_key, page_url, proxy=None, user_agent=None):
# 1. Submit the task
payload = {
"key": API_KEY,
"method": "captchafox", # Change depending on captcha type
"sitekey": site_key,
"pageurl": page_url
}
if proxy:
payload["proxy"] = proxy
payload["proxytype"] = "SOCKS5"
if user_agent:
payload["userAgent"] = user_agent
print("Submitting task to 99captcha.site...")
submit_res = requests.post("http://99captcha.site/in.php", data=payload, timeout=15)
if "OK|" not in submit_res.text:
print(f"Failed to submit: {submit_res.text}")
return None
task_id = submit_res.text.split("|")[1]
print(f"Task created! ID: {task_id}")
time.sleep(3) # Wait before first poll
# 2. Poll for the result
res_url = f"http://99captcha.site/res.php?key={API_KEY}&action=get&id={task_id}"
for _ in range(40): # Poll 40 times maximum
answer_res = requests.get(res_url, timeout=15)
answer_text = answer_res.text.strip()
if "OK|" in answer_text:
token = answer_text.split("|", 1)[1]
print("Captcha solved successfully!")
return token
elif answer_text == "CAPCHA_NOT_READY":
time.sleep(3)
else:
print(f"Solver Error: {answer_text}")
return None
return None
# Example Usage:
# token = solve_captcha("sk_vKdD...", "https://signup.gmx.com/")
© 2026 99Captcha API. All rights reserved.