FreeProxy Relay API 1.0
… OpenAPI

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.

Как устроен поток

Схема потока запросов Ваш сервер / бот POST /v1/fetch FreeProxy API TargetGuard + очистка Пул прокси sticky / гео-фильтр Целевой сайт порты 80 / 443

Быстрый старт

От выпуска бесплатного ключа до первого запроса через шлюз проходит меньше минуты.

  1. Получите ключВыпустите Free-ключ в консоли ниже или запросом POST /v1/keys/free. VIP-ключи с повышенными квотами выдаёт оператор.
  2. Сохраните в окружениеПоложите ключ в переменную FREEPROXY_KEY — не храните его в исходном коде и репозитории.
  3. Отправьте запросПередайте целевой url и опциональный идентификатор session в POST /v1/fetch.
  4. Включите защиту для софтаЕсли код запускается на машинах пользователей, переключитесь на POST /v1/fetch/sealed с шифрованием X25519.

Получить ключ и проверить квоты

Бесплатный тариф позволяет мгновенно выпустить до двух ключей в сутки на одну /24 подсеть. Секрет api_key и hmac_secret хранятся на сервере в хэшированном виде и показываются только один раз при создании.

Открыть Playground →

Аутентификация

Защищённые эндпоинты (/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)}").

Ошибки аутентификации

HTTPerror.codeКогда
401MISSING_API_KEYЗаголовок X-API-Key не передан
401INVALID_API_KEYТакого ключа не существует
401HMAC_SIGNATURE_MISMATCHНеверная HMAC-подпись тела запроса
401HMAC_REPLAY_DETECTEDПовторное использование X-FP-Nonce или устаревший X-FP-Timestamp
403API_KEY_SUSPENDEDКлюч заблокирован оператором или анти-абуз системой
403API_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: формулировка может уточняться, машинный код стабилен.

error.codestring

Стабильный машинный код ошибки из таблицы ниже.

error.messagestring

Пояснение на английском для логов и отладки.

error.request_idstring

Идентификатор запроса (также дублируется в заголовке X-FP-Request-Id). Прикладывайте его при обращении в поддержку.

HTTPerror.codeПричинаЧто делать
400SEAL_DECRYPT_FAILEDКонверт /v1/fetch/sealed повреждён или зашифрован чужим ключомПроверить /v1/crypto/pubkey и соответствие X-API-Key
400SEAL_TIMESTAMP_EXPIREDРасхождение часов клиента и сервера больше 45 секундСинхронизировать системное время (NTP)
401MISSING_API_KEY / INVALID_API_KEYКлюч не передан или не найденПроверить заголовок X-API-Key
403PROBE_DOMAIN_BLOCKED / PROBE_PATH_BLOCKEDЗапрос к IP-чекеру, вебхуку или /cdn-cgi/traceНемедленно прекратить запросы к запрещённым целям (начисляются страйки)
403DIRECT_IP_FORBIDDEN / FORBIDDEN_PORTОбращение по прямому IP без домена или к порту кроме 80/443Использовать публичное доменное имя на портах 80 или 443
403ACCOUNT_SUSPENDED / ACCESS_SUSPENDEDКлюч и подсеть заблокированы за попытку пробива пулаОбратиться к оператору с request_id
413RESPONSE_TOO_LARGEОтвет целевого сайта превысил лимит тарифа (2 МБ Free / 15 МБ VIP)Запрашивать меньший ресурс или перейти на VIP
422VALIDATION_ERRORНевалидный JSON или поля запроса не прошли схемуПроверить типы полей по справочнику
429RATE_LIMIT_EXCEEDED / CONCURRENCY_LIMIT_EXCEEDEDПревышен RPM или число параллельных потоковПодождать Retry-After секунд и повторить
429DAILY_REQUEST_QUOTA_EXCEEDED / DAILY_BANDWIDTH_QUOTA_EXCEEDEDИсчерпана суточная квота ключаДождаться 00:00 UTC или запросить VIP-ключ
502TARGET_UNREACHABLEЦелевой хост не принял соединение через шлюзПовторить с экспоненциальной паузой
503NO_UPSTREAM_CAPACITYВ пуле временно нет доступных выходных узловПовторить через 5–15 секунд
504TARGET_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

urlstringобязательный

Полный публичный http:// или https:// URL целевого ресурса (порты 80 и 443, до 4096 символов).

methodstring

HTTP-метод целевого запроса. По умолчанию GET.

GETPOSTPUTPATCHDELETEHEADOPTIONS
headersobject (string → string)

Пользовательские HTTP-заголовки (до 64 штук). Служебные и прокси-заголовки автоматически отфильтровываются.

cookiesobject (string → string)

Cookies, отправляемые на целевой домен.

paramsobject (string → string)

Дополнительные query-параметры, безопасно дописываемые к url.

jsonany

