# API управления подпиской

# Сквозная авторизация на партнерском портале ООО “СкайДНС”

##### Для кого эта документация

Документация написана для партнеров ООО "СкайДНС". Описывает механизм создания ссылки на партнёрский портал, для обеспечения прозрачной авторизации пользователей.

##### Принцип действия

Принцип основан на безопасной передаче данных через небезопасную среду, проще говоря с помощью криптографической подписи.

Рассмотрим на примере: Допустим есть партнер "Рога и Копыта", который предоставляет услуги доступа в интернет. Есть кабинет партнера, через который клиенты партнера управляют услугами. Есть кабинет партнерского портала, через который пользователь может управлять сервисом ООО "СкайДНС". Требуется организовать бесшовную авторизацию на партнерском портале из кабинета партнера для его клиентов.

Для этого с помощью ключей доступа формируется подписанный URL, ведущий на партнерский портал. После перехода по URL пользователь авторизуется без ввода пароля. При этом, если неавторизованный пользователь попадает на партнерский портал, он перенаправляется на кабинет партнера для получения ссылки для авторизации.

##### Требования

1. Ключи доступа к API ООО "СкайДНС" и доменное имя портала. Ключи и доменное имя можно получить связавшись с отделом продаж;
2. Передать в ООО "СкайДНС" URL, где неавторизованный пользователь может получить ссылку для авторизации на партнерском портале;
3. Идентификатор пользователя на партнерском портале ООО "СкайДНС", его можно получить при создании пользователя, с помощью Provider Api ООО "СкайДНС";
4. Библиотека для криптографической подписи, см. далее.

Есть готовые реализации библиотеки криптографической подписи:

1. python - в фреймворке Django "django.core.signing";
2. python - библиотека "itsdangerous";
3. php - библиотека "itsdangerous-php";
4. javascript - библиотека "nobi".

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

##### Создание URL

Для создания URL вам потребуется private\_key и доменное имя портала. Далее пример кода для формирования URL. Так же потребуется идентификатор пользователя, для которого мы генерируем ссылку.

Далее следует код на python:

```
from django.utils.crypto import get_random_string
from django.core import signing

key = 'private key'
domain = 'skydns.example'
username = 'user@partner'

data = {'ident': username, 'token': get_random_string()}
signer = signing.Signer(key, salt='skydns')
json = signing.JSONSerializer().dumps(data)
b64 = signing.b64_encode(json)
token = signer.sign(b64)

print 'https://%s/welcome?%s' % (domain, token)
```

Где key это приватный ключ, domain доменное имя портала, username это идентификатор пользователя. Полученный URL можно разместить в месте доступном пользователю.

Данным URL можно воспользоваться только один раз, и в течение некоторого времени, после этого данный токен становится не валидным.

##### Использование URL

Далее полученный URL нужно отобразить пользователю, что бы он перешел по нему на портал.

Так же необходимо передать нам URL, по которому пользователь, не авторизованный на нашем портале, мог бы авторизоваться. Как правило это URL личного кабинета партнера.

##### Пример кода на php

