Базовый адрес: https://api.privateproxy.ru — все запросы POST, тело в JSON.
Порядок работы: зарегистрируйтесь, подтвердите почту, создайте ключ в кабинете, пополните баланс — и отправляйте задания.
Схема простая: отправили задание → получили идентификатор → опрашиваете результат. Деньги списываются только за успешный ответ.
Ключ передаётся в теле запроса полем app_id. Дополнительно поддерживаются
поле key и заголовок X-API-Key — используйте любой удобный.
// любой из трёх вариантов {"app_id": "cpx_ваш_ключ", ...} {"key": "cpx_ваш_ключ", ...} // или заголовком X-API-Key: cpx_ваш_ключ
Ключ показывается полностью только один раз при создании. В базе он хранится в виде хеша, восстановить его нельзя — потеряли, создайте новый.
POST https://api.privateproxy.ru/create
| Поле | Тип | Описание |
|---|---|---|
type | string | Тип задания: SmartCaptcha или TextCaptcha |
app_id | string | Ваш API-ключ |
click | base64 | Изображение поля с иконками. Только для SmartCaptcha |
task | base64 | Полоса-задание (SmartCaptcha) либо картинка с текстом (TextCaptcha) |
curl -X POST https://api.privateproxy.ru/create \ -H 'Content-Type: application/json' \ -d '{"type":"SmartCaptcha","app_id":"cpx_ваш_ключ","click":"iVBORw0K...","task":"iVBORw0K..."}'
Ответ:
{"status": 1, "response": "8f2c1e5a4b9d..."}
response — идентификатор задания, по нему забирается результат.
При ошибке status равен 0, а в response текст ошибки.
POST https://api.privateproxy.ru/result
curl -X POST https://api.privateproxy.ru/result \ -H 'Content-Type: application/json' \ -d '{"id":"8f2c1e5a4b9d...","app_id":"cpx_ваш_ключ"}'
| Ответ | Значение |
|---|---|
{"status":1,"response":"coordinates:x=52.4,y=118.0"} | Готово, вот ответ |
{"status":-1,"response":"CAPCHA_NOT_READY"} | Ещё решается — опросите снова |
{"status":0,"response":"ERROR:..."} | Решить не удалось, деньги не списаны |
Как опрашивать правильно. Первый запрос результата делайте через 1 секунду после создания, дальше — раз в 300–500 мс. Не опрашивайте чаще: это тратит ваш лимит запросов и не ускоряет ответ. Типичное время решения SmartCaptcha — около 100 мс, текстовой — до секунды.
Координаты точек для клика, в том порядке, в котором нужно кликать:
coordinates:x=52.4,y=118.0;x=140.9,y=61.2;x=205.7,y=143.5
Координаты — в пикселях относительно левого верхнего угла присланного изображения поля.
POST https://api.privateproxy.ru/balance с полем app_id.
{"status": 1, "response": "1250.00"} // rubli
| Код | Что решает | Поля | Цена за 1000 |
|---|---|---|---|
SmartCaptcha | Kliknut nuzhnye ikonki na kartinke v zadannom poryadke | click + task | 70 ₽ / 1000 |
TextCaptcha | Raspoznat tekst s kartinki | task | 55 ₽ / 1000 |
| Код | Что означает и что делать |
|---|---|
ERROR_KEY_DOES_NOT_EXIST | Ключ не найден. Проверьте, что передаёте его в app_id без лишних пробелов |
ERROR_IP_BANNED | IP заблокирован. Обычно — следствие множества запросов с неверным ключом. Снимается в кабинете или поддержкой |
ERROR_ZERO_BALANCE | Недостаточно средств, пополните баланс |
ERROR_NO_SLOT_AVAILABLE | Превышен лимит одновременных заданий по ключу |
CAPCHA_NOT_READY | Не ошибка: задание ещё решается |
ERROR:solve_failed | Решить не удалось. Деньги не списываются, отправьте задание заново |
ERROR_KEY_DOES_NOT_EXIST остановите отправку и проверьте ключ, а не повторяйте в цикле.Для каждого ключа в кабинете настраиваются: запросов в минуту, одновременных заданий, потолок расходов в сутки и в месяц. По умолчанию — 600 запросов в минуту и 100 одновременных заданий.
К ключу можно привязать список адресов, с которых разрешены запросы. Поддерживаются одиночные адреса и подсети, IPv4 и IPv6:
192.0.2.10 192.0.2.0/24 2001:db8::10 2001:db8::/48
Если список пуст, запросы принимаются с любого адреса. Настраивается в кабинете на странице ключа.
import base64, time, requests API = "https://api.privateproxy.ru" KEY = "cpx_ваш_ключ" def b64(p): return base64.b64encode(open(p,"rb").read()).decode() r = requests.post(f"{API}/create", json={ "type": "SmartCaptcha", "app_id": KEY, "click": b64("field.png"), "task": b64("strip.png")}).json() if r["status"] != 1: raise SystemExit(r["response"]) tid = r["response"] time.sleep(1) for _ in range(40): a = requests.post(f"{API}/result", json={"id": tid, "app_id": KEY}).json() if a["status"] == 1: print(a["response"]); break if a["status"] == 0: print("не решено:", a["response"]); break time.sleep(0.4)
const fs = require('fs'); const API = 'https://api.privateproxy.ru', KEY = 'cpx_ваш_ключ'; const b64 = p => fs.readFileSync(p).toString('base64'); const post = (u,b) => fetch(API+u,{method:'POST', headers:{'Content-Type':'application/json'},body:JSON.stringify(b)}).then(r=>r.json()); const c = await post('/create',{type:'SmartCaptcha',app_id:KEY, click:b64('field.png'),task:b64('strip.png')}); if (c.status !== 1) throw new Error(c.response); await new Promise(r=>setTimeout(r,1000)); for (let i=0;i<40;i++){ const a = await post('/result',{id:c.response,app_id:KEY}); if (a.status === 1){ console.log(a.response); break; } if (a.status === 0){ console.log('не решено:',a.response); break; } await new Promise(r=>setTimeout(r,400)); }
$api = 'https://api.privateproxy.ru'; $key = 'cpx_ваш_ключ'; function post($url, $data){ $c = curl_init($url); curl_setopt_array($c, [CURLOPT_POST=>1, CURLOPT_RETURNTRANSFER=>1, CURLOPT_HTTPHEADER=>['Content-Type: application/json'], CURLOPT_POSTFIELDS=>json_encode($data)]); return json_decode(curl_exec($c), true); } $r = post("$api/create", ['type'=>'SmartCaptcha', 'app_id'=>$key, 'click'=>base64_encode(file_get_contents('field.png')), 'task'=>base64_encode(file_get_contents('strip.png'))]); $id = $r['response']; sleep(1); for ($i=0; $i<40; $i++){ $a = post("$api/result", ['id'=>$id, 'app_id'=>$key]); if ($a['status'] == 1){ echo $a['response']; break; } if ($a['status'] == 0){ echo 'не решено'; break; } usleep(400000); }
Списываются ли деньги за нерешённые задания? Нет. Тарифицируется только успешный ответ.
Что если ответ неверный? Отправьте жалобу из кабинета в разделе «Задания» — при подтверждении стоимость вернём на баланс.
Сколько ключей можно создать? Сколько нужно. Удобно заводить отдельный ключ на каждый проект — так статистика и лимиты считаются раздельно.
Что будет при исчерпании баланса? Новые задания перестанут приниматься. Уже принятые будут доведены до конца.