https://api-captcha.maruai-solver.org
multipart/form-data หรือ x-www-form-urlencoded
2captcha API v1
keyAPI Key ได้จากหน้า Dashboard หลัง Login ด้วย Discord
key = "d2f2850274b69a42cf26f50467928a30" # ตัวอย่าง — ใช้ key ของตัวเองเท่านั้น
/in.php → ได้ OK|{task_id} กลับมา/res.php?action=get&key=...&id={task_id}PROCESSING ให้รอแล้ว retry ทุก 1–3 วินาทีOK|{answer} กลับมา| Parameter | Type | Required | Description |
|---|---|---|---|
key |
string | required | API Key ของคุณ |
method |
string | required | ระบุ base64 เสมอ |
body |
string | required | ภาพ captcha เข้ารหัสเป็น Base64 |
type |
string | optional | ค่าเริ่มต้น: ImageToTextTask |
imginstructions |
string | optional | คำสั่งพิเศษให้ solver เช่น hopscotch, click |
OK|86f4a1c2d3e5 # task_id สำหรับ poll ผล
ERROR_KEY_DOES_NOT_EXIST # key ไม่ถูกต้องหรือไม่มีในระบบ ERROR_ZERO_CAPTCHA_FILESIZE # โควต้าหมด หรือ key ถูก disable ERROR_WRONG_USER_KEY # ขาด parameter ที่จำเป็น
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
string | required | ระบุ get เสมอ |
key |
string | required | API Key ของคุณ (ต้อง key เดิมที่ submit) |
id |
string | required | Task ID ที่ได้จาก /in.php |
OK|answer_text # ได้ผลลัพธ์แล้ว PROCESSING # ยังประมวลผลอยู่ — retry ทุก 1–3 วินาที ERROR_CAPTCHA_UNSOLVABLE # แก้ไม่ได้ (ภาพไม่ชัด ฯลฯ) ERROR_WRONG_CAPTCHA_ID # task_id ไม่ถูกต้อง
import requests import time import base64 API_KEY = "YOUR_API_KEY_HERE" BASE_URL = "https://api-captcha.maruai-solver.org" # 1. โหลดรูปแล้วแปลงเป็น base64 with open("captcha.png", "rb") as f: img_b64 = base64.b64encode(f.read()).decode() # 2. Submit task resp = requests.post(f"{BASE_URL}/in.php", data={ "key": API_KEY, "method": "base64", "body": img_b64, "type": "ImageToTextTask", }) if not resp.text.startswith("OK|"): raise Exception(f"Submit error: {resp.text}") task_id = resp.text.split("|")[1] print(f"Task ID: {task_id}") # 3. Poll ผล for attempt in range(20): time.sleep(2) r = requests.get(f"{BASE_URL}/res.php", params={ "action": "get", "key": API_KEY, # ← ต้องใส่ key ด้วย! "id": task_id, }) if r.text == "PROCESSING": print(f" Attempt {attempt+1}: still processing...") continue if r.text.startswith("OK|"): answer = r.text.split("|")[1] print(f"✅ Answer: {answer}") break print(f"❌ Error: {r.text}") break
<?php $API_KEY = "YOUR_API_KEY_HERE"; $BASE_URL = "https://api-captcha.maruai-solver.org"; // 1. Submit $imgB64 = base64_encode(file_get_contents("captcha.png")); $ch = curl_init("$BASE_URL/in.php"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => "key=$API_KEY&method=base64&type=ImageToTextTask&body=" . urlencode($imgB64), CURLOPT_RETURNTRANSFER => true, ]); $res = curl_exec($ch); curl_close($ch); if (!str_starts_with($res, "OK|")) die("Submit error: $res"); $taskId = explode("|", $res)[1]; // 2. Poll for ($i = 0; $i < 20; $i++) { sleep(2); $r = file_get_contents("$BASE_URL/res.php?action=get&key=$API_KEY&id=$taskId"); if ($r === "PROCESSING") continue; if (str_starts_with($r, "OK|")) { echo "Answer: " . explode("|", $r)[1]; break; } echo "Error: $r"; break; } ?>
const fs = require("fs");
const axios = require("axios");
const API_KEY = "YOUR_API_KEY_HERE";
const BASE_URL = "https://api-captcha.maruai-solver.org";
async function solveCaptcha(imagePath) {
const imgB64 = fs.readFileSync(imagePath).toString("base64");
// 1. Submit
const { data: submitRes } = await axios.post(`${BASE_URL}/in.php`,
new URLSearchParams({ key: API_KEY, method: "base64", type: "ImageToTextTask", body: imgB64 })
);
if (!submitRes.startsWith("OK|")) throw new Error(`Submit: ${submitRes}`);
const taskId = submitRes.split("|")[1];
// 2. Poll
for (let i = 0; i < 20; i++) {
await new Promise(r => setTimeout(r, 2000));
const { data } = await axios.get(`${BASE_URL}/res.php`, {
params: { action: "get", key: API_KEY, id: taskId } // ← key จำเป็น!
});
if (data === "PROCESSING") continue;
if (data.startsWith("OK|")) return data.split("|")[1];
throw new Error(`Solver: ${data}`);
}
throw new Error("Timeout");
}
solveCaptcha("captcha.png").then(ans => console.log("Answer:", ans));
| Error | HTTP | สาเหตุ |
|---|---|---|
ERROR_KEY_DOES_NOT_EXIST | 403 | API Key ไม่ถูกต้อง, ไม่มีในระบบ, หรือถูก disable |
ERROR_ZERO_CAPTCHA_FILESIZE | 403 | โควต้าหมด (0 credits เหลือ) |
ERROR_WRONG_USER_KEY | 400 | ขาด parameter ที่จำเป็น: key หรือ body |
ERROR_WRONG_CAPTCHA_ID | 404 | task_id ไม่ถูกต้อง หรือเป็น key คนอื่น |
ERROR_CAPTCHA_UNSOLVABLE | 200 | แก้ captcha ไม่ได้ (ภาพไม่ชัด หรือ server error) |