При возможности заменить функцию generateRandomString на криптографически безопасную random\_bytes из модуля [CSPRNG](http://php.net/manual/ru/function.random-bytes.php).

```
<?php
require("itsdangerous.php");

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

$key = "private key";
$domain = "skydns.example";
$username = "user@partner";
$complex = array(
    "ident" => $username,
    "token" => generateRandomString(10)
);
$ser = new ItsDangerous\Signer\Serializer($key);
$c = $ser->dumps($complex);



$url = sprintf("https://%s/welcome?%s", $domain, base64_encode($c));

print $url;
```

# Документация модуля skydns_website.api.subscription (API Подписки)

Набор представлений для методов Subscription API v 1.9.

```
skydns_website.api.subscription.views.activate_user(provider, data)
```

##### Активировать пользователя провайдера.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider-"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя

</td></tr><tr><th>Результат:</th><td>  
</td></tr></tbody></table>

```
skydns_website.api.subscription.views.add_ip(provider,user,profile,data)
```

##### Метод добавляет один или несколько статических адресов без замены.

Если при этом адрес находится на другом профиле этого же пользователя, то происходит его перепривязка к указанному профилю. Если адрес привязан к профилю другого пользователя, то выдается ошибка для этого или нескольких адресов. Добавление других адресов в наборе происходит без ошибки.

Параметр comment который будет применен ко всем ip

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--0"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя
- **ip** - один или несколько IP адресов

</td></tr></tbody></table>

Необязательные параметры:

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-profile--"><tbody><tr><th>Параметры:</th><td>- **profile** - числовой id профиля
- **comment** - комментарий к ip

</td></tr><tr><th>Результат:</th><td>  
</td></tr></tbody></table>

```
skydns_website.api.subscription.views.add_vpn(provider,data)
```

##### Метод пытается создать сертификат vpn-соединения.

Возможные ошибки:

- при попытке создать для пользователя впн-соединение с именем уже использующимся в его впн-соединениях
- при попытке создать впн-соединений больше определённого для пользователя планфичей vpn
- при попытке создать соединение на несуществующий или принадлежащий другому пользователю профиль(по profile\_id)
- при попытке реселлера создать соединение не своему пользователю

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--1"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя
- **name** - название vpn
- **profile\_id** - идентификатор профиля пользователя

</td></tr><tr><th>Результат:</th><td>{‘ovpn’: vpn.ovpn()}

</td></tr></tbody></table>

```
skydns_website.api.subscription.views.clear_ip(provider,data)
```

##### Метод очищает все адреса привязанные к профилю.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--2"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя
- **profile** - числовой id профиля

</td></tr><tr><th>Результат:</th><td>  
</td></tr></tbody></table>

```
skydns_website.api.subscription.views.clear_vpn_for_profile(provider,data)
```

##### Метод удаляет все vpn-соединения для профиля пользователя

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--3"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **profile\_id** - идентификатор профиля пользователя

</td></tr><tr><th>Результат:</th><td>  
</td></tr></tbody></table>

```
skydns_website.api.subscription.views.clear_vpn_for_user(provider,data>)
```

##### Метод удаляет все vpn соединения пользователя

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--4"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - логин пользователя, для которого нужно удалить vpn соединения

</td></tr><tr><th>Результат:</th><td>  
</td></tr></tbody></table>

```
skydns_website.api.subscription.views.create_profile(provider,data)
```

##### Метод создает профиль пользователю.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--5"><tbody><tr><th>Параметры:</th><td>- **provider** - провайдер
- **ident** - логин пользователя
- **name** - имя профиля
- **tls** - использовать ли TLS
- **blockpage\_id** - id страницы блокировки

</td></tr></tbody></table>

```
skydns_website.api.subscription.views.deactivate_user(provider,data)
```

##### Деактивировать пользователя провайдера.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--6"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя

</td></tr><tr><th>Результат:</th><td>  
</td></tr></tbody></table>

```
skydns_website.api.subscription.views.get_active_users(provider,data)
```

##### Метод возвращает список активных пользователей реселлера и их тарифы.

<table id="bkmrk-%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%3A-%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D0%B0%D0%BA"><tbody><tr><th>Результат:</th><td>список активных пользователей:</td></tr></tbody></table>

```
[
{‘username’: ‘username1’, ‘plan_name’: ‘plan name’}, {‘username’: ‘username2’, ‘plan_name’: ‘plan name’}, ... 
]
```

```
skydns_website.api.subscription.views.get_activity(provider,data)
```

Информация об активности пользователя за определенную дату. В зависимости от настроек реселлера возвращается старая статистика или аналитика.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--7"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя, для которого необходимо получить информацию.

</td></tr></tbody></table>

Необязательные параметры:

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-date---%D0%B4%D0%B0"><tbody><tr><th>Параметры:</th><td>- **date** - дата, за которую необходимо получить отчет о действиях пользователя в формате YYYY-MM-DD.
- **profile\_id** - идентификатор профиля пользователя, для которого запрашивается отчет

</td></tr><tr><th>Результат:</th><td>`{“requests”: “2600”, “blocks”: “581”}`</td></tr></tbody></table>

```
skydns_website.api.subscription.views.get_activity_report(provider,data)
```

##### Отчет об активности пользователя за определенный период времени.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--8"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя, для которого необходимо получить информацию.
- **start** - дата начала периода для получения статистики в формате YYYY-MM-DD.
- **end** - дата окончания периода для получения статистики в формате YYYY-MM-DD.

</td></tr></tbody></table>

Необязательный параметр: :param profile\_id: идентификатор профиля пользователя, для которого запрашивается отчет

<table id="bkmrk-%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%3A-%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C-%D0%B2"><tbody><tr><th>Результат:</th><td>словарь вида:</td></tr></tbody></table>

```
{
   “labels”: [
      “2016-06-29 14:00:00”, “2016-06-29 15:00:00”,

   ], “datasets”: [
      {“label”: “Requests”, “data”: [375, 275]}, {“label”: “Blocks”, “data”: [13, 0]}
   ]
}
```

```
skydns_website.api.subscription.views.get_category_report(provider,data)
```

##### Отчет по категориям пользователя за определенный период времени.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--9"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя, для которого необходимо получить информацию.
- **start** - дата начала периода для получения статистики в формате YYYY-MM-DD.
- **end** - дата окончания периода для получения статистики в формате YYYY-MM-DD.

</td></tr></tbody></table>

Необязательный параметр: :param profile\_id: идентификатор профиля пользователя, для которого запрашивается отчет

<table id="bkmrk-%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%3A-%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C-%D0%B2-0"><tbody><tr><th>Результат:</th><td>словарь вида:</td></tr></tbody></table>

```
{
“Movies & Video”: “5”, “File Storage”: “2”, “Home & Family”: “3”
}
```

```
skydns_website.api.subscription.views.get_daily_stat(provider,data)
```

##### Возвращает реселлеру статистику за день для указанного пользователя

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--10"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **date** - день, за который требуется статистика
- **ident** - пользователь, чья статистика требуется

</td></tr></tbody></table>

Необязательные параметры:

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-email_to-"><tbody><tr><th>Параметры:</th><td>- **email\_to** - адрес, на который необходимо отправить ссылку со статистикой
- **profile\_id** - id профиля пользователя для которого запрашивается статистика

</td></tr><tr><th colspan="2">Return file\_url:</th></tr><tr><td>  
</td><td>ссылка на файл, содержащий статистику

</td></tr></tbody></table>

Отчет содержит следующие столбцы: “Timestamp”, “Domain name”, “Visits”, “Blocks”, “Categories”, “Profile”, “Username”, “User’s timestamp”.

```
skydns_website.api.subscription.views.get_list_activity_report(provider,data)
```

##### Отчет об активности пользователя за определенный период времени.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--11"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя, для которого необходимо получить информацию (в запросе может быть несколько).
- **start** - дата начала периода для получения статистики в формате YYYY-MM-DD.
- **end** - дата окончания периода для получения статистики в формате YYYY-MM-DD.

</td></tr><tr><th>Результат:</th><td>словарь вида:</td></tr></tbody></table>

```
{
   “2019-08-01”: {
      “username”: {
         “visits”: 262972530, “blocks”: 567080
      },....
   },....
}
```

```
skydns_website.api.subscription.views.get_popular_report(provider,data)
```

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

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--12"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя, для которого необходимо получить информацию.
- **start** - дата начала периода для получения статистики в формате YYYY-MM-DD.
- **end** - дата окончания периода для получения статистики в формате YYYY-MM-DD.

</td></tr></tbody></table>

Необязательный параметр: :param profile\_id: идентификатор профиля пользователя, для которого запрашивается отчет

<table id="bkmrk-%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%3A-%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C-%D0%B2-1"><tbody><tr><th>Результат:</th><td>словарь вида:</td></tr></tbody></table>

```
{
   “labels”: [“example.com”, “google.com”, “asdfg.com”], “datasets”: [

      {“label”: “Requests”, “data”: [630, 474, 290]}, {“label”: “NXdomain”, “data”: [0, 0, 290]}, 
      {“label”: “Blocks”, “data”: [630, 0, 0]}

   ]

}
```

```
skydns_website.api.subscription.views.get_vpn_list(provider,data)
```

##### Метод для получения списка vpn соединений пользователя

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--13"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - логин пользователя, для которого нужно вернуть список vpn соединений

</td></tr><tr><th>Результат:</th><td>список vpn соединений пользователя

</td></tr></tbody></table>

```
skydns_website.api.subscription.views.list_ip(provider,data)
```

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--14"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя

</td></tr></tbody></table>

Необязательный параметр: :param profile: числовой id профиля

<table id="bkmrk-%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%3A-%D0%B2%D1%81%D0%B5-ip-%D0%B0%D0%B4"><tbody><tr><th>Результат:</th><td>все IP адреса привязанные к профилю</td></tr></tbody></table>

```
skydns_website.api.subscription.views.method_not_found(*args,**kwargs)
```

##### Метод-пустышка-заглушка.

Нужен, чтобы, согласно спецификации jsonrpc, отдавать удобочитаемую ошибку. Ответ полностью соответствует спецификации: [https://www.jsonrpc.org/specification](https://www.jsonrpc.org/specification).

```
skydns_website.api.subscription.views.profiles(provider,data)
```

##### Метод возвращает список активных профилей пользователя.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--15"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - логин пользователя, для которого нужно получить писок профилей

</td></tr><tr><th>Return dict:</th><td>список профилей в формате как пример ниже ```
{
   70749: u’Основной’, 93773: u’ДхтСкий’,
}
```

</td></tr></tbody></table>

```
skydns_website.api.subscription.views.prolongate(provider,data)
```

Включение и изменение платного тарифа для пользователя. Этот метод всегда должен вызываться после метода subscribe для включения услуги пользователю.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--16"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя

</td></tr></tbody></table>

Необязательный параметр: :param plan: код тарифного плана

<table id="bkmrk-%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%3A"><tbody><tr><th>Результат:</th><td>  
</td></tr></tbody></table>

```
skydns_website.api.subscription.views.remove_ip(provider,data)
```

##### Удаление IP адреса пользователя.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider--17"><tbody><tr><th>Параметры:</th><td>- **provider** - параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** - login пользователя
- **ip** - IP адрес пользователя

</td></tr><tr><th>Результат:</th><td>  
</td></tr></tbody></table>

```
skydns_website.api.subscription.views.remove_vpn(provider, data)
```

##### Метод для удаления vpn соединения пользователя

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider
- **id** – id vpn соединения

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">  
</td></tr></tbody></table>

```
send_monthly_stat(provider, data)
```

##### Отправка статистики за месяц пользователю по электронной почте.

<table class="docutils field-list" frame="void" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0-0" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** – login пользователя,
- **year** – год в формате YYYY,
- **month** – месяц в формате MM, за который необходимо сформировать отчет,

</td></tr></tbody></table>

Необязательный параметр: :param profile\_id: идентификатор профиля пользователя, для которого запрашивается статистика.

Отчет содержит следующие столбцы: “Timestamp”, “Domain name”, “Visits”, “Blocks”, “Profile”, “Categories”.

```
skydns_website.api.subscription.views.subscribe(<em>provider</em>, data)
```

##### Регистрация пользователя в системе с переданными реквизитами и установка тарифа по умолчанию.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0-1"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider
- **password** – пароль пользователя

</td></tr></tbody></table>

Необязательные параметры:

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-login%C2%A0%E2%80%93-l"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **login** – login пользователя
- **email** – адрес электронной почты пользователя
- **customer** –

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body"></td></tr></tbody></table>

```
skydns_website.api.subscription.views.subscribe_plans(provider, data)
```

##### Метод возвращает список доступных тарифов, назначаемых при создании/изменении карточки пользователя.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0-2"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider</td></tr></tbody></table>

```
skydns_website.api.subscription.views.subscription_info(provider, data)
```

##### Информация о подписке. На текущий момент возвращает наступила ли дата окончания подписки.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0-3"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** – login пользователя

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">{‘date\_end’: true|false}

</td></tr></tbody></table>

```
skydns_website.api.subscription.views.unsubscribe(provider, data)
```

##### Отключение пользователя. Пользователь переключается на бесплатный тариф.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0-4"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** – login пользователя

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body"></td></tr></tbody></table>

```
skydns_website.api.subscription.views.update_email(provider, data)
```

##### Изменение email пользователя для восстановления пароля и информационных сообщений.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0-5"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** – login пользователя
- **email** – новый email пользователя

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body"></td></tr></tbody></table>

```
skydns_website.api.subscription.views.update_ip(provider, data)
```

##### Создать или обновить динамический IP адрес пользователя и привязать его к необходимому профилю фильтрации.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0-6"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** – login пользователя
- **ip** – новый динамический IP адрес пользователя

</td></tr></tbody></table>

Необязательные параметры:

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-hostname%C2%A0"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **hostname** – для привязки ip к hostname
- **profile** – числовой id профиля к которому необходимо привязать IP адрес

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body"></td></tr></tbody></table>

```
skydns_website.api.subscription.views.update_nat(provider, data)
```

##### Метод для добавления или обновления привязки профиля пользователя реселлера к одному из NAT DNS

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-profile_i"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile\_id** – id профиля пользователя.
- **address** – IP адрес нашего DNS(anycast-address).

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

```
skydns_website.api.subscription.views.update_password(provider, data)
```

##### Обновление пароля пользователя.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0-7"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider
- **ident** – login пользователя
- **password** – новый пароль пользователя

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body"></td></tr></tbody></table>

```
skydns_website.api.subscription.views.update_profile(provider, data)
```

##### Метод для изменения параметров профиля пользователя реселлера

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-provider%C2%A0-8"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **provider** – параметр нормализуется из ApiKey декоратором authenticate\_provider
- **profile\_id** – id профиля пользователя

</td></tr></tbody></table>

Необязательные параметры:

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-name%C2%A0%E2%80%93-%D0%BD%D0%BE"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **name** – новое имя профиля пользователя
- **tls** – булево значение для установки профилю, будет ли использоваться TLS.

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">{‘id’: profile\_id, ‘name’: profile\_name, ‘tls’: true|false}

</td></tr></tbody></table>

# Документация модуля skydns_website.api.application (API Агентов)

#### Доступные методы API

Модуль хранения представлений JSON-RPC API. Используется агентами.

Curl запросы для тестирования выглядит так:

```
curl -X POST http://localhost:8000/api/json/v2 -L –user user:password > -d ‘{“id”:0, “jsonrpc”:”2.0”,”method”:”renameProfile”,”params”:[1234, “abcd”]}’
```

В простейшем случае связку кредитов можно использовать такую:

```
plantest-premium@skydns.ru:plantest
```

```
skydns_website.api.application.views.add_domain(<em>request</em>, <em>profile</em>, <em>choice</em>, <em>domain</em>, <em>ip=None</em>, <em>comment=''</em>)
```

##### JSONRPC Method: addDomain

Добавить домен.

<table class="docutils field-list" frame="void" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-profile%C2%A0%E2%80%93" rules="none" style="width: 79.0123%; height: 207.45px;"><colgroup><col class="field-name" style="width: 18.125%;"></col><col class="field-body" style="width: 81.7188%;"></col></colgroup><tbody valign="top"><tr class="field-odd field" style="height: 137.05px;"><th class="field-name" style="height: 137.05px;">Параметры:</th><td class="field-body" style="height: 137.05px;">- **profile** – профиль пользователя
- **choice** – тип домена
- **domain** – домен
- **ip** – IP адрес (если передать IP, то будет добавлен не домен, а алиас)
- **comment** – комментарий к домену

</td></tr><tr class="field-even field" style="height: 35.2px;"><th class="field-name" style="height: 35.2px;">Результат:</th><td class="field-body" style="height: 35.2px;">id добавленного домена.

</td></tr><tr class="field-odd field" style="height: 35.2px;"><th class="field-name" style="height: 35.2px;">Тип результата:</th><td class="field-body" style="height: 35.2px;">int

</td></tr></tbody></table>

```
skydns_website.api.application.views.add_profile(<em>request</em>, <em>name</em>)
```

##### JSONRPC Method: addProfile

Метод создает профиль и возвращает словарь с данными о профиле.

<table class="docutils field-list" frame="void" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-name%C2%A0%E2%80%93-%D0%B8%D0%BC" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**name** – имя создаваемого профиля</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">данные созданного профиля в формате:

```
{

‘id’: id профиля, 
‘default’: является ли профиль профилем по умолчанию, 
‘token’: токен, 
‘name’: название профиля, 
‘white_list_only’: включена ли фильтрация только по белому списку, 
‘is_schedule_enabled’: включено ли расписание, 
‘safe_search_enabled’: статус безопасного поиска, 
‘safe_youtube_enabled’: статус фильтрации YouTube (для API v2), 
‘block_unknown_enabled’: статус фильтрации неизвестных сайтов (для API v2)

}
```

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">dict</td></tr></tbody></table>

```
skydns_website.api.application.views.categories(<em>request</em>, <em>language='en'</em>)
```

##### JSONRPC Method: categories

Получить список сгруппированных категорий.

<table class="docutils field-list" frame="void" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-language%C2%A0" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**language** – язык выдачи</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">список сгруппированных категорий в формате:

```
[
   {
      “title”: “group1”, “items”: [
         {
            “title”: “item1”, “id”: 1
      ]

]
```

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list</td></tr></tbody></table>

```
skydns_website.api.application.views.change_schedule(request, profile, segments)
```

**JSONRPC Method: setSchedule**

Установить расписание фильтрации.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-profile%C2%A0%E2%80%93-0"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **segments** – список сегментов вида: \[\[&lt;offset1&gt;, &lt;true|false&gt;\], \[&lt;offset2&gt;, &lt;true|false&gt;\]\]

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">\[True\]

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list

</td></tr></tbody></table>

```
skydns_website.api.application.views.clear_domains(request, profile, choice )
```

**JSONRPC Method: clearDomains**

Удалить все домены определенного типа у профиля.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B%3A-profile%C2%A0%E2%80%93-1"><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **choice** – тип домена

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

<dl class="function" id="bkmrk-skydns_website.api.a-4"><dt id="bkmrk-skydns_website.api.a-50">`skydns_website.api.application.views.``domains`<span class="sig-paren">(</span>*request*, *profile*, *choice*<span class="sig-paren">)</span></dt><dd>**JSONRPC Method: domains**

Получить список доменов определенного типа для профиля.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **choice** – тип домена (‘black’, ‘white’ или ‘alias’)

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">для запроса чёрных или белых доменов - список словарей в формате:

```
{

“domain”: домен, “id”: id домена

]
```

для запроса алиасов - список словарей в формате:

```
[
{
“domain”: домен, “id”: id домена, “ip”: ip-адрес

]
```

</td></tr></tbody></table>

<dl class="docutils"></dl><dl class="docutils"><dt><table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list</td></tr></tbody></table>

</dt></dl></dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-5"><dt id="bkmrk-skydns_website.api.a-51">```
skydns_website.api.application.views.enable_schedule(request, profile, flag)
```

</dt><dd>**JSONRPC Method: setScheduleEnabled**

Включить/выключить расписание для профиля.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **flag** – флаг включить/выключить

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">flag

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">bool

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-6"><dt id="bkmrk-skydns_website.api.a-52">```
skydns_website.api.application.views.feedback(request, title, message)
```

</dt><dd>**JSONRPC Method: feedback**

Отправить сообщение обратной связи пользователя.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **title** – заголовок сообщения для отправки
- **message** – сообщение для отправки

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-7"><dt id="bkmrk-skydns_website.api.a-53">```
skydns_website.api.application.views.get_advertising(request)
```

</dt><dd>**JSONRPC Method: getAdvertising**

Получить информацию об акции.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">\[&lt;strAdvUrl&gt;, &lt;strImageUrl&gt;\]</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">list</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-8"><dt id="bkmrk-skydns_website.api.a-54">```
skydns_website.api.application.views.get_agent_profile(request, uid, hostname, version, os_info, address)
```

</dt><dd>**JSONRPC Method: getProfile**

Возвращает необходимые настройки (токен, UID) для работы агентского приложения. Если передан UID - метод вернёт информацию об уже существующем профиле с этим UID. Если UID пуст, но переданы все остальные параметры - будет создан новый профиль.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **uid** – uid
- **hostname** – имя хоста
- **version** – версия
- **os\_info** – информация
- **address** – IP адрес

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">список с данными профиля агента: \[uid, token, profile\_id\]

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-9"><dt id="bkmrk-skydns_website.api.a-55">```
skydns_website.api.application.views.get_categories_daily_stat(request, profile, lang='en', categories_list=None)
```

</dt><dd>**JSONRPC Method: getCategoriesDailyStats**

Получить статистику по категориям за сутки для нужного профиля.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **lang** – язык выдачи
- **categories\_list** – список идентификаторов категорий. Если его нет, то будет получена статистика блокировок по всем категориям для профиля пользователя

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">словарь формата: {

```
<category_name>: <value> ...

}
```

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">dict

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-10"><dt id="bkmrk-skydns_website.api.a-56">```
skydns_website.api.application.views.get_filtering_status(request)
```

</dt><dd>**JSONRPC Method: getFilteringStatus**

Получить состояние фильтрации пользователя. :return: &lt;состояние фильтрации&gt; :rtype: bool

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-11"><dt id="bkmrk-skydns_website.api.a-57">```
skydns_website.api.application.views.get_limited_agent_profile(request, uid, hostname, version, os_info, address)
```

</dt><dd>**JSONRPC Method: getLimitedProfile**

Это модификация метода get\_agent\_profile (getProfile). Этот метод проверяет, сколько уже выдано токенов пользователю (мобильных или десктопных Linux), и если это число превышает максимум (ПФ max\_mobile\_agents и max\_desktop\_agents соответственно), отдаёт фейловые токены (‘’, 9999999999, &lt;profile\_id&gt;) Если запрос не мобильного или десктопного Linux агента, токены генерируются без условий. Если передан UID - метод вернёт информацию об уже существующем профиле с этим UID. Если UID пуст, но переданы все остальные параметры - будет создан новый профиль.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **uid** – uid
- **hostname** – имя хоста
- **version** – версия
- **os\_info** – информация
- **address** – IP адрес

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">список с данными профиля агента: \[uid, token, profile\_id\]

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-12"><dt id="bkmrk-skydns_website.api.a-58">```
skydns_website.api.application.views.get_linux_supporting(request, tag=None, version=None)
```

</dt><dd>**JSONRPC Method: getLinuxSupporting**

Получить версии Linux-агента: минимальную поддерживаемую (подлежащую принудительному обновлению) и текущую.

<table class="docutils field-list" frame="void" rules="none" style="width: 262.963%;"><colgroup><col class="field-name" style="width: 15.6917%;"></col><col class="field-body" style="width: 84.2836%;"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **tag** – тег для получения версий (по умолчанию - самая новая без разбора версии ОС)
- **version** – текущая версия установленного агента

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">словарь вида:

```
{

‘minimalSupported’: <минимально поддерживаемая версия (целое неотрицательное число)>, ‘current’: <текущая версия мобильного агента (целое неотрицательное число)>, ‘url’: <url до пакета>, ‘checksum’: <контрольная сумма пакета>, ‘announces’: анонсы версий, от version до последней, если version не указан, то все

[
{

‘version’: <номер версии> ‘announce’: <анонс для этой версии>

]

}
```

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">dict

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-13"><dt id="bkmrk-skydns_website.api.a-59">```
skydns_website.api.application.views.get_plans_list(request, mobile=False)
```

</dt><dd>**JSONRPC Method: getPlans**

Получить список тарифных планов.

<table class="docutils field-list" frame="void" rules="none" style="width: 232.716%;"><colgroup><col class="field-name" style="width: 20.2725%;"></col><col class="field-body" style="width: 79.7027%;"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**mobile** – True - выдавать только мобильные планы, False - все</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">список тарифов в формате: ```
[
{
‘code’: код тарифа, ‘name’: название тарифа, ‘price’: стоимость тарифа, ‘trialPeriod’: сколько дней триального периода на тарифе, ‘period’: на сколько месяцев покупается тариф, ‘isMobile’: является ли тариф мобильным, ‘description’: URL страницы сайта с описанием тарифа

]
```

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-14"><dt id="bkmrk-skydns_website.api.a-60">```
skydns_website.api.application.views.get_popular_report(request, start, end, profile_id=None)
```

</dt><dd>**JSONRPC Method: getPopularReport**

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

<table class="docutils field-list" frame="void" rules="none" style="width: 174.815%;"><colgroup><col class="field-name" style="width: 13.0944%;"></col><col class="field-body" style="width: 86.8809%;"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **start** – дата начала периода для получения статистики в формате YYYY-MM-DD
- **end** – дата окончания периода для получения статистики в формате YYYY-MM-DD
- **profile\_id** – id профиля. Если не задан, будет создан отчёт по всем профилям пользователя

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">словарь вида:

```
{

“labels”: [“example.com”, “google.com”, “asdfg.com”], “datasets”: [

{“label”: “Requests”, “data”: [630, 474, 290]}, {“label”: “NXdomain”, “data”: [0, 0, 290]}, {“label”: “Blocks”, “data”: [630, 0, 0]}

]

}
```

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-15"><dt id="bkmrk-skydns_website.api.a-61">```
skydns_website.api.application.views.get_ssl_certificate(request, version=1)
```

</dt><dd>**JSONRPC Method: getSSLCertificate**

Получить ссылку на корневой SSL-сертификат СкайДНС.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">&lt;прямая ссылка до сертификата&gt;</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">str</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-16"><dt id="bkmrk-skydns_website.api.a-62">```
skydns_website.api.application.views.get_ssl_certificate_data_v2(request, version=1)
```

</dt><dd>Получить ссылки на скачивание SSL-сертификатов СкайДНС.

```
 :return: {

“certs”: [
“cert/url”, “cert/url”
], “expires”: “YYYY-MM-DDTHH:MM:SS”

} :rtype: dict curl test request: curl –location –request POST ‘https://skynds.ru/api/json/v2‘ –header ‘Content-Type: application/json’ –data-raw ‘{

“id”: 0, “jsonrpc”: “2.0”, “method”: “getSSLCertificatesDataV2”, “params”: [“3”]
}’

>{
“id”:0,”jsonrpc”:”2.0”, “result”:{

“expires”:”2028-01-19T00:00:00”, “certs”:[

“https://www.skynds.ru/userfiles/certs/skydns_iss.crt”, “https://www.skynds.ru/userfiles/certs/skydns_root.crt“
]

}

}
```

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-17"><dt id="bkmrk-skydns_website.api.a-63">```
skydns_website.api.application.views.get_user_plan_info(request)
```

</dt><dd>**JSONRPC Method: getPlan**

Получить информацию о тарифе пользователя.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">информация о тарифе в формате: { <div>‘name’: название плана, ‘expired’: количество дней до истечения оплаченного периода, ‘isMobile’: поддерживает ли тариф мобильные устройства (true | false)</div>}

</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">dict</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-18"><dt id="bkmrk-skydns_website.api.a-64">```
skydns_website.api.application.views.get_version(request, tag=None)
```

</dt><dd>**JSONRPC Method: getAPCVersion**

Получить версии мобильного приложения.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**tag** – тег для получения версий, по умолчанию ‘default’</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">словарь вида: { <div>‘minimalSupported’: &lt;минимально поддерживаемая версия (целое неотрицательное число)&gt;, ‘current’: &lt;текущая версия мобильного агента (целое неотрицательное число)&gt;</div>}

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">dict</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-19"><dt id="bkmrk-skydns_website.api.a-65">```
skydns_website.api.application.views.intentional_crash(request)
```

</dt><dd>**JSONRPC Method: intentionalCrash**

Специальный метод, всегда выдающий JsonRpcRuntimeError.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">None</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-20"><dt id="bkmrk-skydns_website.api.a-66">```
skydns_website.api.application.views.multi_schedule(request, profile)
```

</dt><dd>**JSONRPC Method: multiSchedule**

Получить расписание фильтрации.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**profile** – профиль пользователя</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">расписание фильтрации в формате: ```
[
[<offset1>, <True|False>], [<offset2>, <True|False>], ...

]
```

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-21"><dt id="bkmrk-skydns_website.api.a-67">```
skydns_website.api.application.views.my_ip(request)
```

</dt><dd>**JSONRPC Method: myip**

Получение текущего IP адреса клиента.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">IP адрес клиента</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">str</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-22"><dt id="bkmrk-skydns_website.api.a-68">```
skydns_website.api.application.views.profile_schedule_activity(request, profile)
```

</dt><dd>**JSONRPC Method: profileScheduleActivity**

Получить количество минут до изменения состояния фильтрации профилей.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**profile** – профиль пользователя</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">\[&lt;флаг: работает ли фильтрация по профилю&gt;, &lt;количество минут до смены состояния&gt;\] количество минут = -1, если расписание выключено или нет других состояний.</td></tr></tbody></table>

<dl class="docutils"><dt>Пример:</dt><dd><dl class="first last docutils"><dt>```
first segment state last segment current offset
change | /

v v v v

|//////////| False |///////////////X/| 0———260———1090————–10k | True |///////////| True |
```

</dt></dl></dd></dl><table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-23"><dt id="bkmrk-skydns_website.api.a-69">```
skydns_website.api.application.views.profiles(request)
```

</dt><dd>**JSONRPC Method: profiles**

Получение списка профилей.

<table class="docutils field-list" frame="void" rules="none" style="width: 352.222%;"><colgroup><col class="field-name" style="width: 17.7786%;"></col><col class="field-body" style="width: 82.1967%;"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">список профилей в формате: ```
 [
{
‘id’: id профиля, ‘default’: является ли профиль профилем по умолчанию, ‘token’: токен, ‘name’: название профиля, ‘white_list_only’: включена ли фильтрация только по белому списку, ‘is_schedule_enabled’: включено ли расписание, ‘safe_search_enabled’: статус безопасного поиска, ‘safe_youtube_enabled’: статус фильтрации YouTube (для API v2), ‘block_unknown_enabled’: статус фильтрации неизвестных сайтов (для API v2)

]
```

</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">list</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-24"><dt id="bkmrk-skydns_website.api.a-70">```
skydns_website.api.application.views.register_user(request, username, password)
```

</dt><dd>**JSONRPC Method: register**

Регистрация нового пользователя в облачном сервисе контент-фильтрации SkyDNS.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **username** – имя пользователя
- **password** – пароль создаваемого пользователя

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">\[True\], если регистрация прошла успешно, \[False, “error”\] в противном случае

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-25"><dt id="bkmrk-skydns_website.api.a-71">```
skydns_website.api.application.views.remove_agent_profile(request, uid)
```

</dt><dd>**JSONRPC Method: removeAgentProfile**

Метод удаляет AgentInfo отфильтрованный по заданному uid атрибуту.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**uid** – uid</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">количество удалённых записей</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">int</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-26"><dt id="bkmrk-skydns_website.api.a-72">```
skydns_website.api.application.views.remove_domain(request, profile, choice, id)
```

</dt><dd>**JSONRPC Method: removeDomain**

Удалить домен у заданного профиля.

TODO: параметр choice можно убрать и выбирать домен только по id.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **choice** – тип домена
- **id** – id домена

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-27"><dt id="bkmrk-skydns_website.api.a-73">```
skydns_website.api.application.views.remove_profile(request, profile)
```

</dt><dd>**JSONRPC Method: removeProfile**

Метод удаляет указанный профиль.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**profile** – числовой id удаляемого профиля</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-28"><dt id="bkmrk-skydns_website.api.a-74">```
skydns_website.api.application.views.rename_profile(request, profile_id, name)
```

</dt><dd>**JSONRPC Method: renameProfile**

Метод устанавливает новое имя для профиля. Возвращает актуальное имя.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile\_id** – числовой id профиля, имя которого необходимо изменить
- **name** – новое имя профиля

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">новое имя профиля

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">string

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-29"><dt id="bkmrk-skydns_website.api.a-75">```
skydns_website.api.application.views.send_debug_info(request, uid, info)
```

</dt><dd>Отправить логи для отладки.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">**info** – информация лога формата \[{“command\_title”: &lt;log\_name&gt;, “command\_info”” &lt;log\_message&gt;}, ... \]</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">количество созданных объектов</td></tr></tbody></table>

curl запрос для тестирования выглядит так:

```
$ curl -X POST http://localhost:8000/api/json/v2 -L –user plantest-premium@skydns.ru:plantest1 -d ‘{“id”:0, > “jsonrpc”:”2.0”, “method”:”sendDebugInfo”, > “params”: [“uid”, [{“command_title”: <log_name>, “command_info”” <log_message>}]}’
```

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-30"><dt id="bkmrk-skydns_website.api.a-76">```
skydns_website.api.application.views.send_log(request, profile_id=None, log_content='', os_info=None)
```

</dt><dd>**JSONRPC Method: sendLog**

Фиксация в лог-файл лога пользователя с агентского решения.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **log\_content** – лог пользователя
- **os\_info** – версия системы

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">True

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">boolean

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-31"><dt id="bkmrk-skydns_website.api.a-77">```
skydns_website.api.application.views.send_package(request, package, file_name, system_tag, version, checksum, announce)
```

</dt><dd>**JSONRPC Method: sendPackage**

Загрузка новых версий агентов на сервер.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **package** – содержимое пакета в Base64
- **file\_name** – имя файла
- **system\_tag** – тег версии ОС
- **version** – версия агента
- **checksum** – контрольная сумма
- **announce** – анонс версии

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">True

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">boolean

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-32"><dt id="bkmrk-skydns_website.api.a-78">```
skydns_website.api.application.views.set_agent_profile(request, uid, profile_id)
```

</dt><dd>**JSONRPC Method: setProfile**

Установить профиль AgentInfo.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **uid** – uid AgentInfo
- **profile\_id** – id профиля, который требуется установить

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-33"><dt id="bkmrk-skydns_website.api.a-79">```
skydns_website.api.application.views.set_block_unknown_enabled(request, profile, flag)
```

</dt><dd>**JSONRPC Method: setBlockUnknownEnabled**

Включить/выключить блокировку неизвестных сайтов.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **flag** – флаг включить/выключить

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-34"><dt id="bkmrk-skydns_website.api.a-80">```
skydns_website.api.application.views.set_categories(request, profile_id, cat_ids_list)
```

</dt><dd>**JSONRPC Method: setFilterCats**

Метод привязывает список категорий фильтрации к профилю пользователя и возвращает актуальный список категорий.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile\_id** – числовой id профиля
- **cat\_ids\_list** – список id категорий

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">актуальный список id категорий

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">list

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-35"><dt id="bkmrk-skydns_website.api.a-81">```
skydns_website.api.application.views.set_category(request, profile, cat, state)
```

</dt><dd>**JSONRPC Method: setFilterCat**

Метод позволяет изменить состояние фильтра для категории.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **cat** – числовой id категории
- **state** – булево значение состояния категории (true/false)

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-36"><dt id="bkmrk-skydns_website.api.a-82">```
skydns_website.api.application.views.set_filtering_status(request, enabled)
```

</dt><dd>**JSONRPC Method: setFilteringStatus**

Установить состояние фильтрации пользователя. :param enabled: состояние фильтрации для установки

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">&lt;состояние фильтрации&gt;</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">bool</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-37"><dt id="bkmrk-skydns_website.api.a-83">```
skydns_website.api.application.views.set_networks(request, profile, hostname)
```

</dt><dd>**JSONRPC Method: updateNic**

Установить динамический IP адрес. IP адрес определяется автоматически из запроса.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **hostname** – имя хоста

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">установленный IP адрес

</td></tr><tr class="field-odd field"><th class="field-name">Тип результата:</th><td class="field-body">str

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-38"><dt id="bkmrk-skydns_website.api.a-84">```
skydns_website.api.application.views.set_safe_search(request, profile, flag)
```

</dt><dd>**JSONRPC Method: setSafeSearchEnabled**

Включить/выключить работу по безопасному поиску.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **flag** – флаг включить/выключить

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-39"><dt id="bkmrk-skydns_website.api.a-85">```
skydns_website.api.application.views.set_safe_youtube(request, profile, flag)
```

</dt><dd>**JSONRPC Method: setSafeYoutubeEnabled**

Включить/выключить безопасный Youtube.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **flag** – флаг включить/выключить

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-40"><dt id="bkmrk-skydns_website.api.a-86">```
skydns_website.api.application.views.set_whitelist(request, profile, flag)
```

</dt><dd>**JSONRPC Method: setWhiteListOnly**

Включить/выключить работу по белому списку.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Параметры:</th><td class="field-body">- **profile** – профиль пользователя
- **flag** – флаг включить/выключить

</td></tr><tr class="field-even field"><th class="field-name">Результат:</th><td class="field-body">None

</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-41"><dt id="bkmrk-skydns_website.api.a-87">```
skydns_website.api.application.views.system_info(request)
```

</dt><dd>**JSONRPC Method: systemInfo**

Получение информации о настройках системы.

<table class="docutils field-list" frame="void" rules="none" style="width: 112.84%;"><colgroup><col class="field-name" style="width: 21.7592%;"></col><col class="field-body" style="width: 78.2161%;"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">системная информация в формате: ```
 {
‘public_dns’: DNS, ‘nxdomain’: NX domain, ‘blockpage’: blockpage, ‘blockpage_token’: blockpage token, ‘blockapi’: block api

}
```

</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">dict</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-42"><dt id="bkmrk-skydns_website.api.a-88">```
skydns_website.api.application.views.test_auth(request, username, password)
```

</dt><dd>**JSONRPC Method: testAuth**

Аутентификация пользователя.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">результат аутентификации (true или false)</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">bool</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-43"><dt id="bkmrk-skydns_website.api.a-89">```
skydns_website.api.application.views.user_filter(request, profile)
```

</dt><dd>**JSONRPC Method: userFilter**

Получить список категорий профиля пользователя.

<table class="docutils field-list" frame="void" rules="none"><colgroup><col class="field-name"></col><col class="field-body"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">список id категорий профиля</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">list</td></tr></tbody></table>

</dd></dl><dl class="function" id="bkmrk-skydns_website.api.a-44"><dt id="bkmrk-skydns_website.api.a-90">```
skydns_website.api.application.views.user_info(request)
```

</dt><dd>**JSONRPC Method: userInfo**

Получить информацию о пользователе.

<table class="docutils field-list" frame="void" rules="none" style="width: 219.506%;"><colgroup><col class="field-name" style="width: 16.5532%;"></col><col class="field-body" style="width: 83.4221%;"></col></colgroup><tbody valign="top"><tr class="field-odd field"><th class="field-name">Результат:</th><td class="field-body">информация о пользователе в формате: ```
{
‘username’: юзернейм, ‘plan’: {
‘name’: название тарифного плана, ‘code’: код тарифного плана, ‘date_end’: дата конца оплаченного периода, ‘features’: {
название_опции: значение, ...

},

}, ‘tz’: смещение от UTC в часах, ‘tz_minutes’: смещение от UTC в минутах

}
```

</td></tr><tr class="field-even field"><th class="field-name">Тип результата:</th><td class="field-body">dict</td></tr></tbody></table>

</dd></dl>

# Использование API подписки SkyDNS

Провайдеру выдается публичный ключ, который используется для аутентификации и подписывания запросов.

Все запросы выполняются через протокол HTTPS. С помощью GET запросов. Каждый запрос должен содержать публичный ключ провайдера с именем параметра **key**.

Например:

```
curl "https://www.skydns.ru/provider_api/{имя метода}?key=abcd&a=1&b=1"
```

Предупреждение

**Публичный ключ передается отдельным письмом и не должен публиковаться в открытом доступе!**

На данный момент доступны следующие методы API:

- [subscribe](https://docs.skydns.ru/website/api_subscription.html#subscribe) - зарегистрировать пользователя в системе с переданными реквизитами и установить тариф провайдера по умолчанию.
- [subscribe\_plans](https://docs.skydns.ru/website/api_subscription.html#subscribe-plans) - получить список доступных тарифов для создания/изменения пользователя реселлером.
- [activate](https://docs.skydns.ru/website/api_subscription.html#activate) - активировать пользователя провайдера.
- [deactivate](https://docs.skydns.ru/website/api_subscription.html#deactivate) - деактивировать пользователя провайдера.
- [update\_email](https://docs.skydns.ru/website/api_subscription.html#update-email) - обновить email пользователя для восстановления пароля и получения информационных сообщений.
- [update\_password](https://docs.skydns.ru/website/api_subscription.html#update-password) - обновить пароль пользователя.
- [prolongate](https://docs.skydns.ru/website/api_subscription.html#prolongate) - включить или изменить платный тариф для пользователя. Этот метод всегда должен вызываться после метода subscribe для включения услуги пользователю.
- [unsubscribe](https://docs.skydns.ru/website/api_subscription.html#unsubscribe) - отключить пользователя и переключить на бесплатный тариф.
- [subscription\_info](https://docs.skydns.ru/website/api_subscription.html#subscription-info) - получить информацию о дате окончания подписки.
- [profiles](https://docs.skydns.ru/website/api_subscription.html#profiles) – получить список активных профилей пользователя.
- [create\_profile](https://docs.skydns.ru/website/api_subscription.html#create-profile) - создать профиль.
- [update\_profile](https://docs.skydns.ru/website/api_subscription.html#update-profile) – изменить параметры профиля пользователя реселлера.
- [add\_ip](https://docs.skydns.ru/website/api_subscription.html#add-ip) - добавить один или несколько статических IP адресов пользователя.
- [clear\_ip](https://docs.skydns.ru/website/api_subscription.html#clear-ip) - удалить все статические IP адреса на профиле пользователя.
- [list\_ip](https://docs.skydns.ru/website/api_subscription.html#list-ip) - получить список всех статических IP адресов пользователя.
- [update\_ip](https://docs.skydns.ru/website/api_subscription.html#update-ip) - создать или обновить динамический IP адрес пользователя и привязать его к необходимому профилю фильтрации.
- [remove\_ip](https://docs.skydns.ru/website/api_subscription.html#remove-ip) - удалить IP адрес пользователя.
- [add\_vpn](https://docs.skydns.ru/website/api_subscription.html#add-vpn) - создать VPN-сертификат для профиля и получить профиль настройки OpenVPN.
- [clear\_vpn\_for\_profile](https://docs.skydns.ru/website/api_subscription.html#clear-vpn-for-profile) - удалить все vpn-соединения на профиле пользователя.
- [clear\_vpn\_for\_user](https://docs.skydns.ru/website/api_subscription.html#clear-vpn-for-user) - удалить все vpn-соединения на всех профилях пользователя.
- [get\_vpn\_list](https://docs.skydns.ru/website/api_subscription.html#get-vpn-list) - получить список всех vpn-соединений пользователя.
- [remove\_vpn](https://docs.skydns.ru/website/api_subscription.html#remove-vpn) - удалить vpn-соединение пользователя.
- [update\_nat](https://docs.skydns.ru/website/api_subscription.html#update-nat) - добавить или обновить привязку профиля к DNS адресам для пользователей за NAT.
- [get\_activity](https://docs.skydns.ru/website/api_subscription.html#get-activity) - получить информацию об активности пользователя за определенную дату.
- [get\_activity\_report](https://docs.skydns.ru/website/api_subscription.html#get-activity-report) - получить отчет об активности пользователя за определенный период времени.
- [get\_list\_activity\_report](https://docs.skydns.ru/website/api_subscription.html#get-list-activity-report) - отчет об активности пользователя за определенный период времени.
- [get\_popular\_report](https://docs.skydns.ru/website/api_subscription.html#get-popular-report) - получить отчет о популярных запросах пользователя за определенный период времени.
- [get\_category\_report](https://docs.skydns.ru/website/api_subscription.html#get-category-report) - получить отчет по категориям пользователя за определенный период времени.
- [send\_monthly\_stat](https://docs.skydns.ru/website/api_subscription.html#send-monthly-stat) - отправить статистику за месяц пользователю по электронной почте.
- [get\_daily\_stat](https://docs.skydns.ru/website/api_subscription.html#get-daily-stat) - получить статистику пользователя за день.
- [get\_active\_users](https://docs.skydns.ru/website/api_subscription.html#get-active-users) - получить список активных пользователей и их тарифы.

Внимание

**API доступно по адресу:** [https://www.skydns.ru/provider\_api/](https://www.skydns.ru/provider_api/)

Примечание

**Вызывается по схеме:** https://www.skydns.ru/provider\_api/{имя метода}?{GET параметры запроса}

## Доступные методы

<div class="section" id="bkmrk-"><div class="section"><div class="section"><span id="bkmrk--37"></span></div></div></div>### subscribe

Зарегистрировать пользователя в системе с переданными реквизитами и установить тариф по умолчанию.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-password%C2%A0--%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C-%D1%81%D0%BE"><div class="section"><div class="section">- **password** - пароль создаваемого пользователя.

</div></div></div>Может передаваться 4 необязательных параметра:

<div class="section" id="bkmrk-login%C2%A0--%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD%2C-%D0%BF%D0%BE-%D1%83%D0%BC"><div class="section"><div class="section">- **login** - логин, по умолчанию стандарное именование с уникальным префиксом провайдера.
- **plan** - тарифный план. Сисок доступных для вас планов уточняйте у менеджера СкайДНС или с помощью метода subscribe\_plans. Если вы используете недопустимый код, то в ответ будет выдана ошибка.
- **email** - адрес электронной почты пользователя (может использоваться для самостоятельного восстановления пароля пользователем через личный кабинет и получения служебных уведомлений).
- **customer** - наименование договора.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "username": "username",
            "email": "email",
            "plan": "tariff_name"
        }
    }
}
```

<div class="section" id="bkmrk--0"><div class="section"><div class="section" id="bkmrk--38"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--39"></span></div></div></div>### subscribe\_plans

Получить список доступных тарифов для создания/изменения пользователя реселлером.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "plan1": "tariff_name1",
            "plan2": "tariff_name2"
        }
    }
}
```

<div class="section" id="bkmrk--1"><div class="section"><div class="section" id="bkmrk--40"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--41"></span></div></div></div>### activate

Активировать пользователя провайдера.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE"><div class="section"><div class="section">- **ident** - login пользователя, которого необходимо активировать.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--2"><div class="section"><div class="section" id="bkmrk--42"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--43"></span></div></div></div>### deactivate

Деактивировать пользователя провайдера.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-0"><div class="section"><div class="section">- **ident** - login пользователя, которого необходимо деактивировать.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--3"><div class="section"><div class="section" id="bkmrk--44"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--45"></span></div></div></div>### update\_email

Обновить email пользователя для восстановления пароля и получения информационных сообщений.

Передается 2 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-1"><div class="section"><div class="section">- **ident** - login пользователя, у которого изменяется email.
- **email** - новый email пользователя. Если в базе уже есть пользователь с таким email, будет возвращена ошибка.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--4"><div class="section"><div class="section" id="bkmrk--46"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--47"></span></div></div></div>### update\_password

Обновить пароль пользователя.

Передается 2 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-2"><div class="section"><div class="section">- **ident** - login пользователя.
- **password** - новый пароль пользователя.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--5"><div class="section"><div class="section" id="bkmrk--48"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--49"></span></div></div></div>### prolongate

Включить или изменить платный тариф для пользователя. Этот метод всегда должен вызываться после метода subscribe для включения услуги пользователю.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-3"><div class="section"><div class="section">- **ident** - login пользователя, у которого включается платная подписка.

</div></div></div>Может передаваться 1 необязательный параметр:

<div class="section" id="bkmrk-plan%C2%A0%D1%81-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D1%8B%D0%BC%D0%B8-%D0%B7%D0%BD"><div class="section"><div class="section">- **plan** с доступными значениями: PREMIUM, SCHOOL, BUSINESS. Список доступных для вас планов уточняйте у менеджера СкайДНС или с помощью метода subscribe\_plans. Если вы используете недопустимый код, то в ответ будет выдана ошибка.

</div></div></div>Eсли параметр **plan** не передан, то по умолчанию включается план PREMIUM.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--6"><div class="section"><div class="section" id="bkmrk--50"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--51"></span></div></div></div>### unsubscribe

Отключить пользователя и переключить на бесплатный тариф.

Передается 1 параметр:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-4"><div class="section"><div class="section">- **ident** - login пользователя, аккаунт которого переключается в бесплатный режим.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--7"><div class="section"><div class="section" id="bkmrk--52"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--53"></span></div></div></div>### subscription\_info

Получить информацию о дате окончания подписки.

Передается 1 параметр:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-5"><div class="section"><div class="section">- **ident** - login пользователя, у которого проверяется срок подписки.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "date_end": 1390930655
        }
    }
}
```

