VPNPrice

API цен: документация

Чтобы цены вашего сервиса отображались в каталоге, сделайте на своём сайте один публичный роут, отдающий JSON. Мы опрашиваем его каждый час.

Формат ответа

GET https://your-vpn.example/api/vpnprice
Content-Type: application/json

{
  "month": 299,
  "year": 2490,
  "plans": [
    { "devices": 1, "month": 299, "year": 2490 },
    { "devices": 3, "month": 449, "year": 3690 },
    { "devices": 5, "month": 599, "year": 4990 }
  ]
}
ПолеТипОписание
monthnumberЦена подписки на 1 месяц в рублях (базовый тариф). Опустите, если месячного тарифа нет.
yearnumberПолная цена подписки на 12 месяцев в рублях — не «в месяц при оплате за год». Опустите, если годового тарифа нет.
plansarrayНеобязательно. Тарифы по числу устройств, до 10 строк. Каждая: devices (целое ≥ 1, без повторов), month и/или year. Посетители каталога фильтруют по числу устройств и видят цену нужного тарифа. Если plans есть, топ-уровневые month/year можно не указывать — возьмём из тарифа с наименьшим devices.

Требования

  • Только HTTPS. HTTP-адреса не принимаются.
  • Статус ответа 200, заголовок Content-Type: application/json.
  • Время ответа не более 5 секунд, размер до 64 КБ.
  • Цены — числа (не строки), положительные, в рублях. Допустимы дробные: 299.5.
  • Хотя бы одно из полей month / year должно присутствовать.
  • Если у вас несколько тарифов, передавайте базовый (самый дешёвый полноценный) — тот, который увидит новый пользователь без промокодов.
  • Эндпоинт должен быть доступен без авторизации. Если хотите ограничить доступ — фильтруйте по User-Agent VPNPriceBot/1.0.

Примеры

Только месячный тариф

{ "month": 199 }

Только годовой тариф

{ "year": 1990 }

Только сетка по устройствам

{ "plans": [ { "devices": 1, "month": 199 }, { "devices": 5, "month": 399 } ] }

Node.js / Express

app.get("/api/vpnprice", (req, res) => {
  res.json({
    month: plans.monthly.priceRub,
    year: plans.yearly.priceRub,   // цена за весь год, не за месяц
  });
});

PHP

<?php
header('Content-Type: application/json');
echo json_encode([
  'month' => 299,
  'year'  => 2490,
]);

Как мы обрабатываем цены

  • Каждый успешный опрос сохраняется в историю — она видна на странице сервиса в виде графика.
  • Годовая цена дополнительно показывается в пересчёте «в месяц» (делим на 12), чтобы её было удобно сравнивать с месячной.
  • Если новая цена отличается от предыдущей более чем на 40%, она помечается как подозрительная и не публикуется до проверки модератором. Это защита от ошибок в вашем API.
  • После 3 неудачных опросов подряд сервис получает пометку «цены устарели», а вы — уведомление на email.
  • В кабинете доступен лог последних опросов с текстом ошибок.

Частые ошибки

  • В year передана цена «в месяц». Если годовая цена меньше двух месячных, проверка предупредит вас.
  • Строки вместо чисел: "299" вместо 299.
  • Цены в другой валюте. Конвертируйте в рубли на своей стороне.
  • Редирект на HTTP или на страницу логина.

Проверить свой эндпоинт можно кнопкой «Проверить API» в кабинете на шаге 3 — она покажет распознанные значения и предупреждения.