API каталога

Те же данные, что на страницах, — файлами JSON. Без ключа и без регистрации. Нужно это ровно для одного: чтобы вы могли посчитать свой бюджет на прокси в своей таблице, а не переписывать числа с экрана.

Адреса

/api/v1/prices.json все цены, которые опубликованы на сайте
69 записей
/api/v1/prices/dc_ipv6.json цены одного типа: IPv6-прокси
3 записи
/api/v1/prices/dc_pool.json цены одного типа: Серверные прокси с ротацией
9 записей
/api/v1/prices/dc_private.json цены одного типа: Серверные прокси (индивидуальные)
8 записей
/api/v1/prices/dc_shared.json цены одного типа: Общие серверные прокси
2 записи
/api/v1/prices/isp_static.json цены одного типа: ISP-прокси (статические резидентские)
9 записей
/api/v1/prices/mob_pool.json цены одного типа: Мобильные прокси из пула
10 записей
/api/v1/prices/mob_port.json цены одного типа: Мобильные прокси (выделенный порт)
3 записи
/api/v1/prices/res_rotating.json цены одного типа: Резидентские прокси
16 записей
/api/v1/prices/res_unlimited.json цены одного типа: Резидентские прокси с безлимитом
1 запись
/api/v1/prices/scraping_api.json цены одного типа: Scraping API
8 записей
/api/v1/types.json справочник типов: единица оплаты, обычный объём, описание
10 записей
/api/v1/providers.json справочник сервисов и признаки, выясненные нами
21 запись
/api/v1/history.json история изменений цены с различением «ход сервиса» и «наша правка»
75 записей
/api/v1/measurements.json наши замеры: доля дошедших, задержка, адреса на выходе
1 запись

Начать проще с index.json: там перечислены все адреса с числом записей и оговорки, без которых числа читаются неверно.

curl -s https://proxyok.com/api/v1/prices/res-rotating.json | jq '.prices[0]'

Путь принимается и с дефисом (res-rotating), и с подчёркиванием (res_rotating), и без .json — как удобнее.

Как выглядит одна цена

{
  "provider": "webshare",
  "type": "dc_private",
  "plan": "Proxy server dedicated",
  "unit": "ip_month",
  "currency": "USD",
  "tiers": [
    {
      "from": 1,
      "price": 1.4
    },
    {
      "from": 15,
      "price": 1.33
    },
    {
      "from": 26,
      "price": 1.26
    }
  ],
  "entry_price": 1.4,
  "min_purchase_usd": 6,
  "period_days": 30,
  "stock": "ok",
  "socks5": true,
  "traffic_expires": null,
  "trust": "api",
  "trust_label": "по API",
  "checked_at": "2026-08-09",
  "source_url": "https://proxy.webshare.io/api/v2/subscription/pricing/",
  "age_days": 0,
  "stale": false
}

Здесь показаны не все поля — у настоящей записи есть ещё список стран, полное покрытие сервиса и даты, после которых цена считается устаревшей.

7 оговорок, без которых числа врут

У каждой цены обязательно стоят checked_at (когда мы её видели) и trust (как получили).
source_url бывает null — это значит «ссылку не записали», а не «источника нет»; цифру без даты не публикуйте ни в каком случае.
null значит «не выясняли», а не «нет».
Признак, которого мы не проверяли, приходит null или отсутствует. Считать его отрицанием нельзя.
age_days и stale посчитаны на generated_at и в файле застывают: файлы пересобираются не по расписанию.
Считайте сами от checked_at — или берите готовые даты stale_at и drop_at, им время не мешает. Пороги — в thresholds.
В истории цен kind различает ход сервиса (provider) и нашу собственную правку записи (fix).
Смешивать их нельзя: во втором случае цену менял не сервис, а мы исправляли себя.
tiers — лестница объёмов: from это порог, с которого действует price.
Итог на нужный объём считается по последней ступени, чей from не превышает объём, но не меньше минимального чека.
countries — четыре страны нашего справочника, по которым мы ведём страницы, а НЕ покрытие сервиса.
Полное покрытие, как его заявляет сам сервис, — в countries_all и countries_total. Оба списка в нижнем регистре. «Страна не выбирается» — это country_optional, а не код.
Признаки в prices.json описывают ТАРИФ, а признаки в providers.json — сервис целиком.
Тариф может не наследовать ни тест, ни протокол кабинета, поэтому одноимённое поле профиля называется service_trial: складывать эти два объекта в один нельзя.

Чего этот API не делает

Что видно в истории цен прямо сейчас

В history.json сейчас 75 точек, и распределение у них такое: 69 — первая цена, которую мы узнали, 6 — наши собственные правки записи, 0 — случаи, когда цену изменил сам сервис.

Ни одного случая, когда сервис поменял цену при нас. Это не значит, что рынок стоит: это значит, что мы наблюдаем его недостаточно долго. Пока история — это история нашей работы, а не рынка, и читать её как рыночную нельзя. Поле kind существует именно для того, чтобы эту разницу нельзя было потерять по дороге.

Условия

Пользуйтесь свободно, ключ не нужен. Просим поставить рядом с числами ссылку на proxyok.com — не из вежливости: по ней читатель проверит дату проверки и уровень доверия, а без них цена значит меньше, чем кажется. Файлы пересобираются вместе с сайтом; частоту не обещаем — смотрите generated_at в самом файле и checked_at у каждой цены. Опрашивать чаще раза в сутки в любом случае незачем.

Поля в v1 могут добавляться, но не будут переименованы или удалены. Несовместимые изменения выйдут отдельным путём /api/v2/.

Цена — это факт, и объявлять на факт права мы не будем. Замеры наши, и ими тоже пользуйтесь: просто напишите, что они наши, и поставьте ссылку — по ней читатель проверит дату и то, сколько было прогонов.