<div class="section" id="bkmrk--8"><div class="section"><div class="section"><div class="highlight-json"><div class="highlight">  
</div></div><div class="admonition note">  
</div></div></div></div>Примечание

Дата окончания в unix time.

Предупреждение

В настоящее время не используется, зарезервировано для будущего использования.

<div class="section" id="bkmrk--9"><div class="section"><div class="section" id="bkmrk--54"><div class="admonition warning">  
</div></div><div class="section"><span id="bkmrk--55"></span></div></div></div>### profiles

Получить список активных профилей пользователя.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-ident%C2%A0%E2%80%93-login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE"><div class="section"><div class="section">- **ident** – login пользователя, у которого необходимо получить список профилей.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "ид профиля 1": "имя профиля",
            "ид профиля 2": "имя профиля",
            "ид профиля 3": "имя профиля"
        }
    }
}
```

<div class="section" id="bkmrk--10"><div class="section"><div class="section"><div class="highlight-json"><div class="highlight">  
</div></div><div class="admonition note">  
</div></div></div></div>Примечание

“имя профиля” передается в кодировке utf-8.

<div class="section" id="bkmrk--11"><div class="section"><div class="section" id="bkmrk--56"><div class="admonition note">  
</div></div><div class="section"><span id="bkmrk--57"></span></div></div></div>### create\_profile

Создать профиль.

Передается 2 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-6"><div class="section"><div class="section">- **ident** - login пользователя.
- **name** – имя профиля.

</div></div></div>Дополнительно можно передать 2 необязательных параметра:

<div class="section" id="bkmrk-tls%C2%A0%E2%80%93-%D0%B1%D1%83%D0%B4%D0%B5%D1%82-%D0%BB%D0%B8-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB"><div class="section"><div class="section">- **tls** – будет ли использоваться TLS. Принимает значения: True, False.
- **blockpage\_id** – id страницы блокировки, которую необходимо установить на профиль.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--12"><div class="section"><div class="section" id="bkmrk--58"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--59"></span></div></div></div>### update\_profile

Изменить параметры профиля пользователя реселлера.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-profile_id%C2%A0%E2%80%93-id-%D0%BF%D1%80%D0%BE%D1%84"><div class="section"><div class="section">- **profile\_id** – id профиля пользователя, который необходимо изменить.

</div></div></div>Дополнительно можно передать 2 необязательных параметра:

<div class="section" id="bkmrk-name%C2%A0%E2%80%93-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B5-%D0%B8%D0%BC%D1%8F-%D0%BF%D1%80%D0%BE"><div class="section"><div class="section">- **name** – новое имя профиля пользователя.
- **tls** – булево значение для установки профилю, будет ли использоваться TLS. Принимает значения: True, False.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "id": "profile_id",
            "name": "profile_name",
            "tls": "True|False"
        }
    }
}
```

