API 문서
요청은 JSON이고 주소는 하나(https://gatesolver.com)예요. 계정 화면에서 만든 API 키를 clientKey 로 보내요. 작업을 만들고(createTask), 몇 초 뒤 결과를 받아요(getTaskResult).
- 기본 주소
- https://gatesolver.com
- 인증
- 본문의 clientKey
- 요청 제한
- 키 하나 1분에 600번
- 형식
- JSON (POST)
시작하기
- 가입하고 잔액을 충전해요.
- 계정 화면의 API 키 메뉴에서 키를 만들어요. 키는 만들 때 한 번만 보여요.
- createTask 로 작업을 만들고 받은 taskId 로 getTaskResult 를 몇 초마다 불러요.
- status 가 ready 가 되면 solution 을 페이지에 넣어요.
createTask 방식 클라이언트는 API 주소만 바꾸면 그대로 써요. 새 주소: https://gatesolver.com
createTask
POST https://gatesolver.com/createTask
작업을 만들고 taskId 를 돌려줘요. 이때는 돈이 빠지지 않아요.
| 칸 | 형식 | 필수 | 설명 |
|---|---|---|---|
| clientKey | string | 예 | API 키 |
| task | object | 예 | 작업 내용. type 과 종류별 칸 (아래 작업 type 표와 종류별 페이지) |
| callbackUrl | string | 아니요 | 받지 않아요. getTaskResult 로 결과를 받아요. |
요청
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": "https://www.google.com/recaptcha/api2/demo",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
}
}응답
{ "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006" }getTaskResult
POST https://gatesolver.com/getTaskResult
작업 결과를 돌려줘요. 토큰형은 3초, 그림 인식은 1초 간격으로 물어보는 게 좋아요. 답이 나온 순간 1건 값이 잔액에서 빠져요.
| 칸 | 설명 |
|---|---|
| status | processing (기다리는 중), ready (답 나옴), failed (실패, 돈 안 빠짐) |
| solution | 답. 종류마다 칸이 달라요 (gRecaptchaResponse, token, cookie, text 등) |
| cost | 이 작업에 빠진 금액(달러) |
| createTime / endTime | 만든 시각과 끝난 시각(밀리초) |
{
"errorId": 0,
"taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006",
"status": "ready",
"solution": { "gRecaptchaResponse": "03AFcWeA6...", "userAgent": "Mozilla/5.0 ..." },
"cost": "0.000560"
}getBalance
POST https://gatesolver.com/getBalance
잔액을 달러로 돌려줘요.
{ "clientKey": "YOUR_API_KEY" }
{ "errorId": 0, "balance": 42.5 }작업 type
type 이름은 대소문자를 가리지 않아요. 종류별 칸과 예시는 각 종류 페이지에 있어요.
| type | 종류 | 1,000건 |
|---|---|---|
| ReCaptchaV2TaskProxyLess | reCAPTCHA v2 | $0.56 |
| ReCaptchaV2Task | reCAPTCHA v2 | $0.56 |
| ReCaptchaV2EnterpriseTaskProxyLess | reCAPTCHA v2 Enterprise | $0.70 |
| ReCaptchaV2EnterpriseTask | reCAPTCHA v2 Enterprise | $0.70 |
| ReCaptchaV3TaskProxyLess | reCAPTCHA v3 | $0.70 |
| ReCaptchaV3Task | reCAPTCHA v3 | $0.70 |
| ReCaptchaV3EnterpriseTaskProxyLess | reCAPTCHA v3 Enterprise | $2.10 |
| ReCaptchaV3EnterpriseTask | reCAPTCHA v3 Enterprise | $2.10 |
| AntiTurnstileTaskProxyLess | Cloudflare Turnstile | $0.84 |
| TurnstileTaskProxyless | Cloudflare Turnstile | $0.84 |
| AntiCloudflareTask | Cloudflare Challenge | $0.84 |
| AntiAwsWafTaskProxyLess | AWS WAF | $1.40 |
| AntiAwsWafTask | AWS WAF | $1.40 |
| GeeTestTaskProxyLess | GeeTest v3 / v4 | $0.84 |
| GeeTestTask | GeeTest v3 / v4 | $0.84 |
| MtCaptchaTaskProxyLess | MTCaptcha | $2.10 |
| MtCaptchaTask | MTCaptcha | $2.10 |
| DatadomeSliderTask | DataDome Slider | $1.75 |
| ImageToTextTask | Image to Text | $0.28 |
| ReCaptchaV2Classification | reCAPTCHA Image Classification | $0.28 |
| AwsWafClassification | AWS WAF Image Classification | $0.42 |
| VisionEngine | Vision Engine | $1.05 |
오류 코드
오류가 나면 errorId 가 1이고 errorCode 와 errorDescription 이 함께 와요. 오류 응답은 돈이 빠지지 않아요.
| errorCode | 뜻 |
|---|---|
| ERROR_KEY_DENIED_ACCESS | clientKey 가 없거나 틀렸어요. |
| ERROR_ZERO_BALANCE | 잔액이 모자라요. 충전한 뒤 다시 요청해요. |
| ERROR_TASK_NOT_SUPPORTED | 지원하지 않는 작업 type 이에요. |
| ERROR_INVALID_TASK_DATA | 필요한 칸이 빠졌어요. errorDescription 에 빠진 칸 이름이 있어요. |
| ERROR_TASKID_INVALID | 이 키로 만든 taskId 가 아니거나 없는 taskId 예요. |
| ERROR_CAPTCHA_UNSOLVABLE | 풀지 못했어요. 돈은 빠지지 않았어요. 다시 요청해요. |
| ERROR_SERVICE_UNAVAILABLE | 네트워크 오류예요. 돈은 빠지지 않았어요. 잠시 뒤 다시 요청해요. |
| ERROR_RATE_LIMIT | 1분에 600번을 넘었어요. 요청 간격을 늘려요. |
| ERROR_ACCOUNT_SUSPENDED | 정지된 계정이에요. |
in.php 호환
in.php 방식 프로그램은 주소만 바꾸면 돼요. 받는 method: userrecaptcha (reCAPTCHA v2), turnstile, geetest, base64·post (그림 글자).
GET https://gatesolver.com/in.php?key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le...&pageurl=https://example.com
OK|61138bb6-19fb-11ec-a9c8-0242ac110006
GET https://gatesolver.com/res.php?key=YOUR_API_KEY&action=get&id=61138bb6-19fb-11ec-a9c8-0242ac110006
CAPCHA_NOT_READY
OK|03AFcWeA6...
GET https://gatesolver.com/res.php?key=YOUR_API_KEY&action=getbalance
42.50000json=1 을 붙이면 {"status":1,"request":"..."} 모양으로 답해요.
예제
import requests, time
API, KEY = "https://gatesolver.com", "YOUR_API_KEY"
def solve(task, wait=3, timeout=120):
r = requests.post(f"{API}/createTask", json={"clientKey": KEY, "task": task}, timeout=30).json()
if r.get("errorId"):
raise RuntimeError(r["errorCode"])
end = time.time() + timeout
while time.time() < end:
time.sleep(wait)
res = requests.post(f"{API}/getTaskResult", json={"clientKey": KEY, "taskId": r["taskId"]}, timeout=30).json()
if res.get("errorId"):
raise RuntimeError(res["errorCode"])
if res["status"] == "ready":
return res["solution"]
raise TimeoutError("task timed out")
print(solve({"type": "ReCaptchaV2TaskProxyLess", "websiteURL": "https://example.com", "websiteKey": "6Le..."}))const API = "https://gatesolver.com", KEY = "YOUR_API_KEY";
const post = (p, b) => fetch(API + p, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(b) }).then((r) => r.json());
export async function solve(task, wait = 3000) {
const r = await post("/createTask", { clientKey: KEY, task });
if (r.errorId) throw new Error(r.errorCode);
for (;;) {
await new Promise((s) => setTimeout(s, wait));
const res = await post("/getTaskResult", { clientKey: KEY, taskId: r.taskId });
if (res.errorId) throw new Error(res.errorCode);
if (res.status === "ready") return res.solution;
}
}body, _ := json.Marshal(map[string]any{"clientKey": "YOUR_API_KEY", "task": map[string]any{
"type": "AntiTurnstileTaskProxyLess", "websiteURL": "https://example.com", "websiteKey": "0x4AAAAAAA..."}})
res, err := http.Post("https://gatesolver.com/createTask", "application/json", bytes.NewReader(body))$ch = curl_init("https://gatesolver.com/createTask");
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["clientKey" => "YOUR_API_KEY", "task" => [
"type" => "ReCaptchaV3TaskProxyLess", "websiteURL" => "https://example.com", "websiteKey" => "6Lc...", "pageAction" => "login"]])]);
$task = json_decode(curl_exec($ch), true);curl -X POST https://gatesolver.com/createTask -H "Content-Type: application/json" \
-d '{"clientKey":"YOUR_API_KEY","task":{"type":"ImageToTextTask","body":"iVBORw0KGgo..."}}'