Tổng quan
Trạng thái tài khoản và hoạt động gần đây
Số dư hiện tại
—
credits
Đã giải thành công
—
tasks
Đang xử lý
—
pending + active
Thất bại (đã hoàn)
—
tasks
Task gần đây
| Task ID | Website | Trạng thái | Thời gian |
|---|
API Key
Quản lý khóa truy cập API của bạn
Khóa API hiện tại
Dùng key này trong tất cả request tới API. Không chia sẻ key với người khác.
Đã sao chép vào clipboard!
Tạo key mới
Khi tạo key mới, key cũ sẽ bị vô hiệu hóa ngay lập tức.
Cách sử dụng key
API key được gửi trong body của mọi request JSON:
# Ví dụ với curl curl -X POST https://hcaptcha.canhnhat.vn/createTask \ -H "Content-Type: application/json" \ -d '{"apiKey":"YOUR_API_KEY","task":{...}}'
Tài liệu API
Hướng dẫn tích hợp đầy đủ — bao gồm rqdata và xử lý lỗi
https://hcaptcha.canhnhat.vn
/createTask
— Tạo task mới, trừ 1 credit
Tham số request
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
| apiKey | string | Required | API key của bạn từ trang này |
| task.type | string | Required | Phải là "hcaptcha" |
| task.websiteURL | string | Required | URL đầy đủ của trang chứa hCaptcha |
| task.websiteKey | string | Required | Giá trị thuộc tính data-sitekey của widget hCaptcha |
| task.rqdata | string | Optional | Dữ liệu bổ sung cho hCaptcha Enterprise. |
Hướng dẫn lấy rqdata
rqdata — là chuỗi base64 dùng bởi một số trang web dùng hCaptcha Enterprise. Cần cung cấp khi trang web yêu cầu xác thực bổ sung.
Cách lấy rqdata:
- 1. Mở DevTools (F12) trên trang có hCaptcha
- 2. Vào tab Network, lọc theo
getcaptcha - 3. Tải lại trang, tìm request tới
api2.hcaptcha.com/getcaptcha/... - 4. Trong phần Request Payload, copy giá trị field
rqdata
Nếu không thấy field rqdata, trang đó không yêu cầu — không cần truyền vào.
Code mẫu
import requests response = requests.post( "https://hcaptcha.canhnhat.vn/createTask", json={ "apiKey": "YOUR_API_KEY", "task": { "type": "hcaptcha", "websiteURL": "https://example.com/login", "websiteKey": "a9b5fb07-92ee-493a-a4f4-...", # rqdata chỉ cần khi trang yêu cầu (Enterprise) "rqdata": "eyJ0eXAiOiJKV1QiLCJhbGci..." } } ) data = response.json() if data["errorId"] == 0: task_id = data["taskId"] print(f"Task created: {task_id}") else: print(f"Error: {data['errorCode']}")
const response = await fetch("https://hcaptcha.canhnhat.vn/createTask", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ apiKey: "YOUR_API_KEY", task: { type: "hcaptcha", websiteURL: "https://example.com/login", websiteKey: "a9b5fb07-92ee-493a-a4f4-...", // rqdata: "eyJ0eXAi..." // chỉ khi trang yêu cầu } }) }); const { errorId, taskId } = await response.json();
curl -X POST https://hcaptcha.canhnhat.vn/createTask \ -H "Content-Type: application/json" \ -d '{ "apiKey": "YOUR_API_KEY", "task": { "type": "hcaptcha", "websiteURL": "https://example.com/login", "websiteKey": "a9b5fb07-92ee-493a-a4f4-...", "rqdata": "eyJ0eXAi..." } }' # Response thành công: { "errorId": 0, "taskId": "3f2504e0-4f89-11ef-9454..." }
/getTaskResult
— Lấy kết quả task, poll mỗi 3–5s
Tham số request
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
| apiKey | string | Required | API key của bạn |
| taskId | string | Required | UUID trả về bởi /createTask |
Các trạng thái response
Đang xử lý — tiếp tục poll
{ "errorId": 0, "status": "processing" }
Hoàn thành — dùng token ngay
{
"errorId": 0,
"status": "ready",
"solution": {
"token": "P1_eyJhbGciOiJIUzI1NiIsInR5...",
"userAgent": "Mozilla/5.0 (Windows NT 10.0...)"
}
}
Thất bại — credit đã được hoàn tự động
{
"errorId": 1,
"errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
"errorDescription": "Task failed"
}
Hết thời gian — credit đã hoàn tự động
{
"errorId": 1,
"errorCode": "TASK_TIMEOUT",
"errorDescription": "TASK_TIMEOUT"
}
Code mẫu (polling)
import time def get_token(api_key, task_id, max_wait=120): url = "https://hcaptcha.canhnhat.vn/getTaskResult" for _ in range(max_wait // 3): r = requests.post(url, json={ "apiKey": api_key, "taskId": task_id }) d = r.json() if d["status"] == "ready": return d["solution"]["token"] if d.get("errorId") == 1: raise Exception(d["errorCode"]) # credit đã hoàn time.sleep(3) raise TimeoutError("Timeout chờ kết quả") # Sử dụng token = get_token(api_key="YOUR_KEY", task_id=task_id) print(f"Token: {token[:40]}...") # Gửi token lên trang web: # form["h-captcha-response"] = token
async function getToken(apiKey, taskId, maxWaitMs = 120000) { const url = "https://hcaptcha.canhnhat.vn/getTaskResult"; const start = Date.now(); while (Date.now() - start < maxWaitMs) { const r = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ apiKey, taskId }) }); const d = await r.json(); if (d.status === "ready") return d.solution.token; if (d.errorId === 1) throw new Error(d.errorCode); // đã hoàn tiền await new Promise(r => setTimeout(r, 3000)); } throw new Error("Timeout"); } // Sử dụng const token = await getToken("YOUR_KEY", taskId); // Gửi: formData.set("h-captcha-response", token);
# Poll thủ công (lặp mỗi 3-5 giây) curl -X POST https://hcaptcha.canhnhat.vn/getTaskResult \ -H "Content-Type: application/json" \ -d '{"apiKey":"YOUR_KEY","taskId":"3f2504e0-..."}' # 1. Nếu trả về status "processing" → đợi 3-5s rồi thử lại # 2. Nếu trả về status "ready" → lấy solution.token # 3. Nếu errorId = 1 → thất bại, credit đã hoàn, thử task mới # Dùng token: # Field: h-captcha-response = P1_eyJhbGci... # Hạn dùng: ~60-90 giây sau khi nhận
Mã lỗi
| errorCode | Mô tả | Hành động |
|---|---|---|
| ERROR_KEY_DENIED | API key không hợp lệ hoặc đã bị thu hồi | Kiểm tra lại API key |
| ERROR_ZERO_BALANCE | Số dư không đủ để tạo task | Liên hệ admin nạp credits |
| ERROR_TASK_NOT_FOUND | taskId không tồn tại hoặc không thuộc key này | Kiểm tra lại taskId |
| ERROR_TASK_TYPE | task.type không phải "hcaptcha" | Sửa task.type = "hcaptcha" |
| ERROR_TASK_ABSENT_INPUT | Thiếu websiteURL hoặc websiteKey | Cung cấp đủ tham số |
| ERROR_TOO_MANY_TASKS | Đang có quá nhiều task đồng thời | Đợi task hiện tại xong rồi thử lại |
| ERROR_CAPTCHA_UNSOLVABLE | Không thể giải captcha này | Credit đã hoàn, thử lại |
| TASK_TIMEOUT | Task không hoàn thành trong thời gian quy định | Credit đã hoàn tự động, thử lại |
| ERROR_SITEKEY_NOT_SUPPORTED | Site key không có trong danh sách hỗ trợ | Liên hệ admin để thêm site key |
| ERROR_USER_BLOCKED | Tài khoản đã bị khoá bởi admin | Liên hệ admin để mở khoá |
Lưu ý quan trọng
Token hết hạn nhanh
Token P1_... chỉ có hiệu lực ~60–90 giây. Dùng ngay sau khi nhận.
User-Agent khớp
Dùng solution.userAgent làm header khi gửi token để tăng tỉ lệ chấp nhận.
Poll interval
Poll mỗi 3–5 giây. Poll quá nhanh (<2s) không có lợi vì worker cần thời gian xử lý.
Lịch sử task
Lịch sử task của tài khoản
Tổng
—
Đã giải
—
Đang xử lý
—
Thất bại
—
| Task ID | Website | Trạng thái | Thời gian |
|---|
Giao dịch
Lịch sử giao dịch tài khoản
| Thời gian | Loại | Số tiền | Ghi chú |
|---|
Nạp tiền
Chuyển khoản ngân hàng — tự động cộng credit
Chức năng nạp tiền chưa được cấu hình. Vui lòng liên hệ admin.
Thông tin chuyển khoản
Nội dung chuyển khoản — BẮT BUỘC
Sai nội dung → tiền không được cộng tự động
Tiền được cộng tự động trong vài giây sau khi hệ thống nhận thông báo từ ngân hàng.
Mã QR VietQR
Quét QR bằng app ngân hàng để chuyển khoản nhanh
Cài đặt
Tài khoản, bảo mật và giao diện
Thông tin tài khoản
Đổi mật khẩu
Mật khẩu mới phải có ít nhất 6 ký tự.
Giao diện
Chế độ tối / sáng
Tuỳ chỉnh theo sở thích