<div class="section" id="bkmrk--13"><div class="section"><div class="section" id="bkmrk--60"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--61"></span></div></div></div>### add\_ip

Добавить один или несколько статических IP адресов пользователя.

Передаeтся 2 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-7"><div class="section"><div class="section">- **ident** - login пользователя.
- **ip** - один или несколько IP адресов. При передаче нескольких адресов, каждое значение нужно указывать отдельным параметром.

</div></div></div>Дополнительно можно передать 2 необязательных параметра:

<div class="section" id="bkmrk-profile%C2%A0--%D1%87%D0%B8%D1%81%D0%BB%D0%BE%D0%B2%D0%BE%D0%B9-i"><div class="section"><div class="section">- **profile** - числовой id профиля, к которому необходимо привязать IP адреса.
- **comment** - комментарий к IP адресу.

</div></div></div>Если параметр **profile** не будет передан, то IP адреса будут привязаны к профилю “По умолчанию”.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "added_addresses": ["1.1.1.1", "1.1.1.2"]
        }
    }
}
```

Если какие-то из переданных адресов не удалось добавить, то дополнительно будет выведен их список:

```
{
    "response": {
        "status": "ok",
        "data": {
            "added_addresses": ["1.1.1.1", "1.1.1.2"],
            "invalid_adresses": [
                {"1.invalid.ip.adress": "IP address is invalid"},
                {"0.0.0.0": "This address is not public"}
            ]
        }
    }
}
```

<div class="section" id="bkmrk--14"><div class="section"><div class="section" id="bkmrk--62"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--63"></span></div></div></div>### clear\_ip

Удалить все статические IP адреса на профиле пользователя.

Передается 2 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-8"><div class="section"><div class="section">- **ident** - login пользователя.
- **profile** - числовой id профиля.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--15"><div class="section"><div class="section" id="bkmrk--64"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--65"></span></div></div></div>### list\_ip

Получить список всех статических IP адресов пользователя.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-9"><div class="section"><div class="section">- **ident** - login пользователя, у которого необходимо получить IP адреса.

</div></div></div>Дополнительно можно передать 1 необязательный параметр:

<div class="section" id="bkmrk-profile%C2%A0--%D1%87%D0%B8%D1%81%D0%BB%D0%BE%D0%B2%D0%BE%D0%B9-i-0"><div class="section"><div class="section">- **profile** - числовой id профиля, для которого необходимо получить IP адреса.

</div></div></div>Если параметр **profile** не будет передан, то IP адреса будут получены для всех профилей.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "ip": [
                {"address": "1.2.3.4", "comment": "example.com"},
                {"address": "1.2.3.5", "comment": "example.com"}
            ],
        }
    }
}
```

