FreeProxy Relay API
HTTP API для изолированного выполнения внешних HTTP/HTTPS-запросов через серверный пул прокси. Отдаёт статус, очищенные заголовки, cookies и тело ответа целевого сайта — в JSON-конверте или прямым потоком байт.
Шлюз никогда не раскрывает клиенту учётные данные прокси (host:port:user:pass) и никогда не отправляет запросы со своего реального IP. Если пул недоступен, сервер возвращает 503.
- Base URL
https://freeproxy.eu.cc/v1- Формат
- JSON, UTF-8 (или сырой поток при
response_mode: "raw") - Ключ
- Заголовок
X-API-Key - Шифрование
- TLS 1.3 + опционально
X25519 + ChaCha20-Poly1305 - Лимит Free
- 30 запросов в минуту, 1 000 запросов и 250 МБ в сутки
Для закрепления одного выходного узла за серией запросов передавайте поле session. Для клиентского софта, где возможен локальный перехват трафика (HTTP Toolkit, Fiddler, mitmproxy), используйте POST /v1/fetch/sealed.
Как устроен поток
Быстрый старт
От выпуска бесплатного ключа до первого запроса через шлюз проходит меньше минуты.
- Получите ключВыпустите Free-ключ в консоли ниже или запросом
POST /v1/keys/free. VIP-ключи с повышенными квотами выдаёт оператор. - Сохраните в окружениеПоложите ключ в переменную
FREEPROXY_KEY— не храните его в исходном коде и репозитории. - Отправьте запросПередайте целевой
urlи опциональный идентификаторsessionвPOST /v1/fetch. - Включите защиту для софтаЕсли код запускается на машинах пользователей, переключитесь на
POST /v1/fetch/sealedс шифрованиемX25519.
Получить ключ и проверить квоты
Бесплатный тариф позволяет мгновенно выпустить до двух ключей в сутки на одну /24 подсеть. Секрет api_key и hmac_secret хранятся на сервере в хэшированном виде и показываются только один раз при создании.
Аутентификация
Защищённые эндпоинты (/v1/fetch, /v1/fetch/sealed, /v1/keys/me) требуют API-ключ в заголовке X-API-Key либо Authorization: Bearer <key>.
Бесплатные ключи имеют префикс fp_free_, выделенные операторские ключи — fp_vip_. При выдаче также возвращается hmac_secret для опциональной криптографической подписи тела запроса.
Ключ только в заголовках. Сервер намеренно не принимает ключ в query-параметре ?key=: URL-строка оседает в логах прокси, истории браузера и заголовке Referer.
Не встраивайте открытый ключ в веб-фронтенд: любой посетитель заберёт его через DevTools. Для распространяемого десктопного софта обязательно включайте Sealed Mode и TLS SPKI Pinning.
Опциональная подпись HMAC-SHA256
Чтобы защитить обычный запрос /v1/fetch от модификации и повторной отправки (replay), передайте три заголовка: X-FP-Timestamp (Unix-время в секундах), X-FP-Nonce (случайная строка 8–128 символов) и X-FP-Signature = HMAC_SHA256(hmac_secret, "{ts}.{nonce}.{sha256_hex(raw_body)}").
Ошибки аутентификации
| HTTP | error.code | Когда |
|---|---|---|
| 401 | MISSING_API_KEY | Заголовок X-API-Key не передан |
| 401 | INVALID_API_KEY | Такого ключа не существует |
| 401 | HMAC_SIGNATURE_MISMATCH | Неверная HMAC-подпись тела запроса |
| 401 | HMAC_REPLAY_DETECTED | Повторное использование X-FP-Nonce или устаревший X-FP-Timestamp |
| 403 | API_KEY_SUSPENDED | Ключ заблокирован оператором или анти-абуз системой |
| 403 | API_KEY_EXPIRED | Истёк срок действия ключа |
Лимиты
Лимит запросов в минуту считается по скользящему окну в 60 секунд (а не с начала календарной минуты). При превышении сервер отвечает 429 RATE_LIMIT_EXCEEDED и заголовком Retry-After — через сколько секунд освободится слот.
Суточные квоты запросов и трафика сбрасываются в 00:00 UTC. Параллельные соединения ограничиваются на уровне активных in-flight запросов ключа.
Сравнение тарифов
| Параметр | Free (fp_free_) | VIP (fp_vip_) |
|---|---|---|
| Запросов в минуту (RPM) | 30 | от 600 (настраивается) |
| Одновременных потоков | 5 | от 50 |
| Запросов в сутки | 1 000 | от 100 000 |
| Трафик в сутки | 250 МБ | от 10 ГБ |
| Макс. размер одного ответа | 2 МБ | 15 МБ |
Заголовки лимита
Каждый авторизованный ответ несёт состояние окна — следите за остатком и не доводите воркеры до 429:
| Заголовок | Значение |
|---|---|
X-RateLimit-Limit | Размер минутного окна ключа (например, 30) |
X-RateLimit-Remaining | Сколько запросов осталось в текущем 60-секундном окне |
X-RateLimit-Reset | Через сколько секунд освободится ближайший слот |
Retry-After | Присутствует в ответах 429 — пауза в секундах перед повтором |
Ошибки
Все ошибки шлюза возвращают JSON с "ok": false и объектом error. Ветвите логику кода по полю error.code, а не по тексту error.message: формулировка может уточняться, машинный код стабилен.
Стабильный машинный код ошибки из таблицы ниже.
Пояснение на английском для логов и отладки.
Идентификатор запроса (также дублируется в заголовке X-FP-Request-Id). Прикладывайте его при обращении в поддержку.
| HTTP | error.code | Причина | Что делать |
|---|---|---|---|
| 400 | SEAL_DECRYPT_FAILED | Конверт /v1/fetch/sealed повреждён или зашифрован чужим ключом | Проверить /v1/crypto/pubkey и соответствие X-API-Key |
| 400 | SEAL_TIMESTAMP_EXPIRED | Расхождение часов клиента и сервера больше 45 секунд | Синхронизировать системное время (NTP) |
| 401 | MISSING_API_KEY / INVALID_API_KEY | Ключ не передан или не найден | Проверить заголовок X-API-Key |
| 403 | PROBE_DOMAIN_BLOCKED / PROBE_PATH_BLOCKED | Запрос к IP-чекеру, вебхуку или /cdn-cgi/trace | Немедленно прекратить запросы к запрещённым целям (начисляются страйки) |
| 403 | DIRECT_IP_FORBIDDEN / FORBIDDEN_PORT | Обращение по прямому IP без домена или к порту кроме 80/443 | Использовать публичное доменное имя на портах 80 или 443 |
| 403 | ACCOUNT_SUSPENDED / ACCESS_SUSPENDED | Ключ и подсеть заблокированы за попытку пробива пула | Обратиться к оператору с request_id |
| 413 | RESPONSE_TOO_LARGE | Ответ целевого сайта превысил лимит тарифа (2 МБ Free / 15 МБ VIP) | Запрашивать меньший ресурс или перейти на VIP |
| 422 | VALIDATION_ERROR | Невалидный JSON или поля запроса не прошли схему | Проверить типы полей по справочнику |
| 429 | RATE_LIMIT_EXCEEDED / CONCURRENCY_LIMIT_EXCEEDED | Превышен RPM или число параллельных потоков | Подождать Retry-After секунд и повторить |
| 429 | DAILY_REQUEST_QUOTA_EXCEEDED / DAILY_BANDWIDTH_QUOTA_EXCEEDED | Исчерпана суточная квота ключа | Дождаться 00:00 UTC или запросить VIP-ключ |
| 502 | TARGET_UNREACHABLE | Целевой хост не принял соединение через шлюз | Повторить с экспоненциальной паузой |
| 503 | NO_UPSTREAM_CAPACITY | В пуле временно нет доступных выходных узлов | Повторить через 5–15 секунд |
| 504 | TARGET_TIMEOUT | Целевой сайт не ответил за отведённый timeout | Увеличить поле timeout (до 45 с) или повторить |
Повторы и таймауты
Шлюз сам делает до 2 внутренних попыток через альтернативные узлы пула при сетевом сбое прокси. Если целевой сайт всё же вернул временную ошибку доставки, клиент на вашей стороне должен уметь безопасно повторить запрос.
Правила надёжного клиента:
- повторяйте только коды шлюза
429(кромеDAILY_*_QUOTA_EXCEEDED),500,502,503,504; - никогда не повторяйте
403: повторные обращения к заблокированным доменам или путям накопят страйки и приведут к автобану ключа и/24подсети; - учитывайте заголовок
Retry-After, если он пришёл в ответе; - задавайте внешний HTTP-таймаут клиента чуть больше поля
timeoutв JSON (например,timeout: 20в теле и35секунд на сокете).
Безопасность и правила фильтрации
Шлюз защищён многоуровневым фильтром TargetGuard и потоковым анализатором PayloadSanitizer. Любая попытка деанонимизировать выходные прокси-узлы или просканировать внутренние сети пресекается автоматически.
Система страйков и мгновенный бан. При накоплении 3 штрафных баллов за 2 часа — либо мгновенно при срабатывании критической ловушки (SSRF, корреляция подсети, Canary-утечка) — ключ и /24 подсеть блокируются на 30 суток без права выпуска нового Free-ключа.
Что запрещено запрашивать через Relay
- IP-чекеры и эхо-сервисы:
ipify.org,ipinfo.io,2ip.ru,whoer.net,httpbin.org,ident.me,ifconfig.meи ещё 130+ диагностических доменов, а также пути/*/cdn-cgi/trace,/myip,/remote_addrна любых сайтах. - Вебхуки, OAST и реверс-туннели:
webhook.site,pipedream.net,interact.sh,oastify.com,ngrok.*,trycloudflare.com, Dynamic DNS и wildcard-сервисы (nip.io,sslip.io). - Прямые IP и нестандартные порты: разрешены только публичные доменные имена по протоколам
http://иhttps://на портах80и443. Каждый шаг301/302/307редиректа заново проходит полную DNS-проверку. - Домены в вашей же подсети: обращение через API к серверу, чей IP лежит в одной
/24подсети с вызывающим клиентом, расценивается как попытка снять выходной IP прокси из собственных логов и блокируется мгновенно.
Очистка заголовков
Из входящего запроса перед отправкой на целевой сайт удаляются X-API-Key, X-Forwarded-*, CF-*, Via и служебные заголовки X-FP-*. Если User-Agent не передан, подставляется актуальный профиль браузера Chrome.
Версии API
Версия фиксируется в префиксе пути: /v1. В пределах v1 могут добавляться новые необязательные поля запросов и ответов, но существующие поля не переименовываются и не меняют тип. Несовместимые изменения выходят под /v2.
Парсите JSON так, чтобы появление новых полей в ответе не вызывало ошибок схемы на стороне вашего клиента.
Объекты Relay
Запрос к шлюзу описывается объектом RelayRequest, а результат в стандартном режиме (response_mode: "json") возвращается в виде RelayResponse.
RelayRequest
Полный публичный http:// или https:// URL целевого ресурса (порты 80 и 443, до 4096 символов).
HTTP-метод целевого запроса. По умолчанию GET.
GETPOSTPUTPATCHDELETEHEADOPTIONSПользовательские HTTP-заголовки (до 64 штук). Служебные и прокси-заголовки автоматически отфильтровываются.
Cookies, отправляемые на целевой домен.
Дополнительные query-параметры, безопасно дописываемые к url.
JSON-тело запроса. Если заголовок Content-Type не передан, выставляется application/json.
Сырое тело запроса (до 4 МБ) в кодировке utf-8 (по умолчанию) или base64 для бинарных данных.
Идентификатор sticky-сессии (до 64 символов a-zA-Z0-9_-.). Запросы с одинаковым session маршрутизируются через один и тот же здоровый выходной узел.
ISO-код страны прокси (например, us, de, gb), если в пуле доступны гео-теги.
Таймаут ожидания целевого сайта в секундах (от 1 до 45, по умолчанию 20).
Следовать за HTTP-редиректами с валидацией каждого перехода. По умолчанию true, до 5 переходов.
json (по умолчанию) возвращает конверт RelayResponse; raw отдаёт HTTP-статус и оригинальные байты целевого ответа напрямую.
jsonrawRelayResponse
HTTP-код, полученный от целевого сайта (даже если там 404 или 500, сам шлюз вернёт 200 с заполненным status_code).
Финальный URL после всех редиректов.
Очищенные заголовки ответа и собранные за цепочку запросов cookies.
Тело ответа. Текстовые ответы приходят в utf-8, бинарные (картинки, архивы, protobuf) автоматически кодируются в base64.
Чистое время выполнения запроса через выходной прокси в миллисекундах.
Служебные метаданные: request_id, redirects, bytes и активный session.
Выполнить запрос
Основной эндпоинт шлюза. Принимает объект RelayRequest, выполняет HTTP/HTTPS-запрос через пул прокси и возвращает конверт RelayResponse (либо сырой поток при response_mode: "raw").
Обратите внимание на разницу статусов: HTTP-статус самого ответа /v1/fetch отражает работу шлюза (200 — запрос доставлен, 429 — лимит, 503 — нет пула), а код ответа целевого сайта лежит внутри JSON в поле status_code.
Заголовки ответа
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-FP-Request-Id, X-FP-Elapsed-Ms.
Ошибки
400, 401, 403, 413, 422, 429, 500, 502, 503, 504. Подробнее в разделе «Ошибки».
Защищённый запрос (Sealed)
Криптографический конверт поверх HTTPS против локальных MITM-снифферов (HTTP Toolkit, Fiddler, Charles, mitmproxy). Даже если пользователь установил свой корневой сертификат в систему, в перехваченном трафике видны только случайные base64url-поля — ни целевой url, ни заголовки, ни тело ответа не читаются.
Поля запроса
Одноразовый эфемерный публичный ключ клиента X25519 (32 байта). Генерируется заново на каждый запрос (Forward Secrecy).
12-байтовый случайный nonce для ChaCha20-Poly1305.
Шифротекст JSON-структуры {"ts": unix_float, "jti": hex_16b, "request": RelayRequest} с привязкой AEAD AAD к байтам X-API-Key.
Ключи шифрования выводятся через HKDF-SHA256(shared_secret, salt = epk || server_pub, info = "freeproxy-seal-v1", len = 64): первые 32 байта — ключ запроса, вторые 32 байта — ключ ответа (AAD ответа = jti). Полная реализация приведена в разделе «Защита софта (Sealed Mode)».
Выпустить Free-ключ
Публичный эндпоинт автоматического выпуска бесплатного ключа. Ограничен лимитом до 2 ключей в сутки на IP / /24 подсеть.
Параметры тела
Произвольная метка клиента (до 48 символов a-zA-Z0-9_-. ). По умолчанию script.
Ошибки
403 FREE_TIER_DISABLED, 403 ACCESS_SUSPENDED, 429 FREE_KEY_QUOTA_REACHED.
Квоты ключа
Возвращает тариф ключа, расход запросов и трафика за текущие сутки UTC, остаток в минутном окне и число активных штрафных баллов безопасности.
Обратите внимание: вызов GET /v1/keys/me проходит через ту же проверку ключа и учитывается в минутном окне RPM, но не расходует суточную квоту Relay-запросов.
Публичный ключ X25519
Публичный эндпоинт, отдающий статический публичный ключ сервера X25519 (в формате base64url) и идентификатор key_id для работы с POST /v1/fetch/sealed.
В продакшн-софте рекомендуется зашить значение public_key в конфигурацию клиента, чтобы исключить лишний сетевой запрос при старте.
Статус шлюза
Публичная сводка готовности шлюза: флаг наличия здоровых выходных узлов relay_capacity_ready, список доступных ISO-стран пула countries_available, активные функции и базовые параметры Free-тарифа.
Свойства данных
Технические детали маршрутизации и обработки ответов, которые важны при написании интеграции.
| Вопрос | Поведение шлюза |
|---|---|
Как работает session? | Хэш SHA-256("sticky:" + session) детерминированно выбирает один и тот же здоровый узел из пула. Если узел ушёл в ошибки, запрос прозрачно переключается на резервный узел. |
| Бинарные файлы в JSON-режиме | Если ответ не декодируется как чистый UTF-8 или содержит нулевые байты, шлюз автоматически ставит "body_encoding": "base64" и отдаёт base64-строку. |
Когда выбирать response_mode: "raw"? | Когда нужно скачать файл или проксировать ответ без накладных расходов на JSON-сериализацию. В режиме raw шлюз возвращает оригинальный Content-Type и HTTP-статус целевого сайта. |
Сжатие gzip / br / zstd | Шлюз распаковывает сжатый ответ целевого сайта на своей стороне, удаляет Content-Encoding и отдаёт готовый читаемый текст или байты. |
Поведение при 301 / 302 у POST | По стандарту браузеров при 301, 302 и 303 метод меняется на GET без тела, а при 307 и 308 исходный метод и тело сохраняются. |
| Квота трафика | Учитывается фактический размер прочитанного тела целевого ответа в байтах (meta.bytes). |
Защита софта (Sealed Mode)
Когда ваш скрипт или десктопное приложение запускается на чужом ПК, пользователь может включить HTTP Toolkit, Fiddler или Proxifier с подменным корневым сертификатом. Справа приведён полный клиент Sealed Mode, который защищает трафик на прикладном уровне.
- Отключите системные прокси ОССоздавайте HTTP-клиент с игнорированием переменных
HTTP_PROXY/HTTPS_PROXY(в Python —trust_env=False). - Получите публичный ключ шлюзаЗапросите
GET /v1/crypto/pubkeyодин раз или зашейте 32-байтовый ключ в константу. - Сгенерируйте эфемерную пару X25519На каждый запрос создавайте новый одноразовый ключ
epk, вычисляйте общий секрет и выводите пару ключейreq_key/resp_keyчерезHKDF-SHA256. - Запечатайте запрос и распечатайте ответЗашифруйте
{ts, jti, request}алгоритмомChaCha20-Poly1305(AAD =api_key), отправьте вPOST /v1/fetch/sealedи расшифруйте ответ с AAD =jti.
Зависимости для примеров
| Язык | Требования |
|---|---|
| Python | Python 3.9+, pip install httpx cryptography |
| Node.js / TS | Node 20+ (встроенный модуль node:crypto, без внешних пакетов) |
| Java | Java 17+ (стандартные X25519 и ChaCha20-Poly1305 в JCE) |
OpenAPI, Postman, Swagger
Спецификация публичных и Relay-эндпоинтов доступна в файле openapi.yaml (OpenAPI 3.0.3). Импортируйте её напрямую по ссылке, чтобы получить готовую коллекцию или сгенерировать типизированный SDK.
Postman и Insomnia
Import → Link → вставьте https://freeproxy.eu.cc/docs/openapi.yaml. На вкладке Authorization укажите тип API Key, имя заголовка X-API-Key.
Генерация клиента
Через OpenAPI Generator можно сгенерировать клиент под любой из 50+ языков одной командой.
Частые вопросы
Почему нельзя проверить выходной IP через ipify.org или httpbin.org?
Чтобы защитить пул прокси от парсинга и перебора, любые диагностические IP-чекеры, эхо-сервисы и /cdn-cgi/trace заблокированы фильтром TargetGuard. Попытки пробива начисляют штрафные страйки. Проверяйте работу шлюза на реальных целевых API или тестовом стенде вроде jsonplaceholder.typicode.com.
Можно ли подключить FreeProxy как обычный http://user:pass@host:port прокси?
Нет. Архитектура шлюза построена по принципу Zero Upstream Exposure: все внешние соединения открывает сам сервер по вашим JSON-инструкциям в POST /v1/fetch. Это гарантирует изоляцию пула, очистку заголовков и поддержку криптографического режима Sealed X25519.
Целевой сайт вернул 404 — какой статус вернёт /v1/fetch?
В стандартном режиме (response_mode: "json") сам эндпоинт /v1/fetch вернёт HTTP 200, а внутри JSON будет "status_code": 404 и тело ответа целевого сайта. Если передан "response_mode": "raw", шлюз пробросит HTTP 404 напрямую.
Как сохранить авторизацию и cookies между несколькими запросами?
Передавайте одинаковую строку session (чтобы запросы шли с одного выходного IP) и прокидывайте полученные в RelayResponse.cookies значения обратно в поле cookies следующего запроса.
Что делать, если я потерял api_key или hmac_secret?
На сервере хранится только SHA-256 хэш ключа, восстановить исходную строку невозможно. Выпустите новый Free-ключ или попросите оператора перевыпустить VIP-ключ.
Как получить VIP-ключ с высокими лимитами?
Свяжитесь с оператором сервиса: для VIP-ключей индивидуально задаются лимиты RPM, потоков, суточного числа запросов и гигабайт трафика.
Поддержка
Выдача VIP-ключей, увеличение лимитов и разбор инцидентов — через оператора сервиса.
Что приложить к обращению
request_idиз тела ошибки или заголовкаX-FP-Request-Id;- префикс ключа
key_prefix(изGET /v1/keys/me) — полный ключ иhmac_secretпересылать не нужно; - время запроса в UTC и целевой домен;
- полученный HTTP-статус и
error.code.
История изменений
| Версия | Дата | Изменения |
|---|---|---|
| 1.0 | 07.11.2026 | Запуск FreeProxy Relay API v1: изолированный POST /v1/fetch (JSON и Raw режимы), криптографический туннель POST /v1/fetch/sealed (X25519 + ChaCha20-Poly1305), автоматическая выдача Free-ключей, заголовки X-RateLimit-*, OpenAPI 3.0 и интерактивный Playground. |