JSON-тело запроса. Если заголовок Content-Type не передан, выставляется application/json.

body / body_encodingstring

Сырое тело запроса (до 4 МБ) в кодировке utf-8 (по умолчанию) или base64 для бинарных данных.

sessionstring

Идентификатор sticky-сессии (до 64 символов a-zA-Z0-9_-.). Запросы с одинаковым session маршрутизируются через один и тот же здоровый выходной узел.

countrystring

ISO-код страны прокси (например, us, de, gb), если в пуле доступны гео-теги.

timeoutnumber

Таймаут ожидания целевого сайта в секундах (от 1 до 45, по умолчанию 20).

follow_redirects / max_redirectsboolean / integer

Следовать за HTTP-редиректами с валидацией каждого перехода. По умолчанию true, до 5 переходов.

response_modestring

json (по умолчанию) возвращает конверт RelayResponse; raw отдаёт HTTP-статус и оригинальные байты целевого ответа напрямую.

jsonraw

RelayResponse

status_codeinteger

HTTP-код, полученный от целевого сайта (даже если там 404 или 500, сам шлюз вернёт 200 с заполненным status_code).

urlstring

Финальный URL после всех редиректов.

headers / cookiesobject

Очищенные заголовки ответа и собранные за цепочку запросов cookies.

body / body_encodingstring

Тело ответа. Текстовые ответы приходят в utf-8, бинарные (картинки, архивы, protobuf) автоматически кодируются в base64.

elapsed_msinteger

Чистое время выполнения запроса через выходной прокси в миллисекундах.

metaobject

Служебные метаданные: request_id, redirects, bytes и активный session.

Выполнить запрос

POST/v1/fetch

Основной эндпоинт шлюза. Принимает объект 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)

POST/v1/fetch/sealed

Криптографический конверт поверх HTTPS против локальных MITM-снифферов (HTTP Toolkit, Fiddler, Charles, mitmproxy). Даже если пользователь установил свой корневой сертификат в систему, в перехваченном трафике видны только случайные base64url-поля — ни целевой url, ни заголовки, ни тело ответа не читаются.

Поля запроса

epkstring, base64urlобязательный

Одноразовый эфемерный публичный ключ клиента X25519 (32 байта). Генерируется заново на каждый запрос (Forward Secrecy).

noncestring, base64urlобязательный

12-байтовый случайный nonce для ChaCha20-Poly1305.

payloadstring, base64urlобязательный

Шифротекст 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-ключ

POST/v1/keys/free

Публичный эндпоинт автоматического выпуска бесплатного ключа. Ограничен лимитом до 2 ключей в сутки на IP / /24 подсеть.

Параметры тела

labelstring

Произвольная метка клиента (до 48 символов a-zA-Z0-9_-. ). По умолчанию script.

Ошибки

403 FREE_TIER_DISABLED, 403 ACCESS_SUSPENDED, 429 FREE_KEY_QUOTA_REACHED.

Квоты ключа

GET/v1/keys/me

Возвращает тариф ключа, расход запросов и трафика за текущие сутки UTC, остаток в минутном окне и число активных штрафных баллов безопасности.

Обратите внимание: вызов GET /v1/keys/me проходит через ту же проверку ключа и учитывается в минутном окне RPM, но не расходует суточную квоту Relay-запросов.

Публичный ключ X25519

GET/v1/crypto/pubkey

Публичный эндпоинт, отдающий статический публичный ключ сервера X25519 (в формате base64url) и идентификатор key_id для работы с POST /v1/fetch/sealed.

В продакшн-софте рекомендуется зашить значение public_key в конфигурацию клиента, чтобы исключить лишний сетевой запрос при старте.

Статус шлюза

GET/v1/status

Публичная сводка готовности шлюза: флаг наличия здоровых выходных узлов 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, который защищает трафик на прикладном уровне.

  1. Отключите системные прокси ОССоздавайте HTTP-клиент с игнорированием переменных HTTP_PROXY / HTTPS_PROXY (в Python — trust_env=False).
  2. Получите публичный ключ шлюзаЗапросите GET /v1/crypto/pubkey один раз или зашейте 32-байтовый ключ в константу.
  3. Сгенерируйте эфемерную пару X25519На каждый запрос создавайте новый одноразовый ключ epk, вычисляйте общий секрет и выводите пару ключей req_key / resp_key через HKDF-SHA256.
  4. Запечатайте запрос и распечатайте ответЗашифруйте {ts, jti, request} алгоритмом ChaCha20-Poly1305 (AAD = api_key), отправьте в POST /v1/fetch/sealed и расшифруйте ответ с AAD = jti.

Зависимости для примеров

ЯзыкТребования
PythonPython 3.9+, pip install httpx cryptography
Node.js / TSNode 20+ (встроенный модуль node:crypto, без внешних пакетов)
JavaJava 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.007.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.