<div class="section" id="bkmrk--16"><div class="section"><div class="section" id="bkmrk--66"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--67"></span></div></div></div>### update\_ip

Создать или обновить динамический IP адрес пользователя и привязать его к необходимому профилю фильтрации.

Передается 2 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-10"><div class="section"><div class="section">- **ident** - login пользователя.
- **ip** - новый динамический IP адрес пользователя.

</div></div></div>Предоставленный IP адрес будет установлен на профиле Основной указанного пользователя. Если предоставленный IP уже привязан к другому пользователю провайдера, то привязка будет убрана и IP адрес будет привязан к указанному в методе пользователю.

Дополнительно можно передать 2 необязательных параметра:

<div class="section" id="bkmrk-hostname%C2%A0--%D0%BF%D0%BE%D0%B7%D0%B2%D0%BE%D0%BB%D1%8F%D0%B5%D1%82"><div class="section"><div class="section">- **hostname** - позволяет привязать несколько IP адресов к одному профилю, а также профилям, отличным от профиля Основной. При последующих обновлениях адреса привязка к профилю будет сохраняться.
- **profile** - числовой id профиля к которому необходимо привязать IP адрес пользователя. Если данный параметр будет опущен, то по умолчанию привязка произойдет на профиль Основной. Числовые коды профилей доступны в личном кабинете в списке профилей.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--17"><div class="section"><div class="section" id="bkmrk--68"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--69"></span></div></div></div>### remove\_ip

