الأساسيات
- العنوان الأساسي
https://unlock-api.com- مفتاح API
- 32 حرفًا، تجده في صفحة حسابك. أرسله كـ clientKey (JSON) أو key (in.php وres.php).
- الصيغة
- طرق JSON: طلب POST بجسم JSON. in.php وres.php: حقول نموذج عبر GET أو POST، وأضف json=1 لتحصل على ردود JSON.
- الحدود
- 1,200 طلب في الدقيقة لكل حساب، بما فيها طلبات التحقق من النتيجة. انتظر نحو 5 ثوانٍ بعد إنشاء المهمة، ثم تحقق كل 5 ثوانٍ.
- المهلة
- المهمة التي لا تُحل خلال 5 دقائق تفشل بالخطأ ERROR_CAPTCHA_UNSOLVABLE ويعود مبلغها إلى الرصيد.
- الفوترة
- يُخصم سعر المهمة عند إنشائها. المهام الفاشلة تُسترد تلقائيًا.
البدء السريع
حل reCAPTCHA v2 باستخدام طرق JSON. استبدل YOUR_API_KEY بمفتاحك.
import time, requests
API = "https://unlock-api.com"
KEY = "YOUR_API_KEY"
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": "https://example.com/login",
"websiteKey": "6LcR_RsTAAAAAFJR_5ZdbQd0SMxL7yIDmSXH1-lo"
}
}).json()
if task["errorId"]:
raise SystemExit(task["errorCode"])
while True:
time.sleep(5)
r = requests.post(f"{API}/getTaskResult", json={"clientKey": KEY, "taskId": task["taskId"]}).json()
if r["errorId"]:
raise SystemExit(r["errorCode"]) # failed tasks are refunded
if r["status"] == "ready":
print(r["solution"]["gRecaptchaResponse"])
breakطرق JSON
POST /createTask إنشاء مهمة
الجسم: clientKey وكائن task. نوع المهمة يحدد بقية الحقول، راجع أنواع المهام. الرد: errorId 0 مع taskId، أو errorId 1 مع errorCode.
POST https://unlock-api.com/createTask
{"clientKey":"YOUR_API_KEY","task":{"type":"TurnstileTaskProxyless","websiteURL":"https://example.com","websiteKey":"0x4AAAAAAAC3DHQFLr1GavRN"}}
{"errorId":0,"taskId":1001}
{"errorId":1,"errorCode":"ERROR_ZERO_BALANCE","errorDescription":"..."}POST /getTaskResult جلب النتيجة
الجسم: clientKey وtaskId. أثناء تنفيذ المهمة: status processing. عند الانتهاء: status ready مع solution وcost. المهمة الفاشلة ترد بـ errorId 1 مع errorCode الخاص بها.
POST https://unlock-api.com/getTaskResult
{"clientKey":"YOUR_API_KEY","taskId":1001}
{"errorId":0,"status":"processing"}
{"errorId":0,"status":"ready","solution":{"token":"0.zrSnRHO7h0..."},"cost":"0.0012","createTime":1791640000,"endTime":1791640011,"solveCount":1}POST /getBalance جلب الرصيد
الجسم: clientKey. الرد: balance بالدولار الأمريكي.
{"clientKey":"YOUR_API_KEY"}
{"errorId":0,"balance":42.5}الإبلاغ عن إجابة خاطئة
تقبل reportIncorrectRecaptcha وreportIncorrectImageCaptcha القيمتين clientKey وtaskId وترد بـ success. هي مقبولة للتوافق مع المكتبات الموجودة، والبلاغ لا يغيّر الرسوم.
طرق النماذج (in.php وres.php)
إرسال مهمة: in.php
الحقول: key وmethod وحقول نوع الكابتشا. الرد: OK|ID، أو مع json=1 {"status":1,"request":"ID"}. تعود الأخطاء بأسمائها، مثل ERROR_ZERO_BALANCE.
POST https://unlock-api.com/in.php
key=YOUR_API_KEY&method=hcaptcha&sitekey=SITE_KEY&pageurl=https://example.com&json=1
OK|1001
{"status":1,"request":"1001"}جلب الإجابة: res.php
يعيد action=get&id=ID القيمة OK|ANSWER عند الحل وCAPCHA_NOT_READY أثناء العمل. يضيف action=get2 التكلفة. يتحقق ids=ID1,ID2 من حتى 100 مهمة دفعة واحدة. يعيد action=getbalance الرصيد. الطريقتان action=reportbad وreportgood مقبولتان.
GET https://unlock-api.com/res.php?key=YOUR_API_KEY&action=get&id=1001 CAPCHA_NOT_READY OK|P1_eyJ0eXAiOiJKV1Qi... GET https://unlock-api.com/res.php?key=YOUR_API_KEY&action=getbalance 42.5
طرق إضافية
POST /getToken الإنشاء والانتظار: getToken
الجسم نفسه كما في createTask. ينتظر الاستدعاء حتى 50 ثانية ويعيد الرد نفسه كما في getTaskResult. إذا كانت المهمة ما زالت قيد التنفيذ، يكون الرد status processing مع taskId، فتابع التحقق عبر getTaskResult.
POST https://unlock-api.com/getToken
{"clientKey":"YOUR_API_KEY","task":{"type":"TurnstileTaskProxyless","websiteURL":"https://example.com","websiteKey":"0x4AAAA..."}}
{"errorId":0,"taskId":1001,"status":"ready","solution":{"token":"0.zrSnRHO7h0..."},"cost":"0.000725"}إشعارات النتيجة (callback)
أضف callbackUrl إلى createTask (أو pingback إلى in.php) وستُرسل النتيجة إليه عند انتهاء المهمة: جسم JSON مثل getTaskResult مع taskId، أو في in.php جسم نموذج id=…&code=…. تُستدعى العناوين العامة فقط، مرة واحدة، بمهلة 5 ثوانٍ، وتبقى النتيجة متاحة أيضًا عبر التحقق الدوري.
{"clientKey":"YOUR_API_KEY","callbackUrl":"https://your.server/captcha-result","task":{...}}
POST https://your.server/captcha-result
{"errorId":0,"taskId":1001,"status":"ready","solution":{...},"cost":"0.0005"}الإحصاءات
يعيد getQueueStats عدد المهام المنتظرة وقيد الحل الآن ومتوسط وقت الحل في الساعة الأخيرة. يعيد getSpendingStats حجم مهامك وإنفاقك لكل ساعة خلال يوم UTC واحد (date بتوقيت unix). يعيد test الجسم الذي يستلمه كما هو.
POST https://unlock-api.com/getQueueStats {"clientKey":"..."} -> {"errorId":0,"waiting":3,"solving":12,"speed":6.4,"total":15}
POST https://unlock-api.com/getSpendingStats {"clientKey":"...","date":1791590400} -> {"errorId":0,"data":[{"dateFrom":...,"volume":120,"money":0.06},...]}
POST https://unlock-api.com/test {"anything":1} -> {"errorId":0,"received":{"anything":1}}قائمة عناوين IP المسموحة
إذا حددت قائمة عناوين IP مسموحة في صفحة الحساب، تحصل الطلبات من عناوين أخرى على الخطأ ERROR_IP_NOT_ALLOWED.
أنواع المهام
لكل نوع اسم بدون بروكسي واسم مع بروكسي (بحذف Proxyless). تُطابق الأسماء بغض النظر عن حالة الأحرف وبالتهجئات التي تستخدمها واجهات API أخرى للحل. مهام البروكسي تحتاج أيضًا إلى proxyType (http أو socks4 أو socks5) وproxyAddress وproxyPort، أو سلسلة بروكسي واحدة مثل http://user:[email protected]:8080. الحقول الاختيارية غير المذكورة هنا تُمرر إلى الحل كما أُرسلت.
reCAPTCHA v2
التفاصيلRecaptchaV2TaskProxylessRecaptchaV2Task
الحقول
websiteURL (مطلوب)websiteKey (مطلوب)
reCAPTCHA v2 Enterprise
التفاصيلRecaptchaV2EnterpriseTaskProxylessRecaptchaV2EnterpriseTask
الحقول
websiteURL (مطلوب)websiteKey (مطلوب)
reCAPTCHA v3
التفاصيلRecaptchaV3TaskProxylessRecaptchaV3Task
الحقول
websiteURL (مطلوب)websiteKey (مطلوب)
Cloudflare Turnstile
التفاصيلTurnstileTaskProxylessTurnstileTask
الحقول
websiteURL (مطلوب)websiteKey (مطلوب)
FunCaptcha (Arkose Labs)
التفاصيلFunCaptchaTaskProxylessFunCaptchaTask
الحقول
websiteURL (مطلوب)websitePublicKey (مطلوب)
Friendly Captcha
التفاصيلFriendlyCaptchaTaskProxylessFriendlyCaptchaTask
الحقول
websiteURL (مطلوب)websiteKey (مطلوب)
Lemin Cropped Captcha
التفاصيلLeminTaskProxylessLeminTask
الحقول
websiteURL (مطلوب)captchaId (مطلوب)divId (مطلوب)
KeyCaptcha
التفاصيلKeyCaptchaTaskProxylessKeyCaptchaTask
الحقول
websiteURL (مطلوب)s_s_c_user_id (مطلوب)s_s_c_session_id (مطلوب)s_s_c_web_server_sign (مطلوب)s_s_c_web_server_sign2 (مطلوب)
Yandex SmartCaptcha
التفاصيلYandexSmartCaptchaTaskProxylessYandexSmartCaptchaTask
الحقول
websiteURL (مطلوب)websiteKey (مطلوب)
الأخطاء
الأسماء نفسها في الصيغتين. الطلبات المرفوضة بخطأ لا تُحتسب عليها رسوم.
| الخطأ | معناه وما يجب فعله |
|---|---|
ERROR_KEY_DOES_NOT_EXIST | المفتاح غير صحيح. انسخه مرة أخرى من صفحة الحساب. (في in.php وres.php: ERROR_WRONG_USER_KEY) |
ERROR_ZERO_BALANCE | الرصيد لا يكفي للمهمة. اشحن رصيدك، ولم يُخصم أي شيء. |
ERROR_NO_SLOT_AVAILABLE | الطلبات كثيرة الآن، فلم تُقبل المهمة. حاول مرة أخرى بعد بضع ثوانٍ، ولم يُخصم أي شيء. |
ERROR_TASK_NOT_SUPPORTED | نوع المهمة غير معروف أو معطل. تحقق من اسم النوع. |
ERROR_BAD_PARAMETERS | حقل مطلوب مفقود أو بصيغة خاطئة. |
ERROR_PAGEURL | قيمة websiteURL أو pageurl مفقودة أو ليست عنوان http(s) كاملًا. |
ERROR_GOOGLEKEY | قيمة googlekey مفقودة في طلب reCAPTCHA عبر in.php. |
ERROR_BAD_PROXY | مهمة البروكسي تحتاج إلى proxyAddress وproxyPort. |
ERROR_ZERO_CAPTCHA_FILESIZE | الصورة مفقودة أو صغيرة جدًا. |
ERROR_TOO_BIG_CAPTCHA_FILESIZE | حجم الصورة أكبر من 100 KB. |
ERROR_IMAGE_TYPE_NOT_SUPPORTED | الصورة ليست بصيغة base64 صالحة. |
ERROR_WRONG_CAPTCHA_ID | لا توجد مهمة بهذا المعرف في حسابك. |
CAPCHA_NOT_READY | في in.php وres.php فقط: المهمة ما زالت قيد التنفيذ. تحقق مرة أخرى بعد 5 ثوانٍ. |
ERROR_CAPTCHA_UNSOLVABLE | تعذر حل المهمة في الوقت المحدد. عاد مبلغها إلى رصيدك. |
ERROR_TOO_MANY_REQUESTS | طلبات كثيرة. خفّف التحقق من النتيجة إلى مرة كل 5 ثوانٍ. |
ERROR_IP_NOT_ALLOWED | جاء الطلب من عنوان IP غير موجود في قائمة الحساب المسموحة. أضف العنوان من صفحة الحساب. |