Удалить IP адрес пользователя.

Передается 2 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-11"><div class="section"><div class="section">- **ident** - login пользователя.
- **ip** - IP адрес пользователя, который необходимо удалить.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--18"><div class="section"><div class="section" id="bkmrk--70"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--71"></span></div></div></div>### add\_vpn

Создать VPN-сертификат для профиля и получить профиль настройки OpenVPN.

Передается 3 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-12"><div class="section"><div class="section">- **ident** - login пользователя, которому запрашивается профиль настройки OpenVPN.
- **name** - уникальное для пользователя название создаваемого VPN-подключения.
- **profile\_id** - идентификатор профиля пользователя, для которого запрашивается профиль настройки OpenVPN. Если **profile\_id** не соответствует ни одному из профилей пользователя, будет получена соответствующая ошибка.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "ovpn": "client\nremote vpn.skydns.ru 1194 udp\nnobind\ndev tun\npersist-tun\npersist-key\nverify-x509-name vpn.skydns.ru name\nremote-cert-tls server\ncipher AES-128-CBC\n\n<ca>\n-----BEGIN CERTIFICATE-----\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n-----END CERTIFICATE-----\n</ca>\n<cert>\n-----BEGIN CERTIFICATE-----\n-----END CERTIFICATE-----\n</cert>\n<key>\n-----BEGIN PRIVATE KEY-----\n-----END PRIVATE KEY-----\n</key>\n"
        }
    }
}
```

<div class="section" id="bkmrk--19"><div class="section"><div class="section"><div class="highlight-json"><div class="highlight">  
</div></div><div class="admonition note">  
</div></div></div></div>Примечание

Если лимит VPN-соединений исчерпан, попытка добавить новое завершится ошибкой.

<div class="section" id="bkmrk--20"><div class="section"><div class="section" id="bkmrk--72"><div class="admonition note">  
</div></div><div class="section"><span id="bkmrk--73"></span></div></div></div>### clear\_vpn\_for\_profile

Удалить все vpn-соединения на профиле пользователя.

Передается 1 обязаетельный параметр:

<div class="section" id="bkmrk-profile_id%C2%A0--%D1%87%D0%B8%D1%81%D0%BB%D0%BE%D0%B2%D0%BE"><div class="section"><div class="section">- **profile\_id** - числовой id профиля, у которого необходимо удалить все vpn-соединения.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--21"><div class="section"><div class="section" id="bkmrk--74"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--75"></span></div></div></div>### clear\_vpn\_for\_user

Удалить все vpn-соединения на всех профилях пользователя.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-13"><div class="section"><div class="section">- **ident** - login пользователя, у которого необходимо удалить vpn-соединения.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--22"><div class="section"><div class="section" id="bkmrk--76"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--77"></span></div></div></div>### get\_vpn\_list

Получить список всех vpn-соединений пользователя.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-14"><div class="section"><div class="section">- **ident** - login пользователя, у которого необходимо получить список vpn соеденений.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": [
            {"id": "vpn_id1", "profile": "profile_name", "ip": "vpn_hostname1", "name": "vpn_name1"},
            {"id": "vpn_id2", "profile": "profile_name", "ip": "vpn_hostname2", "name": "vpn_name2"}
        ]
    }
}
```

<div class="section" id="bkmrk--23"><div class="section"><div class="section" id="bkmrk--78"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--79"></span></div></div></div>### remove\_vpn

Удалить vpn-соединение пользователя.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-id%C2%A0--id-vpn-%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD"><div class="section"><div class="section">- **id** - id vpn соединения, которое необходимо удалить.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--24"><div class="section"><div class="section" id="bkmrk--80"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--81"></span></div></div></div>### update\_nat

Добавить или обновить привязку профиля к DNS адресам для пользователей за NAT.

Передается 2 обязательных параметра:

<div class="section" id="bkmrk-profile_id%C2%A0--id-%D0%BF%D1%80%D0%BE%D1%84"><div class="section"><div class="section">- **profile\_id** - id профиля пользователя.
- **address** - IP адрес NAT DNS.

</div></div></div>**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--25"><div class="section"><div class="section" id="bkmrk--82"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--83"></span></div></div></div>### get\_activity

Получить информацию об активности пользователя за определенную дату.

Передается 1 обязательный параметр:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-15"><div class="section"><div class="section">- **ident** - login пользователя, для которого необходимо получить информацию.

</div></div></div>Дополнительно можно передать 2 необязательных параметра:

<div class="section" id="bkmrk-date%C2%A0--%D0%B4%D0%B0%D1%82%D0%B0%2C-%D0%B7%D0%B0-%D0%BA%D0%BE%D1%82%D0%BE"><div class="section"><div class="section">- **date** - дата, за которую необходимо получить отчет о действиях пользователя в формате YYYY-MM-DD. Если параметр не задан, то отчет будет сформирован за сегодня.
- **profile\_id** - идентификатор профиля пользователя, для которого запрашивается отчет.

</div></div></div>Значение параметра **date** должно быть не ранее, чем 1 января предыдущего года.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "requests": "2600",
            "blocks": "581"
        }
    }
}
```

<div class="section" id="bkmrk--26"><div class="section"><div class="section"><div class="highlight-json"><div class="highlight">  
</div></div><div class="admonition note">  
</div></div></div></div>Примечание

Где **requests** - это общее количество запросов за указанную дату, **blocks** - количество блокировок.

<div class="section" id="bkmrk--27"><div class="section"><div class="section" id="bkmrk--84"><div class="admonition note">  
</div></div><div class="section"><span id="bkmrk--85"></span></div></div></div>### get\_activity\_report

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

Передается 3 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-16"><div class="section"><div class="section">- **ident** - login пользователя, для которого необходимо получить информацию.
- **start** - дата начала периода для получения статистики в формате YYYY-MM-DD.
- **end** - дата окончания периода для получения статистики в формате YYYY-MM-DD.

</div></div></div>Дополнительно можно передать 1 необязательный параметр:

<div class="section" id="bkmrk-profile_id%C2%A0--%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84"><div class="section"><div class="section">- **profile\_id** - идентификатор профиля пользователя, для которого запрашивается отчет.

</div></div></div>Если диапазон **start** - **end** охватывает более чем 30 суток, то в отчет попадают только последние 30 из них.

Начало периода **start** должно быть не ранее, чем 1 января предыдущего года.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "labels": [
                "2016-06-29 14:00:00",
                "2016-06-29 15:00:00"
            ],
            "datasets": [
                {
                    "label": "Requests",
                    "data": [375, 275]
                },
                {
                    "label": "Blocks",
                    "data": [13, 0]
                }
            ]
        }
    }
}
```

<div class="section" id="bkmrk--28"><div class="section"><div class="section"><div class="highlight-json"><div class="highlight">  
</div></div><div class="admonition note">  
</div></div></div></div>Примечание

Где **labels** - список значений для оси времени. **datasets** - список словарей содержащих наборы данных по определенном параметрам отчета, *label* - название параметра отчета, *data* - список значений соответстующих датам из списка **labels**.

Примечание

В **datasets** используются следующие наборы данных: **Requests** - количество запросов, **Blocks** - количество блокировок.

<div class="section" id="bkmrk--29"><div class="section"><div class="section" id="bkmrk--86"><div class="admonition note">  
</div></div><div class="section"><span id="bkmrk--87"></span></div></div></div>### get\_list\_activity\_report

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

Передается 3 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-17"><div class="section"><div class="section">- **ident** - login пользователя, для которого необходимо получить информацию (в запросе может быть несколько).
- **start** - дата начала периода для получения статистики в формате YYYY-MM-DD.
- **end** - дата окончания периода для получения статистики в формате YYYY-MM-DD.

</div></div></div>Пример запроса:

[https://skydns.ru/provider\_api/get\_list\_activity\_report/?key=supersecretkey&amp;start=2023-04-01&amp;end=2023-04-17&amp;ident=username1&amp;ident=username2](https://skydns.ru/provider_api/get_list_activity_report/?key=supersecretkey&start=2023-04-01&end=2023-04-17&ident=username1&ident=username2)

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "data": {
        "2023-04-03": {
            "username1": {
                "visits": 28251,
                "blocks": 1106
            },
            "username2": {
                "visits": 4854,
                "blocks": 760
            }
        },
    }
}
```

<div class="section" id="bkmrk--30"><div class="section"><div class="section" id="bkmrk--88"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--89"></span></div></div></div>### get\_popular\_report

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

Передается 3 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-18"><div class="section"><div class="section">- **ident** - login пользователя, для которого необходимо получить информацию.
- **start** - дата начала периода для получения статистики в формате YYYY-MM-DD.
- **end** - дата окончания периода для получения статистики в формате YYYY-MM-DD.

</div></div></div>Дополнительно можно передать 1 необязательный параметр:

<div class="section" id="bkmrk-profile_id%C2%A0--%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84-0"><div class="section"><div class="section">- **profile\_id** - идентификатор профиля пользователя, для которого запрашивается отчет.

</div></div></div>Если диапазон **start** - **end** охватывает более чем 30 суток, то в отчет попадают только последние 30 из них.

Начало периода **start** должно быть не ранее, чем 1 января предыдущего года.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "labels": ["example.com", "google.com", "asdfg.com"],
            "datasets": [
                {
                    "label": "Requests",
                    "data": [630, 474, 290]
                },
                {
                    "label": "NXdomain",
                    "data": [0, 0, 290]
                },
                {
                    "label":"Blocks",
                    "data":[630, 0, 0]
                }
            ]
        }
    }
}
```

<div class="section" id="bkmrk--31"><div class="section"><div class="section"><div class="highlight-json"><div class="highlight">  
</div></div><div class="admonition note">  
</div></div></div></div>Примечание

Где **labels** - список значений для оси времени. **datasets** - список словарей содержащих наборы данных по определенном параметрам отчета, *label* - название параметра отчета, *data* - список значений соответстующих датам из списка **labels**.

Примечание

в **datasets** используются следующие наборы данных: **Requests** - количество запросов, **Blocks** - количество блокировок, **NXdomain** - количество неразрезолвенных доменов.

<div class="section" id="bkmrk--32"><div class="section"><div class="section" id="bkmrk--90"><div class="admonition note">  
</div></div><div class="section"><span id="bkmrk--91"></span></div></div></div>### get\_category\_report

Получить отчет по категориям пользователя за определенный период времени.

Передается 3 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-19"><div class="section"><div class="section">- **ident** - login пользователя, для которого необходимо получить информацию.
- **start** - дата начала периода для получения статистики в формате YYYY-MM-DD.
- **end** - дата окончания периода для получения статистики в формате YYYY-MM-DD.

</div></div></div>Дополнительно можно передать 1 необязательный параметр:

<div class="section" id="bkmrk-profile_id%C2%A0--%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84-1"><div class="section"><div class="section">- **profile\_id** - идентификатор профиля пользователя, для которого запрашивается отчет.

</div></div></div>Если диапазон **start** - **end** охватывает более чем 30 суток, то в отчет попадают только последние 30 из них.

Начало периода **start** должно быть не ранее, чем 1 января предыдущего года.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "Фильмы и видео онлайн": "5",
            "Файловые архивы": "2",
            "Дом, семья, хобби": "3"
        }
    }
}
```

<div class="section" id="bkmrk--33"><div class="section"><div class="section"><div class="highlight-json"><div class="highlight">  
</div></div><div class="admonition note">  
</div></div></div></div>Примечание

Где **data** - представляет собой словарь, *ключ* - название категории, *значение* - количество посещений.

<div class="section" id="bkmrk--34"><div class="section"><div class="section" id="bkmrk--92"><div class="admonition note">  
</div></div><div class="section"><span id="bkmrk--93"></span></div></div></div>### send\_monthly\_stat

Отправить пользователю по электронной почте статистику за месяц.

Передается 3 обязательных параметра:

<div class="section" id="bkmrk-ident%C2%A0--login-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE-20"><div class="section"><div class="section">- **ident** - login пользователя.
- **year** - год в формате YYYY.
- **month** - месяц в формате MM, за который необходимо сформировать отчет.

</div></div></div>Дополнительно можно передать 1 необязательный параметр:

<div class="section" id="bkmrk-profile_id%C2%A0--%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84-2"><div class="section"><div class="section">- **profile\_id** - идентификатор профиля пользователя, для которого запрашивается статистика.

</div></div></div>На email пользователя будет выслан отчет в формате CSV со статистикой за указанный месяц. Отчет содержит следующие столбцы: “Timestamp”, “Domain name”, “Visits”, “Blocks”, “Profile”, “Categories”.

Значение параметра **year** должно быть не меньше прошлого года.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok"
    }
}
```

<div class="section" id="bkmrk--35"><div class="section"><div class="section" id="bkmrk--94"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--95"></span></div></div></div>### get\_daily\_stat

Получить статистику пользователя за день.

Передается 2 обязательных параметра:

<div class="section" id="bkmrk-date%C2%A0--%D0%B4%D0%B0%D1%82%D0%B0-%D0%B2-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82"><div class="section"><div class="section">- **date** - дата в формате ‘YYYY-MM-DD’ определяет день, за который необходима статистика.
- **ident** - имя пользователя, для которого необходима статистика.

</div></div></div>Дополнительно можно передать 2 необязательных параметра:

<div class="section" id="bkmrk-email_to%C2%A0--email%2C-%D0%BD%D0%B0"><div class="section"><div class="section">- **email\_to** - email, на который будет отправлена статистика.
- **profile\_id** - идентификатор профиля пользователя, для которого запрашивается статистика.

</div></div></div>Значение параметра **date** должно быть не ранее, чем 1 января предыдущего года.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "response": {
        "status": "ok",
        "data": {
            "result": "ссылка на файл"
        }
    }
}
```

<div class="section" id="bkmrk--36"><div class="section"><div class="section" id="bkmrk--96"><div class="highlight-json"><div class="highlight">  
</div></div></div><div class="section"><span id="bkmrk--97"></span></div></div></div>### get\_active\_users

Получить список активных пользователей и их тарифы.

**Ответ возвращается в формате JSON следующего вида:**

```
{
    "data": [
        {
            "username": "username1",
            "plan_name": "Бизнес"
        },
        {
            "username": "username1",
            "plan_name": "Школа"
        },
    ]
}
```