Перейти к содержанию

АPI документация

Документация по API панели управления invapi.hostkey.ru

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

Информация

Панель управления invapi.hostkey.ru построена на основе этого API.

Основные возможности, доступные через вызовы API:

  • Поиск серверов по IP, имени хоста, местоположению, тегам;
  • Заказ моментальных и стоковых серверов стандартных конфигураций, доступных для использования от 15-20 минут после оформления заказа;
  • Управление питанием: перезагрузка, включение и выключение оборудования, просмотр показателей датчиков и статуса питания;
  • Управление сетевыми настройками: просмотр настроек сети, включение и выключение сетевых интерфейсов, блокировка и разблокировка IP-адресов. Настройка DNS;
  • Переустановка операционной системы и ПО: полностью автоматизированная переустановка стандартных ОС: Centos, Ubuntu, Debian, and Windows Server. Поддержка ключей SSH, постустановочных задач, HTTP-вызовов, а также доустановка поверх программного обеспечения из маркетплейса;
  • Доступ к IPMI: возможность получить доступ к серверу с помощью модуля IPMI, создать сквозную сеть с пользователем-администратором и управлять сервером напрямую через стандартный интерфейс DRAC или IPMI с помощью консоли HTML5 или Java;
  • Доступ к консоли: простой доступ к HTML5 или Java консоли сервера без установки дополнительного ПО;
  • Доступ к библиотеке ISO-файлов: сервер может быть загружен непосредственно с одного из наших образов ISO для установки или устранения неполадок;
  • Запросы удаленных рук: одним щелчком мыши можно создавать запросы удаленных рук для проверки сервера или выполнения других задач;
  • Биллинговые операции: простое пополнение счета, оплата счетов и возможность отмены сервиса напрямую из панели управления Invapi;
  • Статистика: просмотр графиков использования трафика по интерфейсам или конкретным IP-адресам. Просмотр показателей производительности сервера с установленным агентом мониторинга;
  • Теги: установка собственных тегов/значений для сервера, выполнение операций поиска, доступ к тегам через API для сохранения состояния сервера и других данных, связанных с сервером;
  • В разработке: почасовая оплата, создание собственных пользователей с различными правами, выделение лимитов бюджета пользователям, постоплата для проверенных клиентов, мониторинг серверов с уведомлениями. Управление частными блоками IP.

Общая информация

API построен на традиционных принципах с селектором действий и использованием токена авторизации.

Сообщения POST или GET возможно использовать для всех вызовов API, кроме действий авторизации.

Формат примеров API

Примеры в этой документации описаны с помощью сurl, HTTP-клиента командной строки. На компьютерах Linux и macOS обычно по умолчанию установлен curl, и он доступен для загрузки на всех популярных платформах, включая Windows.

Каждый пример разделен на несколько строк символом \, который совместим с bash. Типичный пример выглядит так:

curl -s "https://invapi.hostkey.ru/tags.php" -X POST \
--data "action=list" \
--data "token=$HOSTKEY_TOKEN" \
--data "id=ID сервера"
curl -s "https://invapi.hostkey.ru/tags.php?action=list&token=$HOSTKEY_TOKEN&id=ID сервера" -X GET

Параметр -X задает метод запроса. Для согласованности метод будет указан во всех примерах, даже если он явно не требуется для методов GET.

Примеры, для которых требуется объект JSON в теле запроса, передают требуемые данные через параметр --data.

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

Примечание

В этой документации будут использоваться примеры POST, т.к. этот метод предпочтительнее.

Примечание

Чтобы использовать приведенные примеры, не подставляя каждый раз в них свой токен, вы можете добавить токен один раз в переменные окружения в вашей консоли. Например, на Linux это можно сделать с помощью команды:

HOSTKEY_TOKEN="token"

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

Примечание

Обратите внимание, что все значения в этой документации являются примерами. Не полагайтесь на идентификаторы операционных систем, тарифов и т.д., используемые в примерах. Используйте ваши значения серверов/сетей/доменов для получения значений или перед созданием ресурсов.

Авторизация через API-ключ

Для использования API в начале необходимо получить сессионный токен. Это можно сделать с помощью API-вызова auth/login, предварительно получив API-ключ в Invapi или через вызов api_keys/add.

Также сессионный токен можно получить через вызов auth/whmcslogin используя пару логин/пароль аккаунта.

Авторизацию через API-ключ можно получить для доступа как ко всему аккаунту, так и к конкретному серверу через вызов auth/login в зависимости от применяемого API-ключа. Если авторизация прошла успешно и такой ключ найден в базе данных, то система вернет сессионный токен $HOSTKEY_TOKEN.

Полномочия токена будут распространяться на весь аккаунт в случае общего ключа или только на конкретный сервер в случае ключа на сервер. Использование этого метода позволяет наладить автоматическое управление серверами и заказ услуг через наш API без использования логина/пароля в основной аккаунт и без интерактивной проверки 2FA.

Работа с API-ключами через вызовы api_keys

Для работы с вызовами API при получении API-ключа вам будет необходим сессионный токен, который можно получить через вызов auth/whmcslogin. Сессионный токен выдается только на один час по умолчанию, поэтому после его получения рекомендуем сгенерировать API-ключ на ваш аккаунт и работать с ним, получая сессионный токен через вызов auth/login.

Ресурс Действие Описание
api_keys.php list получение данных о всех сгенерированных API-ключах аккаунта
api_keys.php list_for_server получение данных о сгенерированных API-ключах для определенного сервера
api_keys.php view просмотр информации об определенных API-ключах
api_keys.php add получение API-ключа для аккаунта или сервера
api_keys.php edit редактирование параметров API-ключа
api_keys.php delete удаление API-ключа
api_keys.php history вывод информации об использовании API-ключа за определенный период

api_keys/list

Показывает все сгенерированные API-ключи аккаунта - владельца сессионного токена.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string list ключевое действие - получение данных о всех сгенерированных API-ключах аккаунта
token * string сессионный токен

POST-запрос

curl -s "https://invapi.hostkey.ru/api_keys.php" -X POST \
--data "action=list" \
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
    "result": "OK",
    "module": "api_keys",
    "action": "list",
    "data": [
        {
            "id": 484, //ID API-ключа для аккаунта
            "name": "new_api",
            "active": 1,
            "ip": "",
            "server_id": 0,
            "token_view": "0cab",
            "login_notify_method": "none",
            "login_notify_address": null
        },
        { 
            "id": 237, //ID API-ключа для сервера
            "name": "test_control_panel",
            "active": 1,
            "ip": "",
            "server_id": 39601, //ID сервера для которого назначен ключ
            "token_view": "b66d",
            "login_notify_method": "none",
            "login_notify_address": null
        }
    ]
}

api_keys/list_for_server

Показывает сгенерированные API-ключи для определенного сервера.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string list_for_server ключевое действие - получение данных о сгенерированных API-ключах для определенного сервера
server_id * int ID сервера
token * string сессионный токен

POST-запрос

curl -s "https://invapi.hostkey.ru/api_keys.php" -X POST \
--data "action=list_for_server" \
--data "params[server_id]={ID сервера}" \ 
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
    "result": "OK",
    "module": "api_keys",
    "action": "list_for_server",
    "data": [
        {
            "id": 237,
            "name": "test_control_panel",
            "active": 1,
            "ip": "",
            "server_id": 39601,
            "token_view": "b66d",
            "login_notify_method": "none",
            "login_notify_address": null
        }
    ]
}

api_keys/view

Показывает информацию об определенном API-ключе

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string view ключевое действие - просмотр информации об определенных API-ключах
id * int ID API-ключа (можно получить через вызов api_keys/list)
token * string сессионный токен

POST-запрос

curl -s "https://invapi.hostkey.ru/api_keys.php" -X POST \
--data "action=view" \
--data "params[id]={ID API-ключа}" \ 
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
    "result": "OK",
    "module": "api_keys",
    "action": "view",
    "data": {
        "id": 484,
        "name": "new_api",
        "active": 1,
        "ip": "",
        "server_id": 0,
        "token_view": "0cab",
        "login_notify_method": "none",
        "login_notify_address": null
    }
}

api_keys/add

Позволяет получить API-ключ для аккаунта или сервера

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string add ключевое действие - получение API-ключа для аккаунта или сервера
name * string наименование ключа (на английском)
server_id int ID сервера, если ключ выдается не на весь аккаунт
ip string список IP адресов, только с которых будет возможно использование данного ключа (например 10.0.0.2, 10.4.6.3/24)
login_notify_method * string выбор метода оповещения о логине с данным API-ключом (none, email, webhook)
login_notify_address string e-mail или адрес вебхука нотификации в зависимости от заданного значения в login_notify_method
active * int 1 - сделать ключ активным, 0 - отключить ключ
token * string сессионный токен

Примечание

При задании API-ключа для сервера указывайте login notify method равный none.

POST-запрос

curl -s "https://invapi.hostkey.ru/api_keys.php" -X POST \
--data "action=add" \
--data "params[name]={Имя API-ключа}" \
--data "params[server_id]={ID сервера}" \
--data "params[ip]={"белый список" IP-адресов} \
--data "params[login_notify_method]={`none`, `email` или `webhook`}" \
--data "params[login_notify_address]=" \
--data "params[active]={1 или 0}" \
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
    "result": "OK",
    "module": "api_keys",
    "action": "add",
    "data": {
        "id": 501, //ID API-ключа
        "name": "test key",
        "active": 1,
        "ip": "10.0.0.1 10.3.4.5",
        "server_id": 0,
        "token_view": "d981",
        "login_notify_method": "email",
        "login_notify_address": "hostkeyev_ivan@yandex.ru",
        "api_key": "d9815703f6f41d3f-5d52f141ff7ac755" // Сгенерированный API-ключ
    }
}

api_keys/edit

Позволяет отредактировать параметры API-ключа

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string edit ключевое действие - редактирование параметров API-ключа
id * int ID API-ключа (можно получить через вызов api_keys/list)
name * string наименование ключа (на английском)
ip string список IP адресов, только с которых разрешено использование данного ключа (например 10.0.0.2, 10.4.6.3/24)
login_notify_method * string выбор метода оповещения о логине с данным API-ключом (none, email, webhook)
login_notify_address string e-mail или адрес вебхука нотификации в зависимости от заданного значения в login_notify_method
active * int 1 - сделать ключ активным, 0 - отключить ключ
token * string сессионный токен

POST-запрос

curl -s "https://invapi.hostkey.ru/api_keys.php" -X POST \
--data "action=edit" \
--data "params[id]={ID API-ключа}" \ 
--data "params[name]={Имя API-ключа}" \
--data "params[ip]={IP-адреса ACL} \
--data "params[login_notify_method]={`none`, `email` или `webhook`}" \
--data "params[login_notify_address]=" \
--data "params[active]={1 или 0}" \
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
    "result": "OK",
    "module": "api_keys",
    "action": "edit",
    "data": {
        "id": 506
    }
}

api_keys/delete

Позволяет удалить API-ключ.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string delete ключевое действие - удаление API-ключа
id * int ID API-ключа (можно получить через вызов api_keys/list)
token * string сессионный токен

POST-запрос

curl -s "https://invapi.hostkey.ru/api_keys.php" -X POST \
--data "action=delete" \
--data "params[id]={ID API-ключа}" \ 
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
    "result": "OK",
    "module": "api_keys",
    "action": "delete",
    "data": {
        "id": 506
    }
}

api_keys/history

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string history ключевое действие - вывод информации об использовании API-ключа за определенный период
id * int ID API-ключа (можно получить через вызов api_keys/list)
period_from string Дата с которой необходимо вывести историю в формате Y-M-D
period_to string Дата по которую необходимо вывести историю в формате Y-M-D
token * string сессионный токен

POST-запрос

curl -s "https://invapi.hostkey.ru/api_keys.php" -X POST \
--data "action=history" \
--data "params[id]={ID API-ключа}" \ 
--data "params[period_from]={Дата начала вывода истории} \
--data "params[period_from]={Дата окончания вывода истории} \
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
    "result": "OK",
    "module": "api_keys",
    "action": "history",
    "data": [
        {
            "id": 20818097,
            "date": "2024-02-14 11:14:05",
            "message": "Deleted api_key 506. json:{\"id\":\"506\"}",
            "type": "action",
            "login": "hostkeyev_ivan@yandex.ru"
        },
        {
            "id": 20817742,
            "date": "2024-02-14 11:10:45",
            "message": "Changed api_key 506. name from 'test key 2' to 'new_new test', active from '1' to '0', ip from '10.0.0.1 10.3.4.5' to '78.8.8.6', login_notify_method from 'none' to 'email', login_notify_address from '' to 'dimitry.servers@example.net'",
            "type": "action",
            "login": "hostkeyev_ivan@yandex.ru"
        },
        {
            "id": 20817738,
            "date": "2024-02-14 11:10:45",
            "message": "Updated api_key 506. json:{\"id\":\"506\",\"name\":\"new_new test\",\"ip\":\"78.8.8.6\",\"login_notify_method\":\"email\",\"login_notify_address\":\"dimitry.servers@example.net\",\"active\":\"0\"}",
            "type": "action",
            "login": "hostkeyev_ivan@yandex.ru"
        },
        {
            "id": 20816506,
            "date": "2024-02-14 11:03:51",
            "message": "Created new api_key 506. json:{\"name\":\"test key 2\",\"ip\":\" 10.0.0.1, 10.3.4.5\",\"login_notify_method\":\"none\",\"active\":\"1\",\"server_id\":\"34533\"}",
            "type": "action",
            "login": "hostkeyev_ivan@yandex.ru"
        }
    ]
}

Авторизация

Ресурс Действие Описание
auth.php login получение сессионного токена через API KEY
auth.php whmcslogin получение сессионного токена через пару логин-пароль
auth.php logout удаление сессионного токена
auth.php info получение полных данные об оборудовании
eq.php set_pin установка/изменение PIN-кода
eq.php check_pin подтверждение введенного PIN-кода (опционально)

auth/login

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

Примечание

Наиболее важные данные — это токен (далее в примерах $HOSTKEY_TOKEN). Вся информация о данных токена и разрешениях хранится на сервере API, остальные данные помогают построить правильный веб-интерфейс для конкретной роли.

Токен обычно действителен в течение 2 часов, если требуется иное время жизни токена - его можно задать в секундах через параметр ttl. При повторном запросе токена в этот период будет предоставлен действующий токен. Токен обычно привязывается к IP пользователя, если это не нужно - привязку можно отменить через параметр fix_ix=0. Если токен привязан к IP и IP изменится, система выдаст ошибку и будет необходимо снова получить токен.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string login ключевое действие - получение сессионного токена
key * string ключ доступа к АПИ.
ttl int 7200 продолжительность сессии в секундах, по умолчанию - 7200 (2 часа)

POST-запрос

curl -s "https://invapi.hostkey.ru/auth.php" -X POST \
--data "action=login" \
--data "key={значение API-key из Invapi}" \
Пример положительного ответа
{
    "result": {
        "token": c92e48c4506320873286b84440e74sfd", // СЕССИОННЫЙ ТОКЕН
        "role": "Customer billing",
        "role_type": "Customer",
        "whmcs_id": 3172,
        "whmcs_location": "whmcs_itb",
        "servers": [
            34533
            32645
            17405
        ],
        "customer_id": 38157,
        "permissions": [ // СПИСОК API-ВЫЗОВОВ, ДОСТУПНЫХ ДЛЯ КОНКРЕТНОЙ РОЛИ
            "api_keys/edit",
            "api_keys/view",
            "auth/2fa_check",
            "auth/billing_list",
            "auth/flip_tag",
            "auth/sms_send",
            "customers/update_acl",
            "datacenter/list",
            "datacenter/show",
            "eq/add_ipmi_admin",
            "eq/add_ipmi_user",
            "eq/appraise",
            "eq/boot_dev",
            "eq/console",
            "eq/create_pxe",
            "eq/get_ipmi",
            "eq/get_traffic",
            "eq/list",
            "eq/novnc",
            "eq/off",
            "eq/on",
            "eq/order_instance",
            "eq/reboot",
            "eq/reinstall",
            "eq/remove_ipmi_user",
            "eq/sensors",
            "eq/set_pin",
            "eq/show",
            "eq/status",
            "eq/suspend",
            "eq/unit_reset",
            "eq/unsuspend",
            "foreman/get_hostgroup",
            "foreman/get_media",
            "foreman/get_network",
            "foreman/get_os",
            "foreman/get_ptable",
            "ip/get_ip",
            "ip/get_ptr",
            "ip/get_traffic",
            "ip/list_free_ip",
            "ip/set_main",
            "ip/update_ptr",
            "iso/list_iso",
            "iso/mount_iso",
            "iso/unmount_iso",
            "jenkins/call",
            "jenkins/get_tasks",
            "license/list",
            "location/list",
            "location/show",
            "locations/view",
            "nat/add_static_nat",
            "nat/remove_static_nat",
            "net/block_ip",
            "net/get_acl",
            "net/get_bps_in",
            "net/get_bps_out",
            "net/get_port",
            "net/get_pspeed",
            "net/get_snmp",
            "net/get_status",
            "net/ip_chart",
            "net/ip_settings",
            "net/nmap",
            "net/port_off",
            "net/port_on",
            "net/remove_ipv4",
            "net/show_cacti",
            "net/show_ip_graph",
            "net/unblock_ip",
            "os/list",
            "os/search",
            "paypal/check_order",
            "paypal/check_subscription",
            "paypal/create_order",
            "paypal/create_subscription",
            "pdns/add_dns",
            "pdns/add_domain",
            "pdns/add_subdomain",
            "pdns/create_dns",
            "pdns/create_zone",
            "pdns/delete_domain",
            "pdns/delete_zone",
            "pdns/edit",
            "pdns/get_domains",
            "pdns/get_subdomains",
            "pdns/get_zone",
            "pdns/list_domains",
            "pdns/list_servers",
            "pdns/list_subdomains",
            "pdns/view",
            "pdns/view_zone",
            "pdu/get",
            "presets/list",
            "presets/search",
            "soft/list",
            "ssh_keys/add",
            "ssh_keys/delete",
            "ssh_keys/list",
            "stocks/list",
            "stocks/show",
            "sumsub/get_token",
            "tag/add",
            "tag/clear",
            "tag/list",
            "tag/remove",
            "traffic_plans/list",
            "vat/check_vat",
            "vm/create_snapshot",
            "vm/get_engine",
            "vm/get_snapshot",
            "vm/load_stats",
            "vm/remove_snapshot",
            "vm/restore_snapshot",
            "whmcs/add_contact",
            "whmcs/add_os_addon",
            "whmcs/apply_credit",
            "whmcs/cancel_order",
            "whmcs/create_addfunds",
            "whmcs/delete_cancellation_request",
            "whmcs/delete_contact",
            "whmcs/download_invoice",
            "whmcs/generate_due_invoice",
            "whmcs/getcredits",
            "whmcs/getpaymentgw",
            "whmcs/get_billing_data",
            "whmcs/get_cancellation_requests",
            "whmcs/get_client",
            "whmcs/get_contacts",
            "whmcs/get_invoice",
            "whmcs/get_invoices",
            "whmcs/get_related_invoices",
            "whmcs/mass_pay",
            "whmcs/request_cancellation",
            "whmcs/transactions",
            "whmcs/update_client",
            "whmcs/update_contact",
            "whmcs/update_product",
            "whmcs/verify_address",
            "whmcs/verify_email",
            "yookassa/check_payment",
            "yookassa/init"
        ],
        "token_expire": 1702895140,
        "new": 1
    }
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "Invalid API key XXXXXXXXXXXXX-XXXXXXXXXXXXXXX"
}

auth/whmcslogin

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

HTTP-метод - POST

Примечание

Авторизация через пару логин-пароль производится ко всему аккаунту и всем его серверам. Если авторизация прошла успешно, то система вернет сессионный токен $HOSTKEY_TOKEN. Вы можете привязать сессионный токен к конкретному IP-адресу, тогда при заходе с другого IP вам придется получать его снова.

Внимание

Если у вас включена 2FA авторизация, то при этом вызове будет отправлен запрос на ваше 2FA устройство и вам нужно будет ввести код доступа.

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string whmcslogin ключевое действие - получение сессионного токена
user * string логин биллинга
password * string пароль биллинга
fix_ip int fix_ip=0 - не привязывать токен к адресу, fix_ip=1 - привязывать
ttl int 10800 продолжительность сессии в секундах, по умолчанию - 3600 (1 час)

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/auth.php" -X POST \
--data "action=whmcslogin" \
--data "user={login}" \
--data "password={password}"
Пример положительного ответа
{
    "result": {
        "token": c92e48c4506320873286b84440e74sfd", // СЕССИОННЫЙ ТОКЕН
        "role": "Customer billing", // РОЛЬ
        "role_type": "Customer", // ТИП РОЛИ
        "whmcs_id": 3172, // ID_УЧЕТНОЙ_ЗАПИСИ В БИЛЛИНГЕ
        "whmcs_location": "whmcs_itb", // ЗДЕСЬ УКАЗЫВАЕТСЯ КАКОЙ БИЛЛИНГ ИСПОЛЬЗУЕТСЯ
        "whmcs_token": null,
        "permissions": [ // СПИСОК API-ВЫЗОВОВ, ДОСТУПНЫХ ДЛЯ КОНКРЕТНОЙ РОЛИ
            "api_keys/edit",
            "api_keys/view",
            "auth/2fa_check",
            "auth/billing_list",
            "auth/flip_tag",
            "auth/sms_send",
            "customers/update_acl",
            "datacenter/list",
            "datacenter/show",
            "eq/add_ipmi_admin",
            "eq/add_ipmi_user",
            "eq/appraise",
            "eq/boot_dev",
            "eq/console",
            "eq/create_pxe",
            "eq/get_ipmi",
            "eq/get_traffic",
            "eq/list",
            "eq/novnc",
            "eq/off",
            "eq/on",
            "eq/order_instance",
            "eq/reboot",
            "eq/reinstall",
            "eq/remove_ipmi_user",
            "eq/sensors",
            "eq/set_pin",
            "eq/show",
            "eq/status",
            "eq/suspend",
            "eq/unit_reset",
            "eq/unsuspend",
            "foreman/get_hostgroup",
            "foreman/get_media",
            "foreman/get_network",
            "foreman/get_os",
            "foreman/get_ptable",
            "ip/get_ip",
            "ip/get_ptr",
            "ip/get_traffic",
            "ip/list_free_ip",
            "ip/set_main",
            "ip/update_ptr",
            "iso/list_iso",
            "iso/mount_iso",
            "iso/unmount_iso",
            "jenkins/call",
            "jenkins/get_tasks",
            "license/list",
            "location/list",
            "location/show",
            "locations/view",
            "nat/add_static_nat",
            "nat/remove_static_nat",
            "net/block_ip",
            "net/get_acl",
            "net/get_bps_in",
            "net/get_bps_out",
            "net/get_port",
            "net/get_pspeed",
            "net/get_snmp",
            "net/get_status",
            "net/ip_chart",
            "net/ip_settings",
            "net/nmap",
            "net/port_off",
            "net/port_on",
            "net/remove_ipv4",
            "net/show_cacti",
            "net/show_ip_graph",
            "net/unblock_ip",
            "os/list",
            "os/search",
            "paypal/check_order",
            "paypal/check_subscription",
            "paypal/create_order",
            "paypal/create_subscription",
            "pdns/add_dns",
            "pdns/add_domain",
            "pdns/add_subdomain",
            "pdns/create_dns",
            "pdns/create_zone",
            "pdns/delete_domain",
            "pdns/delete_zone",
            "pdns/edit",
            "pdns/get_domains",
            "pdns/get_subdomains",
            "pdns/get_zone",
            "pdns/list_domains",
            "pdns/list_servers",
            "pdns/list_subdomains",
            "pdns/view",
            "pdns/view_zone",
            "pdu/get",
            "presets/list",
            "presets/search",
            "soft/list",
            "ssh_keys/add",
            "ssh_keys/delete",
            "ssh_keys/list",
            "stocks/list",
            "stocks/show",
            "sumsub/get_token",
            "tag/add",
            "tag/clear",
            "tag/list",
            "tag/remove",
            "traffic_plans/list",
            "vat/check_vat",
            "vm/create_snapshot",
            "vm/get_engine",
            "vm/get_snapshot",
            "vm/load_stats",
            "vm/remove_snapshot",
            "vm/restore_snapshot",
            "whmcs/add_contact",
            "whmcs/add_os_addon",
            "whmcs/apply_credit",
            "whmcs/cancel_order",
            "whmcs/create_addfunds",
            "whmcs/delete_cancellation_request",
            "whmcs/delete_contact",
            "whmcs/download_invoice",
            "whmcs/generate_due_invoice",
            "whmcs/getcredits",
            "whmcs/getpaymentgw",
            "whmcs/get_billing_data",
            "whmcs/get_cancellation_requests",
            "whmcs/get_client",
            "whmcs/get_contacts",
            "whmcs/get_invoice",
            "whmcs/get_invoices",
            "whmcs/get_related_invoices",
            "whmcs/mass_pay",
            "whmcs/request_cancellation",
            "whmcs/transactions",
            "whmcs/update_client",
            "whmcs/update_contact",
            "whmcs/update_product",
            "whmcs/verify_address",
            "whmcs/verify_email",
            "yookassa/check_payment",
            "yookassa/init"
        ],
        "corporate": 0,
        "verified": null,
        "token_expire": 1703059226,
        "new": 0,
        "billing_options": {
            "location": "RU",
            "company": "ООО ИТБ",
            "active": 1,
            "allowed_payments": [
                "yookassa"
            ],
            "native_endpoint": "invapi.hostkey.ru"
        }
    },
    "timings": [ // ???
        {
            "init": 2
        },
        {
            "auth_log_start": 2
        },
        {
            "auth_log_done": 3
        },
        {
            "check_brute_done": 131
        },
        {
            "auth_find_customer_done": 3
        },
        {
            "check_whmcs_user at whmcs_itb": 469
        },
        {
            "log_brute_done": 5
        },
        {
            "usleep_done": 84
        },
        {
            "auth_get_hash_done": 2
        },
        {
            "hash_init_done": 5
        },
        {
            "auth_set_token_done": 423
        },
        {
            "auth_get_role_done": 1
        },
        {
            "auth_list_permissions_done": 2
        },
        {
            "auth_check_customer_init": 0
        },
        {
            "auth_check_customer_done": 5
        },
        {
            "auth_add_tags_done": 0
        },
        {
            "auth_log_time": [
                {
                    "add_log": 3
                },
                {
                    "amqp_sendmessage": 28
                }
            ]
        },
        {
            "whmcslogin total": 1166
        }
    ]
}
Пример ответа при ошибке
{
    "result": -2,
    "error": "auth: authenthication failure  " // ОПИСАНИЕ ВНУТРЕННЕЙ ОШИБКИ
    "details": // ДЕТАЛИ ОШИБКИ ИЗ WHMCS
}

auth/logout

Позволяет завершить клиентскую сессию.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string logout ключевое действие - удаление сессионного токена из базы данных. После завершения сеанса следует выйти из системы. Это позволяет избежать возможных проблем с безопасностью
token * string токен для удаления

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/auth.php" -X POST \
--data "action=logout" \
--data "token=$HOSTKEY_TOKEN"

auth/info

Позволяет получить данные о пользователе (доступные API-запросы, тип и роль аккаунта и id-серверов привязанных к учетной записи)

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string info ключевое действие - возвращает полные данные о токене, включая id сервера. Данные о серверах представляют собой список id серверов, которые связаны с платежной учетной записью. Эти данные можно использовать для управления оборудованием
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/auth.php" -X POST \
--data "action=info" \
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
    "result": {
        "servers": { //ID-СЕРВЕРОВ, ПРИВЯЗАННЫХ К УЧЕТНОЙ ЗАПИСИ
            "34533": "34533"
            "32645": "32645"
            "17405": "17405"
        },
        "show_products": 1,
        "manage_products": 1,
        "show_invoices": 1,
        "manage_orders": 1,
        "email": "customer1@example.net",
        "token_expire": 1703059020,
        "whmcs_id": "3172",
        "whmcs_location": "whmcs_itb",
        "billing_servers": [],
        "deploy_keys": [],
        "permissions": [ // СПИСОК API-ВЫЗОВОВ, ДОСТУПНЫХ ДЛЯ КОНКРЕТНОЙ РОЛИ
            "api_keys/edit",
            "api_keys/view",
            "auth/2fa_check",
            "auth/billing_list",
            "auth/flip_tag",
            "auth/sms_send",
            "customers/update_acl",
            "datacenter/list",
            "datacenter/show",
            "eq/add_ipmi_admin",
            "eq/add_ipmi_user",
            "eq/appraise",
            "eq/boot_dev",
            "eq/console",
            "eq/create_pxe",
            "eq/get_ipmi",
            "eq/get_traffic",
            "eq/list",
            "eq/novnc",
            "eq/off",
            "eq/on",
            "eq/order_instance",
            "eq/reboot",
            "eq/reinstall",
            "eq/remove_ipmi_user",
            "eq/sensors",
            "eq/set_pin",
            "eq/show",
            "eq/status",
            "eq/suspend",
            "eq/unit_reset",
            "eq/unsuspend",
            "foreman/get_hostgroup",
            "foreman/get_media",
            "foreman/get_network",
            "foreman/get_os",
            "foreman/get_ptable",
            "ip/get_ip",
            "ip/get_ptr",
            "ip/get_traffic",
            "ip/list_free_ip",
            "ip/set_main",
            "ip/update_ptr",
            "iso/list_iso",
            "iso/mount_iso",
            "iso/unmount_iso",
            "jenkins/call",
            "jenkins/get_tasks",
            "license/list",
            "location/list",
            "location/show",
            "locations/view",
            "nat/add_static_nat",
            "nat/remove_static_nat",
            "net/block_ip",
            "net/get_acl",
            "net/get_bps_in",
            "net/get_bps_out",
            "net/get_port",
            "net/get_pspeed",
            "net/get_snmp",
            "net/get_status",
            "net/ip_chart",
            "net/ip_settings",
            "net/nmap",
            "net/port_off",
            "net/port_on",
            "net/remove_ipv4",
            "net/show_cacti",
            "net/show_ip_graph",
            "net/unblock_ip",
            "os/list",
            "os/search",
            "paypal/check_order",
            "paypal/check_subscription",
            "paypal/create_order",
            "paypal/create_subscription",
            "pdns/add_dns",
            "pdns/add_domain",
            "pdns/add_subdomain",
            "pdns/create_dns",
            "pdns/create_zone",
            "pdns/delete_domain",
            "pdns/delete_zone",
            "pdns/edit",
            "pdns/get_domains",
            "pdns/get_subdomains",
            "pdns/get_zone",
            "pdns/list_domains",
            "pdns/list_servers",
            "pdns/list_subdomains",
            "pdns/view",
            "pdns/view_zone",
            "pdu/get",
            "presets/list",
            "presets/search",
            "soft/list",
            "ssh_keys/add",
            "ssh_keys/delete",
            "ssh_keys/list",
            "stocks/list",
            "stocks/show",
            "sumsub/get_token",
            "tag/add",
            "tag/clear",
            "tag/list",
            "tag/remove",
            "traffic_plans/list",
            "vat/check_vat",
            "vm/create_snapshot",
            "vm/get_engine",
            "vm/get_snapshot",
            "vm/load_stats",
            "vm/remove_snapshot",
            "vm/restore_snapshot",
            "whmcs/add_contact",
            "whmcs/add_os_addon",
            "whmcs/apply_credit",
            "whmcs/cancel_order",
            "whmcs/create_addfunds",
            "whmcs/delete_cancellation_request",
            "whmcs/delete_contact",
            "whmcs/download_invoice",
            "whmcs/generate_due_invoice",
            "whmcs/getcredits",
            "whmcs/getpaymentgw",
            "whmcs/get_billing_data",
            "whmcs/get_cancellation_requests",
            "whmcs/get_client",
            "whmcs/get_contacts",
            "whmcs/get_invoice",
            "whmcs/get_invoices",
            "whmcs/get_related_invoices",
            "whmcs/mass_pay",
            "whmcs/request_cancellation",
            "whmcs/transactions",
            "whmcs/update_client",
            "whmcs/update_contact",
            "whmcs/update_product",
            "whmcs/verify_address",
            "whmcs/verify_email",
            "yookassa/check_payment",
            "yookassa/init"
        ],
        "role_type": "Customer",
        "role_name": "Customer billing",
        "verified": null,
        "sumsub_id": null,
        "sumsub_comment": null,
        "corporate": 0,
        "tags": [
            {
                "id": 582523,
                "component": "customers",
                "component_id": 38157,
                "tag": "email_verification",
                "value": "verified",
                "extra": "1699523441",
                "internal": 0
            }
        ],
        "billing_options": {
            "url": "https://billing-itb.hostkey.ru/",
            "location": "RU",
            "company": "ООО ИТБ",
            "active": 1,
            "allowed_payments": [
                "yookassa"
            ],
            "native_endpoint": "invapi.hostkey.ru"
        },
        "client_ip": "185.130.215.70",
        "timing": [
            {
                "auth_validate_token": 0
            },
            {
                "auth_tags": 0
            },
            {
                "auth_get_role": 0
            },
            {
                "whmcs_get_server_raw": 0
            },
            {
                "eq_search": 0
            },
            {
                "add new tags": 0
            },
            {
                "list_permissions": 0
            },
            {
                "private_block": 0
            },
            {
                "auth_log": 0
            }
        ]
    }
}
Пример ответа при ошибке
{
    "result": -2,
    "error": "auth: invalid token #13"
}

PIN-коды

Мы стремимся обеспечить безопасность серверов наших клиентов даже в случае утечки данных. Подобная ситуация может произойти на устройстве каждого пользователя. Поэтому мы рекомендуем дополнительно задать PIN-код, который система будет запрашивать для каждой важной операции сервера. По умолчанию PIN-код не установлен.

Хеши PIN-кодов хранятся отдельно от наших баз данных счетов и технического учета.

Примечание

  • PIN-код — это короткий пароль для обеспечения безопасности оборудования. Его следует запомнить, а не хранить на каком-либо электронном носителе. Мы можем сбросить его только после письменного обращения в службу поддержки и после дополнительной проверки безопасности.
  • Большинство функций управления не будут работать без ввода PIN-кода или с пустым PIN-кодом. Он должен быть установлен один раз.

eq/set_pin

Позволяет установить/изменить PIN клиента.

HTTP-метод - POST/GET

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string set_pin ключевое действие - Установка/изменение PIN-кода
token * string сессионный токен
old_pin если изменяется int старый PIN-код
new_pin * int новый PIN-код

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=set_pin" \
--data "token=$HOSTKEY_TOKEN" \
--data "old_pin={ТЕКУЩИЙ PIN}" \
--data "new_pin={НОВЫЙ PIN}"
Пример положительного ответа
{
    "result": "OK",
    "action": "set_pin",
    "callback": "3783cb445aa491d0affc85bc0a8804bc" //ключ для асинхронного запроса
}
Пример ответа при ошибке

``` bash

{ "result": "Fail", "scope": "Invalid PIN/email combination, please check", "context": { "action": "set_pin", "id": "0" }, "status": "failure", "created": "2021-05-17 21:07:55", "debug": null, "key": "4746d646be54d7805f10e1b6c4f003bb" } ```

Для этого действия есть соответствующий асинхронный ответ

Примечание

Проверить корректность смены PIN-кода можно через вызов eq/check_pin.

eq/check_pin

Позволяет подтвердить корректность введенного PIN клиента.

HTTP-метод - POST/GET

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string check_pin ключевое действие - подтверждение введенного PIN-кода
token * string сессионный токен
old_pin если изменяется int PIN-код

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=check_pin" \
--data "token=$HOSTKEY_TOKEN" \
--data "pin={PIN}"
Пример положительного ответа
{
    "result": "OK",
    "action": "check_pin",
    "callback": "85dab623da4d091884a86a33ee05ce41" //ключ для асинхронного запроса
}
Пример ответа при ошибке
{
"result": "OK",
"scope": "Invalid pin code",
"context": {
"action": "check_pin",
"id": "0"
},
"debug": "Blocked For Security Purposes",
"key": "d862ecc7ea64c5af55f39b132f3b7502"
}
Для этого действия есть соответствующий асинхронный ответ
{
    "result": "OK",
    "scope": "Valid pin code",
    "context": {
        "action": "check_pin",
        "id": "0"
    },
    "debug": "Blocked For Security Purposes",
    "key": "b51fd9af35bf5c762bb7a8ef1cf0c69d"
}

Внимание

После нескольких сбоев API будет возвращать только отрицательные ответы с большими задержками, чтобы избежать брутфорса.

Взаимодействие с биллингом

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

Ресурс Действие Описание
whmcs.php get_client получение информации о клиенте
whmcs.php update_client изменить данные по учетной записи клиента
whmcs.php reset_password сбросить пароль
whmcs.php get_contacts получить список дополнительных контактов для учетной записи клиента
whmcs.php add_contact добавить дополнительный контакт для учетной записи
whmcs.php update_contact изменить данные по дополнительному контакту
whmcs.php delete_contact удалить дополнительный контакт
whmcs.php getpaymentgw получение информации о том, как оплатить счет
whmcs.php get_billing_data получение информации об оплате аренды сервера или иного продукта
whmcs.php getcredits получить информацию по движению средств на лицевом счете учетной записи, все начисления и списания кредитов
whmcs.php generate_due_invoice создать следующий счет на оплату для сервера
whmcs.php transactions получить список транзакций по учетной записи клиента
whmcs.php mass_pay создать групповой счет на оплату из нескольких счетов
whmcs.php download_invoice загрузить счет в формате pdf
whmcs.php get_related_invoices получить список счетов для конкретного сервера
whmcs.php apply_credit оплатить счет с кредитного баланса, полностью или частично
whmcs.php create_addfunds создать счет на пополнение кредитного баланса
whmcs.php get_invoice получить данные по счету на оплату
whmcs.php get_invoices получить общий список счетов на оплату
whmcs.php request_cancellation запросить отмену услуги
whmcs.php delete_cancellation_request отменить запрос на расформирование сервиса
whmcs.php get_cancellation_requests получить активный список запросов на расформирование сервисов

whmcs/get_client

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string get_client ключевое действие - получение информации о клиенте
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=get_client" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "success",
    "client": {
        "userid": 3172,
        "id": 3172, //ID КЛИЕНТА
        "uuid": "b6d0bd75-1bd1-4ffc-9ec5-3870668b1ea9",
        "firstname": "Иван", // ИМЯ КЛИЕНТА
        "lastname": "Хосткеев", // ФАМИЛИЯ КЛИЕНТА
        "fullname": "Иван Хосткеев", // ПОЛНЫЕ ИМЯ-ФАМИЛИЯ
        "companyname": "",
        "email": "hostkeyev_ivan@yandex.ru", // E-MAIL КЛИЕНТА
        "address1": "Советская 3-56", // АДРЕС КЛИЕНТА
        "address2": "",
        "city": "Москва", //ГОРОД
        "fullstate": "",
        "state": "", // РЕГИОН
        "postcode": "105187", // ИНДЕКС
        "countrycode": "RU", // КОД СТРАНЫ
        "country": "RU", // СТРАНА
        "phonenumber": "79658742356", // ТЕЛЕФОННЫЙ НОМЕР
        "tax_id": "",
        "password": "",
        "email_preferences": {
            "general": 1,
            "invoice": 1,
            "support": 1,
            "product": 1,
            "domain": 1,
            "affiliate": 1
        },
        "statecode": "",
        "countryname": "Russian Federation", // НАЗВАНИЕ СТРАНЫ
        "phonecc": 7, // ТЕЛЕФОННЫЙ КОД СТРАНЫ
        "phonenumberformatted": "+7.79658742356", 
        "telephoneNumber": "79658742356", // ТЕЛЕФОННЫЙ НОМЕР
        "billingcid": 0,
        "twofaenabled": false,
        "currency": 2,
        "defaultgateway": "",
        "groupid": 2,
        "status": "Active",
        "credit": "99526.39",
        "taxexempt": false,
        "latefeeoveride": false,
        "overideduenotices": false,
        "separateinvoices": false,
        "disableautocc": false,
        "emailoptout": false,
        "marketing_emails_opt_in": true,
        "overrideautoclose": false,
        "allowSingleSignOn": 1,
        "email_verified": false,
        "language": "",
        "isOptedInToMarketingEmails": true,
        "lastlogin": "Date: 09/11/2023 12:27<br>IP Address: 10.70.16.23<br>Host: 10.70.16.23", // ДАТА, IP-АДРЕС И IP-ХОСТА
        "currency_code": "RUB", //КОД ВАЛЮТЫ
        "co_autopayment": {
            "name": "Автоплатежи включены",
            "type": "checkbox",
            "required": false,
            "value": ""
        },
        "co_payfirstday": {
            "name": "Услуги на 1 число",
            "type": "checkbox",
            "required": false,
            "value": ""
        },
        "co_marktemails": {
            "name": "Маркетинговые письма",
            "type": "checkbox",
            "required": false,
            "value": "on"
        },
        "co_subscription": {
            "name": "Автоплатежи через Юkassa",
            "type": "text",
            "size": 40,
            "required": false,
            "value": ""
        },
        "co_marktsms": {
            "name": "Маркетинговые SMS",
            "type": "checkbox",
            "required": false,
            "value": "on"
        },
        "co_smsnum": {
            "name": "SMS номер для 2FA и уведомлений",
            "type": "text",
            "size": 26,
            "required": false,
            "placeholder": "+79031234567",
            "value": "79658742356"
        },
        "co_customertype": {
            "name": "Тип клиента",
            "type": "select",
            "options": [
                "Физическое лицо",
                "Юридическое лицо"
            ],
            "required": true,
            "value": "Физическое лицо"
        },
        "co_inn": {
            "name": "ИНН",
            "type": "text",
            "size": 26,
            "required": false,
            "value": ""
        },
        "co_kpp": {
            "name": "КПП",
            "type": "text",
            "size": 26,
            "required": false,
            "value": ""
        },
        "co_regaddress": {
            "name": "Юридический адрес",
            "type": "text",
            "size": 100,
            "required": false,
            "value": ""
        },
        "co_bankdata": {
            "name": "Банковские реквизиты",
            "type": "text",
            "size": 100,
            "required": false,
            "value": ""
        },
        "co_edo": {
            "name": "ЭДО подключен",
            "type": "select",
            "options": [
                "Да",
                "Нет"
            ],
            "required": true,
            "value": "Нет"
        },
        "co_secret": {
            "name": "Секретное слово",
            "type": "text",
            "size": 26,
            "required": true,
            "value": "орбита"
        },
        "co_skype": {
            "name": "Skype/Telegram",
            "type": "text",
            "size": 26,
            "required": false,
            "value": ""
        },
        "co_edoprovider": {
            "name": "Провайдер ЭДО",
            "type": "text",
            "size": 26,
            "required": false,
            "value": ""
        }
    },
    "billing_location": "whmcs_itb",
    "groupdata": {
        "id": 2,
        "groupname": "Customers",
        "groupcolour": "#ffffff",
        "discountpercent": "0.00",
        "susptermexempt": "",
        "separateinvoices": ""
    },
    "internal": {
        "id": 38157,
        "billing": "whmcs_itb",
        "account_id": 3172,
        "email": "hostkeyev_ivan@yandex.ru",
        "active_since": "2023-11-09",
        "monthly": null,
        "verified": null,
        "corporate": 0,
        "tags": [
            {
                "id": 582523,
                "component": "customers",
                "component_id": 38157,
                "tag": "email_verification",
                "value": "verified",
                "extra": "1699523441",
                "internal": 0
            }
        ]
    }
}

whmcs/update_client

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string update_client ключевое действие - изменение данных учетной записи клиента
token * string сессионный токен
billing_status string Статус биллинга
billing_firstname string Имя клиента
billing_lastname string Фамилия клиента
billing_companyname string Название компании
billing_email string Электронная почта клиента
billing_address1 string Строка адреса клиента 1
billing_address2 string Строка адреса клиента 2
billing_city string Город адреcа клиента
billing_state string Регион адреса клиента
billing_postcode string Индекс адреса клиента
billing_country string Страна адреса клиента
billing_phonenumber string Номер телефона клиента
billing_twofaenabled string Включение двухфакторной авторизации (true/false)
billing_currency int Валюта рассчетов 1 - EUR , 2 - RUB , 3 - USD
billing_groupid int (1/0)
billing_taxexempt string (true/false)
billing_latefeeoveride string (true/false)
billing_overideduenotices string (true/false)
billing_separateinvoices string (true/false)
billing_disableautocc string (true/false)
billing_emailoptout string (true/false)
billing_marketingoptin string Подписка на маркетинговые рассылки (true/false)
billing_overrideautoclose string (true/false)
billing_allowSingleSignOn int (1/0)
co_autopayment checkbox Включение автоплатежей (on/off)
co_payfirstday checkbox Оплата в первый день месяца (on/off)
co_marktemails checkbox Маркетинговые письма (on/off)
co_subscription string Автоплатежи через сервис. Для РФ Youcassa
co_marktsms checkbox Разрешение маркетинговых рассылок (on/off)
co_smsnum string Номер для отправки СМС-уведомлений или кода для 2FA аутентификации
co_customertype string Тип клиента: Физическое лицо/Юридическое лицо
co_inn string ИНН клиента
co_kpp string КПП клиента
co_regaddress string Юридический адрес клиента
co_bankdata string Банковские реквизиты клиента
co_edo select Подключен ли ЭДО (да/нет)
co_secret string Секретное слово
co_edoprovider string Провайдер ЭДО
co_skype string адрес Skype/Telegram

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=update_client" \
--data "billing_firstname={ИМЯ} \
    ...
--data "co_smsnum=79658742356" \
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
    "result": "success",
    "clientid": "3172"
}

whmcs/reset_password

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

Внимание

Параметр email должен совпадать с e-mail клиента в аккаунте сбрасываемого пароля.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string reset_password ключевое действие - сброс пароля аккаунта клиента
token * string сессионный токен
email * string на указанный email будет отправлена ссылка на сброс пароля

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=reset_password" \
--data "email={e-mail для получения ссылки на сброс пароля}" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "OK",
    "message": "Password reset link was sent to the registred email.",
    "debug": {
        "result": "success"
    }
}
Пример ответа при ошибке
{
    "result": -1,
    "message": "Failed to identify the customer's billing, please contact support"
}

whmcs/get_contacts

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string get_contacts ключевое действие - получить список дополнительных контактов для учетной записи
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=get_contacts" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "success",
    "contacts": [
        {
            "id": 121, // ID ДОПОЛНИТЕЛЬНОГО КОНТАКТА
            "userid": 3172,
            "firstname": "Дмитрий", 
            "lastname": "Серверный",
            "companyname": "",
            "email": "dima_server@mail.ru",
            "address1": "",
            "address2": "",
            "city": "",
            "state": "",
            "postcode": "",
            "country": "RU",
            "phonenumber": "",
            "tax_id": "",
            "subaccount": 1,
            "password": "$2y$10$pSlFQ1Vvq0UcKD5eE9dZ2.J5s779skGChaD0fPJB7ooURi1/KnDJm",
            "permissions": "",
            "domainemails": 0,
            "generalemails": 0,
            "invoiceemails": 0,
            "productemails": 0,
            "supportemails": 0,
            "affiliateemails": 0,
            "pwresetkey": "",
            "created_at": "0000-00-00 00:00:00",
            "updated_at": "2023-12-22 11:31:45",
            "pwresetexpiry": "0000-00-00 00:00:00"
        }
    ]
}

whmcs/add_contact

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string add_contact ключевое действие - добавить дополнительный контакт для учетной записи
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=add_contact" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "success",
    "contactid": 121 //ID ДОПОЛНИТЕЛЬНОГО КОНТАКТА
}

Внимание

Новый дополнительный контакт будет создан со случайной 'электронной почтой. Ее обязательно надо поменять через интерфейс INVAPI.

whmcs/update_contact

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string update_contact ключевое действие - изменить данные по дополнительному контакту
contact_id * int id дополнительного контакта
email * string e-mail дополнительного контакта для учетной записи
password2 string новый пароль дополнительного контакта
phonenumber int номер телефона дополнительного контакта. Добавление номера включает 2FA через СМС.
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=update_contact" \
--data "contact_id=121" \
--data "token=29cfb2b6fb8f1bc838455fe36e032aaa" \
--data "email=dima_server@mail.ru" \
--data "phonenumber=+79656754663" \
--data "password2=4321" \
Пример положительного ответа
    "result": "success",
    "contactid": 121 //ID ДОПОЛНИТЕЛЬНОГО КОНТАКТА

whmcs/delete_contact

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string delete_contact ключевое действие - удаление дополнительного контакт для учетной записи
contact_id * int id дополнительного контакта
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=add_contact" \
--data "contact_id={id дополнительного контакта}" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "success",
    "message": "119"
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "whmcs/delete_contact: verification failed, subcontact not found"
}

whmcs/getpaymentgw

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string getpaymentgw ключевое действие - получить информацию о способах оплаты счета
invoice_id * int ID инвойса
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=getpaymentgw" \
--data "invoice_id={ID инвойса}" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "OK",
    "methods": {
        "banktransfer": {
            "name": "Банковский перевод",
            "call": "<span style='text-align:left'>Please wire funds in favor of: <p>ООО «АЙТИБ» <br />\r\nр/с: 40702810100000239343<br />\r\nБанк: АО &quot;РАЙФФАЙЗЕНБАНК<br />\r\nк/с: 30101810200000000700<br />\r\nБИК: 044525700<br />Номер счета: 18580</p>"
        },
        "yookassa": {
            "name": "Yoomoney",
            "call": "\r\n\n    <form target=_blank  action=\"https://invapi.hostkey.ru/yookassa_send.php\" method=\"POST\">\r\n\n    <input type=\"hidden\" name=\"shopId\" value=\"\">\r\n\n    <input type=\"hidden\" name=\"scid\" value=\"\">\r\n\n    <input type=\"hidden\" name=\"customerNumber\" value=\"akdengi@yandex.ru\">\r\n\n    <input type=\"hidden\" name=\"sum\" value=\"0.00\">\r\n\n    <input type=\"hidden\" name=\"orderNumber\" value=\"18580\">\r\n\r\n\n    <input type=\"hidden\" name=\"url\" value=\"https://yoomoney.ru\">\r\n\n    <input type=\"submit\" value=\"Оплатить\"> \r\n\n    </form>"
        }
    }
}

whmcs/get_billing_data

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

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string get_billing_data ключевое действие - получение информации об оплате аренды сервера или иного продукта
id * int ID сервера
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=get_billing_data" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \ 
Пример положительного ответа
{
    "IP": "ru-vmmini", // имя хоста/IP из биллинга
    "client_id": 3172, // ID клиента в WHMCS
    "order_id": 5448, // ID заказа в WHMCS
    "suspend_reason": "", // Здесь будет указана причина, по которой приостановлена работа сервера (если произошла такая ситуация)
    "billing_setupfee": "500.00", // Сумма первоначального платежа
    "product_id": 5724, // ID продукта WHMCS
    "whmcs_location": "whmcs_itb", // платежная идентификация. itb - RU или COM для остальных
    "billing_status": "Active", // Статус биллинга сервера
    "reg_date": "2023-12-14", // Дата начала обслуживания
    "billing_cycle": "Monthly", // Платежный цикл
    "next_due_date": "2024-01-14", // Срок следующего платежа
    "billing_reccuring": "500.00", // Размер регулярного платежа
    "billing_name": "Услуги по предоставлению вычислительных мощностей (Instant server RU)",
    "billing_dedicatedip": "31.207.44.105",
    "billing_domain": "ru-vmmini",
    "promoid": 0,
    "terminationdate": null,
    "subscriptionid": "",
    "overideautosuspend": 0,
    "overidesuspenduntil": "0000-00-00",
    "currencyprefix": "", //Символ валюты
    "currencysuffix": "RUB",  // Название валюты
    "is_company": 0,
    "tax_id": "",
    "groupdata": {
        "id": 2,
        "groupname": "Customers",
        "groupcolour": "#ffffff",
        "discountpercent": "0.00",
        "susptermexempt": "",
        "separateinvoices": ""
    },
    "days_left": 23,
    "customer_name": "Иван Хосткеев", // Имя клиента
    "customer_email": "hostkeyev_ivan@yandex.ru", // Электронная почта клиента
    "result": "OK"
}

whmcs/getcredits

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

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string getcredit ключевое действие - получить информацию по движению средств на лицевом счете учетной записи, все начисления и списания кредитов
id * int ID сервера
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=getcredits" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "OK",
    "message": {
        "result": "success",
        "totalresults": 5,
        "clientid": 3172,
        "credits": {
            "credit": [
                {
                    "id": 2526,
                    "date": "2023-11-09",
                    "description": "Credit Applied to Invoice #10116",
                    "amount": "-250.00",
                    "relid": 0
                },
                {
                    "id": 3905,
                    "date": "2023-12-06",
                    "description": "Мы вернули 26.39 RUB (исходя из оставшихся 76 часов по ставке 0.3472/час) на лицевой счет за сервер 22777. Сервер использовался 644 из 720 часов в оплаченном платежном периоде.",
                    "amount": "26.39",
                    "relid": 0
                },
                {
                    "id": 4657,
                    "date": "2023-12-14",
                    "description": "Credit Applied to Invoice #18580",
                    "amount": "-500.00",
                    "relid": 0
                }
            ]
        }
    }
}

whmcs/generate_due_invoice

Позволяет создать следующий счет на оплату для сервера

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string generate_due_invoice ключевое действие - создать следующий счет на оплату для сервера
id * int ID сервера
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=generate_due_invoice" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \ 
Пример положительного ответа
{
"result": "OK",
"invoices": 1
}
Пример ответа при ошибке
{
"result": -1,
"error": "whmcs/generate_due_invoice: permission denied #3, this is not your server"
}

whmcs/transactions

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

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string transactions ключевое действие - получить список транзакций по учетной записи клиента.
invoice_id int номер счета, по которому нужны транзакции
transaction_id int ID транзакции для получения информации
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=transactions" \
--data "token=$HOSTKEY_TOKEN" \
--data "invoice_id={ID инвойса}" \ 
--data "transaction_id={ID транзакции}" \    
Пример положительного ответа
{
    "result": "OK",
    "transactions": []
}

whmcs/mass_pay

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

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string mass_pay ключевое действие - создать групповой счет на оплату из нескольких счетов.
invoices[] * array массив из номеров счетов
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=mass_pay" \
--data "token=$HOSTKEY_TOKEN" \
--data "invoices[]={ID инвойса 1}" \
--data "invoices[]={ID инвойса 2}" \
...
--data "invoices[]={ID инвойса N}" \
Пример положительного ответа
{
    "result": "OK",
    "invoiceid": 23455
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "whmcs/mass_pay: invalid request"
}

whmcs/download_invoice

Позволяет выгрузить счет в формате pdf.

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string download_invoice ключевое действие - выгрузить счет в формате pdf
invoice_id * int номер счета для выгрузки
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=download_invoice" \
--data "token=$HOSTKEY_TOKEN" \
--data "invoice_id={ID инвойса}" \
Пример положительного ответа

Счет ID инвойса в PDF

Пример ответа при ошибке
{
    "result": -1,
    "error": "whmcs/download_invoice: Invalid invoice ID"
}

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

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string get_related_invoices ключевое действие - загрузить счет в формате pdf
id * int ID сервера
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=get_related_invoices" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \
Пример положительного ответа
{
    "result": "success",
    "invoices": [
        {
            "id": 23451,
            "userid": 3172,
            "invoicenum": "",
            "date": "2023-12-25",
            "duedate": "2024-01-14",
            "datepaid": "0000-00-00 00:00:00",
            "last_capture_attempt": "0000-00-00 00:00:00",
            "date_refunded": "0000-00-00 00:00:00",
            "date_cancelled": "0000-00-00 00:00:00",
            "subtotal": "500.00",
            "credit": "0.00",
            "tax": "0.00",
            "tax2": "0.00",
            "total": "500.00",
            "taxrate": "0.00",
            "taxrate2": "0.00",
            "status": "Unpaid",
            "paymentmethod": "yookassa",
            "paymethodid": null,
            "notes": "",
            "created_at": "2023-12-25 11:20:31",
            "updated_at": "2023-12-25 11:20:31"
        },
        {
            "id": 18580,
            "userid": 3172,
            "invoicenum": "",
            "date": "2023-12-14",
            "duedate": "2023-12-29",
            "datepaid": "2023-12-14 05:54:52",
            "last_capture_attempt": "0000-00-00 00:00:00",
            "date_refunded": "0000-00-00 00:00:00",
            "date_cancelled": "0000-00-00 00:00:00",
            "subtotal": "500.00",
            "credit": "500.00",
            "tax": "0.00",
            "tax2": "0.00",
            "total": "0.00",
            "taxrate": "0.00",
            "taxrate2": "0.00",
            "status": "Paid",
            "paymentmethod": "yookassa",
            "paymethodid": null,
            "notes": "",
            "created_at": "2023-12-14 05:54:31",
            "updated_at": "2023-12-14 05:54:52"
        }
    ]
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "whmcs/get_related_invoices: permission denied #3, this is not your server"
}

whmcs/apply_credit

Позволяет оплатить счет с кредитного баланса, полностью или частично.

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string apply_credit ключевое действие - оплатить счет с кредитного баланса
invoice_id * int номер счета для оплаты
amount * int сумма пополнения
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=apply_credit" \
--data "token=$HOSTKEY_TOKEN" \
--data "invoice_id={ID инвойса}" \
--data "amount={Сумма для оплаты в валюте аккаунта}" \
Пример положительного ответа
{
    "result": "success",
    "invoiceid": 23449,
    "amount": 300,
    "invoicepaid": "true"
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "whmcs/apply_credit: invalid invoice id"
}

whmcs/create_addfunds

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string create_addfundst ключевое действие - создание счета для пополнения баланса
amount * int сумма пополнения
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=create_addfunds" \
--data "amount={Сумма для оплаты в валюте аккаунта}" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
Response:
{
"result":"OK",
"invoice":196727,
"message":"Invoice 196727 created"
}

whmcs/get_invoice

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

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string get_invoice ключевое действие - получить данные по счету на оплату
invoice_id * int номер счета для оплаты
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=get_invoice" \
--data "token=$HOSTKEY_TOKEN" \
--data "invoice_id={ID инвойса}" \
Пример положительного ответа
{
    "result": "success",
    "invoiceid": 23455,
    "invoicenum": "",
    "userid": 3172,
    "date": "2023-12-25",
    "duedate": "2023-12-25",
    "datepaid": "0000-00-00 00:00:00",
    "lastcaptureattempt": "0000-00-00 00:00:00",
    "subtotal": "800.00",
    "credit": "0.00",
    "tax": "0.00",
    "tax2": "0.00",
    "total": "800.00",
    "balance": "800.00",
    "taxrate": "0.00",
    "taxrate2": "0.00",
    "status": "Unpaid",
    "paymentmethod": "yookassa",
    "notes": "",
    "ccgateway": false,
    "items": {
        "item": [
            {
                "id": 25727,
                "type": "Invoice",
                "relid": 23449,
                "description": "Invoice #23449",
                "amount": "300.00",
                "taxed": 0,
                "inv_id": -1
            },
            {
                "id": 25731,
                "type": "Invoice",
                "relid": 23451,
                "description": "Invoice #23451",
                "amount": "500.00",
                "taxed": 0,
                "inv_id": -1
            }
        ]
    },
    "transactions": ""
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "whmcs/get_invoice: invalid invoice id 23457 at whmcs_itb"
}

whmcs/get_invoices

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

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string get_invoices ключевое действие - получение общего списка счетов на оплату
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=get_invoices" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "success",
    "totalresults": 6,
    "numreturned": 5,
    "invoices": {
        "invoice": [
            {
                "id": 23455,
                "userid": 3172,
                "firstname": "Иван",
                "lastname": "Хосткеев",
                "companyname": "",
                "invoicenum": "",
                "date": "2023-12-25",
                "duedate": "2023-12-25",
                "datepaid": "0000-00-00 00:00:00",
                "last_capture_attempt": "0000-00-00 00:00:00",
                "date_refunded": "0000-00-00 00:00:00",
                "date_cancelled": "0000-00-00 00:00:00",
                "subtotal": "800.00",
                "credit": "0.00",
                "tax": "0.00",
                "tax2": "0.00",
                "total": "800.00",
                "taxrate": "0.00",
                "taxrate2": "0.00",
                "status": "Unpaid",
                "paymentmethod": "yookassa",
                "paymethodid": null,
                "notes": "",
                "created_at": "2023-12-25 12:01:27",
                "updated_at": "2023-12-25 12:01:27",
                "currencycode": "RUB",
                "currencyprefix": "",
                "currencysuffix": "RUB"
            },
            {
                "id": 23451,
                "userid": 3172,
                "firstname": "Иван",
                "lastname": "Хосткеев",
                "companyname": "",
                "invoicenum": "",
                "date": "2023-12-25",
                "duedate": "2024-01-14",
                "datepaid": "0000-00-00 00:00:00",
                "last_capture_attempt": "0000-00-00 00:00:00",
                "date_refunded": "0000-00-00 00:00:00",
                "date_cancelled": "0000-00-00 00:00:00",
                "subtotal": "500.00",
                "credit": "0.00",
                "tax": "0.00",
                "tax2": "0.00",
                "total": "500.00",
                "taxrate": "0.00",
                "taxrate2": "0.00",
                "status": "Unpaid",
                "paymentmethod": "yookassa",
                "paymethodid": null,
                "notes": "",
                "created_at": "2023-12-25 11:20:31",
                "updated_at": "2023-12-25 11:20:31",
                "currencycode": "RUB",
                "currencyprefix": "",
                "currencysuffix": "RUB"
            },
            {
                "id": 23449,
                "userid": 3172,
                "firstname": "Иван",
                "lastname": "Хосткеев",
                "companyname": "",
                "invoicenum": "",
                "date": "2023-12-25",
                "duedate": "2024-01-09",
                "datepaid": "2023-12-25 13:08:58",
                "last_capture_attempt": "0000-00-00 00:00:00",
                "date_refunded": "0000-00-00 00:00:00",
                "date_cancelled": "0000-00-00 00:00:00",
                "subtotal": "300.00",
                "credit": "300.00",
                "tax": "0.00",
                "tax2": "0.00",
                "total": "0.00",
                "taxrate": "0.00",
                "taxrate2": "0.00",
                "status": "Paid",
                "paymentmethod": "yookassa",
                "paymethodid": null,
                "notes": "",
                "created_at": "2023-12-25 11:15:14",
                "updated_at": "2023-12-25 13:08:58",
                "currencycode": "RUB",
                "currencyprefix": "",
                "currencysuffix": "RUB"
            },
            {
                "id": 18580,
                "userid": 3172,
                "firstname": "Иван",
                "lastname": "Хосткеев",
                "companyname": "",
                "invoicenum": "",
                "date": "2023-12-14",
                "duedate": "2023-12-29",
                "datepaid": "2023-12-14 05:54:52",
                "last_capture_attempt": "0000-00-00 00:00:00",
                "date_refunded": "0000-00-00 00:00:00",
                "date_cancelled": "0000-00-00 00:00:00",
                "subtotal": "500.00",
                "credit": "500.00",
                "tax": "0.00",
                "tax2": "0.00",
                "total": "0.00",
                "taxrate": "0.00",
                "taxrate2": "0.00",
                "status": "Paid",
                "paymentmethod": "yookassa",
                "paymethodid": null,
                "notes": "",
                "created_at": "2023-12-14 05:54:31",
                "updated_at": "2023-12-14 05:54:52",
                "currencycode": "RUB",
                "currencyprefix": "",
                "currencysuffix": "RUB"
            },
            {
                "id": 10116,
                "userid": 3172,
                "firstname": "Иван",
                "lastname": "Хосткеев",
                "companyname": "",
                "invoicenum": "",
                "date": "2023-11-09",
                "duedate": "2023-11-24",
                "datepaid": "2023-11-09 13:13:37",
                "last_capture_attempt": "0000-00-00 00:00:00",
                "date_refunded": "0000-00-00 00:00:00",
                "date_cancelled": "0000-00-00 00:00:00",
                "subtotal": "250.00",
                "credit": "250.00",
                "tax": "0.00",
                "tax2": "0.00",
                "total": "0.00",
                "taxrate": "0.00",
                "taxrate2": "0.00",
                "status": "Paid",
                "paymentmethod": "yookassa",
                "paymethodid": null,
                "notes": "",
                "created_at": "2023-11-09 12:48:29",
                "updated_at": "2023-11-09 13:13:37",
                "currencycode": "RUB",
                "currencyprefix": "",
                "currencysuffix": "RUB"
            }
        ]
    }
}
Пример ответа при ошибке
{
    "result": -2,
    "error": "whmcs/get_invoices: invalid token, logout"
}

whmcs/request_cancellation

Позволяет запросить отмену услуги. //не работает

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string request_cancellation ключевое действие - запросить отмену услуги
id * int ID сервера
cancellation_type * int 1 - немедленная отмера с частичным возвратом средств (если это возможно), 0 - отмена в конце текущего биллингового периода
terminate_reason_custom string причина отмены
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=request_cancellation" \
--data "id={ID сервера} \
--data "cancelation_type={1 или 0}" \
--data "terminate_reason_custom={Причина}" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "OK",
    "action": "request_cancellation",
    "callback": "b36a18f95ce4ac52d5ee18aaf25940cc"
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "whmcs/request_cancellation: permission denied #3, this is not your server"
}

whmcs/delete_cancellation_request

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

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string delete_cancellation_request ключевое действие - отменить запрос на расформирование сервиса
id * int ID сервера
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=delete_cancellation_request" \
--data "id={ID сервера} \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "success",
    "message": [
        "CR deleted",
        "Invoice 23451 reactivated"
    ]
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "whmcs/request_cancellation: permission denied #3, this is not your server"
}

whmcs/get_cancellation_requests

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

HTTP Method - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание параметра
action * string get_cancellation_requests ключевое действие - получить активный список запросов на расформование сервисов
id int ID сервера
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/whmcs.php" -X POST \
--data "action=get_cancellation_requests" \
--data "id={ID сервера} \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "result": "success",
    "message": [
        {
            "id": 507,
            "date": "2023-12-25 13:44:22",
            "relid": 5724,
            "reason": "Not needing for me",
            "type": "End of Billing Period",
            "created_at": "0000-00-00 00:00:00",
            "updated_at": "0000-00-00 00:00:00"
        }
    ]
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "whmcs/request_cancellation: permission denied #3, this is not your server"
}

Моментальные серверы

К моментальным серверам относятся стандартные конфигурации (инстансы): вычислительные (ВМ), физические серверы, физические серверы с графическими процессорами и vGPU серверы (ВМ с графическим процессором PCIe-passthrough). Эти конфигурации собраны заранее и разворачиваются автоматически в течение 10-20 минут.

Заказать моментальные серверы возможно через API. Все платежи за моментальные серверы идут со счета биллинга. Для размещения заказа на счету клиента должна быть необходимая сумма.

Ресурс Действие Описание
presets.php list вызов списка доступных инстансов для определенного региона
os.php list получение списка ОС для инстанса
traffic_plans.php list получение тарифного плана трафика для инстанса
eq.php order_instance Создание заказа на развертывание моментального сервера. Заказ будет выполнен после оплаты счета или за счет средств кредитного баланса

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

  • BM - физические серверы;
  • VM - виртуальные инстансы (VM);
  • Compute - виртуальные серверы общего назначения на базе KVM (VPS);
  • Gpu - GPU серверы;
  • Vgpu - vGPU серверы.

presets/list

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

Информация

В настоящее время доступны инстансы в России (RU), Нидерландах (ND), США (US), Финляндии (FI), Германии (DE), Исландии (IS) и Турции (TR).

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string list ключевое действие — вызов списка доступных инстансов для определенного региона
location * string местоположение инстанса - RU/NL/US/FI/DE/IS/TR (Россия, Нидерланды, США, Финляндия, Германия, Исландия, Турция)

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/presets.php" -X POST \
--data "action=list" \
--data "location={двухбуквенный код локации}" \
Пример положительного ответа
{
    "result": "OK",
    "action": "list",
    "presets": [
        {
            "id": 108, // ID инстанса
            "name": "vm.pico", // имя пресета инстанса
            "active": 1, // количество активных инстансов
            "monthly_ru": 300, // цена в рублях с учетом регионального НДС
            "monthly_com": 3, // цена в евро с учетом регионального НДС. Для клиентов из ЕС без ID плательщика НДС, должен быть добавлен соответствующий местный НДС
            "description": "VM instance 1/1/15 SSD", // описание
            "cpu": 1, // количество ядер CPU
            "ram": 1, // объем RAM в Гб
            "hdd": "15", // объем жесткого диска в Гб
            "gpu": "", // указывается GPU, если установлен
            "locations": "RU,NL,US,FI,DE,IS,TR", // перечень локаций, в которых доступен инстанс.
            "virtual": 1, // указание на то, что инстанс является виртуальным (VM)
            "price": { // Цена в зависимости от локации
                "NL": {
                    "USD": -1,
                    "EUR": 3,
                    "RUR": 300
                },
                "RU": {
                    "USD": -1,
                    "EUR": 3,
                    "RUR": 300
                },
                "US": {
                    "USD": -1,
                    "EUR": 3,
                    "RUR": 300
                },
                "FI": {
                    "USD": -1,
                    "EUR": 3,
                    "RUR": 300
                },
                "DE": {
                    "USD": -1,
                    "EUR": 3,
                    "RUR": 300
                },
                "IS": {
                    "USD": -1,
                    "EUR": 3,
                    "RUR": 300
                },
                "TR": {
                    "USD": -1,
                    "EUR": 3,
                    "RUR": 300
                }
            },
            "available": 184, // количество инстансов, доступных для моментального заказа
            "server_type": "Virtual Private Server",
            "tags": [ //набор тегов для указания правильного пользовательского интерфейса
                {
                    "id": 312305, // ID сервера
                    "component": "presets",
                    "component_id": 108,
                    "tag": "stock",
                    "value": "10",
                    "extra": "",
                    "internal": 0
                },
                {
                    "id": 312306,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "web_group",
                    "value": "General",
                    "extra": "vm",
                    "internal": 0
                },
                {
                    "id": 312307,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "pid_fi",
                    "value": "3216",
                    "extra": "",
                    "internal": 0
                },
                {
                    "id": 346027,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "web_hdd",
                    "value": "SSD",
                    "extra": "",
                    "internal": 0
                },
                {
                    "id": 346292,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "web_storage",
                    "value": "true",
                    "extra": "15GB SSD",
                    "internal": 0
                },
                {
                    "id": 438294,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "pid_de",
                    "value": "3219",
                    "extra": "",
                    "internal": 0
                },
                {
                    "id": 481712,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "web_geekbench_score_max",
                    "value": "11121",
                    "extra": "",
                    "internal": 0
                },
                {
                    "id": 559071,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "pre_order",
                    "value": "true",
                    "extra": "TR",
                    "internal": 0
                },
                {
                    "id": 736612,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "no_increase",
                    "value": "",
                    "extra": "",
                    "internal": 0
                },
                {
                    "id": 312308,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "vm",
                    "value": "true",
                    "extra": "",
                    "internal": 1
                },
                {
                    "id": 312309,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "compute",
                    "value": "1",
                    "extra": "",
                    "internal": 1
                },
                {
                    "id": 312311,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "web_ghz",
                    "value": "2.6",
                    "extra": "",
                    "internal": 1
                },
                {
                    "id": 312312,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "web_addinfo",
                    "value": "true",
                    "extra": "param1=Delivery ETA: from 2-5 minutes param2=Upgrade: No",
                    "internal": 1
                },
                {
                    "id": 312314,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "pid_ru",
                    "value": "3202",
                    "extra": "",
                    "internal": 1
                },
                {
                    "id": 312315,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "pid_nl",
                    "value": "3201",
                    "extra": "",
                    "internal": 1
                },
                {
                    "id": 312316,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "pid_us",
                    "value": "3203",
                    "extra": "",
                    "internal": 1
                },
                {
                    "id": 312317,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "fixed_price",
                    "value": "RUR",
                    "extra": "",
                    "internal": 1
                },
                {
                    "id": 458740,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "web_geekbench_score",
                    "value": "492",
                    "extra": "Performance",
                    "internal": 1
                },
                {
                    "id": 567279,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "web_label",
                    "value": "true",
                    "extra": "[{ &quot;name&quot;: &quot;SSD + Xeon E5-26xx&quot;,&quot;color&quot;: &quot;#E23329&quot;,&quot;number&quot;: 2}]",
                    "internal": 1
                },
                {
                    "id": 580969,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "pid_is",
                    "value": "3221",
                    "extra": "",
                    "internal": 1
                },
                {
                    "id": 581092,
                    "component": "presets",
                    "component_id": 108,
                    "tag": "pid_tr",
                    "value": "3223",
                    "extra": "",
                    "internal": 1
                }
            ]
        } ... , {
            "id": 15,
            "name": "bm.v1-mini",
            "active": 1,
            "monthly_ru": 3600,
            "monthly_com": 35,
            "description": "BM i3\/8\/240", //  физические сервера с двухъядерным процессором i3
            "cpu": 2,
            "ram": 8,
            "hdd": 240,
            "gpu": "",
            "locations": "RU,NL",
            "virtual": 0,
            "tags": [
                {
                    "id": 7130,
                    "tag": "bm", // это физический сервер
                    "value": "true",
                    "extra": "",
                    "internal": 1
                }],
            "available": 3
        }, ... , {
            "id": 8,
            "name": "vgpu.v1-mini",
            "active": 1,
            "monthly_ru": 8800,
            "monthly_com": 157,
            "description": "vGPU 4\/16\/240 + 1080",
            "cpu": 4,
            "ram": 16,
            "hdd": 240,
            "gpu": "1xGTX1080", // этот сервер оснащен графическим процессором GTX 1080
            "locations": "RU,NL",
            "virtual": 1,
            "tags": [
                {
                    "id": 7118,
                    "tag": "gpu", // это GPU сервер**
                    "value": "1",
                    "extra": "",
                    "internal": 1
                }, 
                {
                    "id": 11428,
                    "tag": "vgpu", // это vGPU сервер**
                    "value": "true",
                    "extra": "",
                    "internal": 1
                }
            ],
            "available": 1
        } ... ]
}

Примечание

Сведения об ОС и список постустановочных задач необходимы для оформления заказа.

os/list

Возвращает список подходящих операционных систем для конкретного инстанса. Все цены на лицензии Windows уже рассчитаны. Без указания id инстанса вызов вернет доступные операционные системы для всех доступных инстансов. Сессионный токен не требуется.

Примечание

Следует учитывать, что все цены указаны только для создания надлежащего пользовательского интерфейса. Они будут пересчитаны в бэкэнде во время заказа.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string list ключевое действие — получение списка ОС для конкретного инстанса
instance_id int ID инстанса (можно получить через вызов presets/list)

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/os.php" -X POST \
--data "action=list" \
--data "instance_id={ID истанса}"
Пример положительного ответа
{
    "result": "OK",
    "action": "list",
    "os_list": [
        {
        "id": 183, // id операционной системы
        "name": "RockyLinux 8",
        "api_enabled": 0,
        "type_login": 1,
        "pxe_os_id": null,
        "active": 1,
        "description": "",
        "tags": [
                {
                    "id": 78797,
                    "tag": "bm",
                    "value": "true",
                    "extra": "",
                    "component_id": 183,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 78798,
                    "tag": "gpu",
                    "value": "true",
                    "extra": "",
                    "component_id": 183,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 78799,
                    "tag": "vgpu",
                    "value": "true",
                    "extra": "",
                    "component_id": 183,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 78800,
                    "tag": "vm",
                    "value": "true",
                    "extra": "",
                    "component_id": 183,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 264231,
                    "tag": "family",
                    "value": "RockyLinux",
                    "extra": "50",
                    "component_id": 183,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 627236,
                    "tag": "vds",
                    "value": "",
                    "extra": "",
                    "component_id": 183,
                    "component": "OS",
                    "internal": 0
                }

        ]
    },  {
        "id": 202,
        "name": "Windows Server 2022 VM",
        "api_enabled": 0,
        "type_login": 1,
        "pxe_os_id": null,
        "active": 0,
        "description": "WS22 DC for VMs",
        "tags": [
                {
                    "id": 241628,
                    "tag": "vm",
                    "value": "true",
                    "extra": "",
                    "component_id": 202,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 241630,
                    "tag": "min_ram", // минимальные требования к объёму оперативной памяти
                    "value": "4", // 4 Гб
                    "extra": "",
                    "component_id": 202,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 241631,
                    "tag": "min_hdd", // минимальные требования к объему жесткого диска
                    "value": "32", // 32 Гб
                    "extra": "",
                    "component_id": 202,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 241632,
                    "tag": "price_per_core_EUR", // Плата за лицензию MS для продукта SPLA в евро за ядро
                    "value": "2",
                    "extra": "",
                    "component_id": 202,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 241633,
                    "tag": "price_per_core_RUB", // Стоимость лицензии MS на продукт SPLA в рублях за ядро
                    "value": "200",
                    "extra": "",
                    "component_id": 202,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 241634,
                    "tag": "user_name",
                    "value": "Administrator",
                    "extra": "",
                    "component_id": 202,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 264276,
                    "tag": "family",
                    "value": "Windows Server",
                    "extra": "70",
                    "component_id": 202,
                    "component": "OS",
                    "internal": 0
                },
                {
                    "id": 264320,
                    "tag": "short_name",
                    "value": "WS 2022 for VPS",
                    "extra": "",
                    "component_id": 202,
                    "component": "OS",
                    "internal": 0
                }
            ],
            "price_EUR": 2,
            "billing_plan": {
                "EUR": {
                    "1": 2, // расчетная стоимость этой лицензии в евро (без НДС) в зависимости от числа ядер
                    "3": 6,
                    "6": 12,
                    "12": 24
                },
                "RUB": {
                    "1": 200, // расчетная стоимость этой лицензии в рублях (без НДС) в зависимости от числа ядер
                    "3": 600,
                    "6": 1200,
                    "12": 2400
                }
            },
            "price_RUB": 200
        }
        ]
}

software/list

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

Без указания id инстанса вызов вернет доступное к установке программное обеспечение для всех доступных инстансов. Сессионный токен не требуется.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string list ключевое действие — получение списка доступного к установке программного обеспечения для конкретного инстанса
instance_id int ID инстанса (можно получить через вызов presets/list)

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/software.php" -X POST \
--data "action=list" \
--data "instance_id={ID истанса}"
Пример положительного ответа
    {
        "result": "OK",
        "action": "list",
        "software": [
        {
            "id": 47,
            "name": "BigBlueButon + Greenlight",
            "description": "Greenlight - a popular classroom management system and platform for teacher-student interaction in an educational environment.",
            "price": 0,
            "active": 0,
            "icon": "",
            "task": "invapi_external_greenlight_install.dsl",
            "tags": [
                {
                    "id": 512695,
                    "tag": "os",
                    "value": [
                        "160"
                    ],
                    "extra": "",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 512696,
                    "tag": "description_ru",
                    "value": "",
                    "extra": "Greenlight - это популярная система управления классом и платформа для взаимодействия учителей и учеников в учебной среде. ",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 513680,
                    "tag": "group",
                    "value": "Communication",
                    "extra": "",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 513714,
                    "tag": "family",
                    "value": "Communication",
                    "extra": "20",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 513782,
                    "tag": "docs_ru",
                    "value": "",
                    "extra": "https://url.hostkey.ru/BigBlueButton",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 514096,
                    "tag": "short_desc_ru",
                    "value": "",
                    "extra": "Greenlight - это популярная система управления классом и платформа для взаимодействия учителей и учеников в учебной среде. ",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 538514,
                    "tag": "min_ram",
                    "value": "2",
                    "extra": "",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 538546,
                    "tag": "min_cpu",
                    "value": "2",
                    "extra": "",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 606987,
                    "tag": "vm",
                    "value": "1",
                    "extra": "",
                    "component_id": 47,
                    "component": "software",
                    "internal": 1
                },
                {
                    "id": 606989,
                    "tag": "bm",
                    "value": "1",
                    "extra": "",
                    "component_id": 47,
                    "component": "software",
                    "internal": 1
                },
                {
                    "id": 606990,
                    "tag": "vgpu",
                    "value": "1",
                    "extra": "",
                    "component_id": 47,
                    "component": "software",
                    "internal": 1
                },
                {
                    "id": 606991,
                    "tag": "gpu",
                    "value": "1",
                    "extra": "",
                    "component_id": 47,
                    "component": "software",
                    "internal": 1
                },
                {
                    "id": 610970,
                    "tag": "family_desc_ru",
                    "value": "",
                    "extra": "Коммуникационное программное обеспечение — это приложения и инструменты, предназначенные для облегчения обмена информацией, сообщениями и медиа между отдельными людьми или группами. Корпоративные решения созданы для того, чтобы быть удобными, быстрыми и, что очень важно, безопасными. Арендуйте сервер HOSTKEY с предустановленным ПО в несколько кликов.",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 610978,
                    "tag": "family_desc_en",
                    "value": "",
                    "extra": "Communication software refers to applications and tools designed to facilitate the exchange of information, messages, and media between individuals or groups. Enterprise solutions are designed to be user-friendly, fast and, most importantly, secure. Rent a HOSTKEY server with pre-installed software in a few clicks.",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 1271688,
                    "tag": "docs_en",
                    "value": "",
                    "extra": "https://url.hostkey.com/BigBlueButton",
                    "component_id": 47,
                    "component": "software",
                    "internal": 0
                }
            ]
        },
...
        {
            "id": 65,
            "name": "Minecraft: Java Edition Server",
            "description": "Minecraft: Java Edition Server is a player-owned or business-owned multiplayer game server software.",
            "price": 0,
            "active": 1,
            "icon": "",
            "task": "invapi_external_minecraft_server_install.dsl",
            "tags": [
                {
                    "id": 856009,
                    "tag": "vm",
                    "value": "1",
                    "extra": "",
                    "component_id": 65,
                    "component": "software",
                    "internal": 1
                },
                {
                    "id": 856011,
                    "tag": "bm",
                    "value": "1",
                    "extra": "",
                    "component_id": 65,
                    "component": "software",
                    "internal": 1
                },
                {
                    "id": 856013,
                    "tag": "vgpu",
                    "value": "1",
                    "extra": "",
                    "component_id": 65,
                    "component": "software",
                    "internal": 1
                },
                {
                    "id": 856016,
                    "tag": "min_cpu",
                    "value": "1",
                    "extra": "",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 856020,
                    "tag": "min_ram",
                    "value": "1",
                    "extra": "",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 856023,
                    "tag": "os",
                    "value": [
                        "180",
                        "219",
                        "219",
                        "160",
                        "187",
                        "217"
                    ],
                    "extra": "D11,12 U20,22,23",
                    "component_id": 65,
                    "component": "software",
                    "internal": 1
                },
                {
                    "id": 856063,
                    "tag": "tasks",
                    "value": "invapi_external_minecraft_server_install.dsl",
                    "extra": "",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 856073,
                    "tag": "docs_en",
                    "value": "",
                    "extra": "https://url.hostkey.com/Minecraft",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 856075,
                    "tag": "docs_ru",
                    "value": "",
                    "extra": "https://url.hostkey.ru/Minecraft",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 856076,
                    "tag": "group",
                    "value": "Games",
                    "extra": "",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 856081,
                    "tag": "family",
                    "value": "Games",
                    "extra": "31",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 856084,
                    "tag": "short_desc_ru",
                    "value": "",
                    "extra": "Minecraft: Java Edition Server — это серверное программное обеспечение, позволяющее запустить многопользовательский сервер Minecraft для игры в режиме онлайн.",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 856087,
                    "tag": "family_desc_ru",
                    "value": "",
                    "extra": "Игровые серверы — это ваш путь к хостингу и управлению онлайн-играми. Эта категория предлагает серверные решения, оптимизированные для бесперебойной и высокопроизводительной игровой среды, от многопользовательских настроек до совместного игрового процесса. С HOSTKEY вы сможете в несколько кликов построить собственную игровую инфраструктуру, заказав серверы с предустановленными играми.",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                },
                {
                    "id": 856089,
                    "tag": "family_desc_en",
                    "value": "",
                    "extra": "Game servers are your gateway to hosting and managing online gaming experiences. From multiplayer setups to collaborative gameplay, this category offers server solutions optimized for seamless, high-performance gaming environments. With HOSTKEY you can build your own gaming infrastructure in a few clicks ordering servers with pre-installed games.",
                    "component_id": 65,
                    "component": "software",
                    "internal": 0
                }
            ]
        }
    ]
}

traffic_plans/list

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string list ключевое действие — получение тарифного плана сетевого трафика для инстанса
location * string местоположение инстанса - RU/NL/US/FI/DE/IS/TR (Россия, Нидерланды, США, Финляндия, Германия, Исландия, Турция)
instance_id int ID инстанса (можно получить через вызов presets/list)

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/traffic_plans.php" -X POST \
--data "action=list" \
--data "location={двухбуквенный код локации}" \
--data "instance={ID инстанса}"
Пример положительного ответа
{
    "result": "OK",
    "action": "list",
    "traffic_plans": [
        {
            "id": 25, // id тарифного плана трафика
            "name": "3Tb traffic (1Gbps) VM", // название тарифного плана трафика
            "limit_in": 999, // входящий лимит Тб
            "limit_out": 3, // исходящий лимит Тб
            "rate_in": 0, // стоимость избыточного входящего трафика в евро/Тб
            "rate_out": 2, стоимость избыточного исходящего трафика в евро/Тб
            "bandwidth": 1000, // ограничение пропускной способности (Мбит/с)
            "locations": "RU,NL,US,FI,DE,IS,TR,", // регион
            "currency_id": 1, // этот план для евро, id валюты== 1
            "active": 1,
            "web_plan": 0,
            "price": 0, // фиксированная цена, бесплатно
            "main_plan": 37,
            "tags": [
                {
                    "id": 11449,
                    "component": "traffic_plans",
                    "component_id": 25,
                    "tag": "vm",
                    "value": "true",
                    "extra": "",
                    "internal": 1
                }
            ]
        },
        {
            "id": 37,
            "name": "3Tb traffic (1Gbps) VM",
            "limit_in": 999,
            "limit_out": 3,
            "rate_in": 0,
            "rate_out": 180,
            "bandwidth": 1000,
            "locations": "RU,NL,US,FI,DE,IS,TR,",
            "currency_id": 1, цена указана в рублях, эта надпись будет получена, если у выбранная валюта - рубль
            "active": 1,
            "web_plan": 0,
            "price": 0,
            "main_plan": 25,
            "tags": [
                {
                    "id": 11471,
                    "component": "traffic_plans",
                    "component_id": 37,
                    "tag": "vm",
                    "value": "true",
                    "extra": "",
                    "internal": 1
                }
            ]
        }
    ]
}
Пример ответа при ошибке
{
    "result": -1,
    "error": "traffic_plans/list: error while looking for traffic plans"
}

eq/order_instance

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string order_instance ключевое действие — заказ конкретного инстанса с заданными параметрами
token * string сессионный токен
deploy_period * string месяц, квартал, 6 месяцев, год (monthly, quarterly, semi-annually, annually)
deploy_notify * string уведомление по электронной почте об успешном завершении развертывания true/false
pin * int PIN-код
preset * string ID инстанса для развертывания из presets/list
location_name * string название локации сервера - RU/NL/US/FI/DE/IS/TR (Россия, Нидерланды, США, Финляндия, Германия, Исландия, Турция)
os_id * int ID ОС из списка операционных систем из вывода os/list
soft_id int ID программного обеспечения из вывода software/list
traffic_plan * string ID выбранного плана трафика traffic_plans/list
root_pass * string пароль root по умолчанию. Пароль должен быть длиной не менее 8 символов и содержать в себе заглавные и строчные латинские буквы и хотя бы один специальный символ
hostname string имя хоста развернутого инстанса. Если не задано, то будет поставлено Код локации + ID инстанса
ssh_key string открытый ключ ssh для пользователя root
post_install_callback string URL для вызова после успешного развертывания
post_install_script string код для запуска после успешного развертывания
os_name string название ОС
own_os int если установлено значение 1, инстанс будет доставлен без установки ОС. Этот вызов полезен, если планируется установить ОС позже
root_size int размер корневого раздела (/) на диске в процентах. Если не задано, принимается как 100
jenkins_task string ID задачи Jenkins для запуска после развертывания. Допустимые значения: 1 - установка драйвера GPU, 2 - драйвер GPU плюс докер NVIDIA, 3 - драйвер, докер плюс патч IOMMU, -1 - ничего не делать

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=order_instance" \
--data "token=$HOSTKEY_TOKEN" \
--data "deploy_period={monthly,quarterly,semi-annually,annually}" \
--data "deploy_notify=true" \
--data "pin={PIN}" \
--data "preset={ID пресета инстанса}" \
--data "location_name={двухбуквенный код локации}" \
--data "os_id={ID операционной системы}" \
--data "soft_id={ID программного обеспечения}" \
--data "traffic_plan={ID плана трафика}" \
--data "root_pass={пароль root}" \
--data "hostname={Имя хоста}" \
--data "ssh_key={открытый SSH ключ}" \
--data "post_install_callback=" \
--data "post_install_script=" \
--data "reinstall_key=$REINSTALL_KEY" \
--data "os_name=" \
--data "own_os=" \
--data "root_size=100" \
--data "jenkins_task={ID задачи Jenkins, -1, 1, 2, 3}" \
Пример положительного ответа
{
    "result": "OK",
    "action": "order_instance",
    "invoice": 24016,
    "status": "Paid"
}

Алгоритм заказа моментального сервера с помощью eq/order_instance

  1. Cоздайте клиентский API-ключ;

  2. Определитесь с локацией заказа сервера: RU/NL/US/FI/DE/IS/TR (Россия, Нидерланды, США, Финляндия, Германия, Исландия, Турция);

  3. С помощью запроса presets/list определите ID пресета для развертывания.

    Этот ID далее будет использоваться как instance_id или preset). Например при "id": 108 значения instance_id=108 и preset=108;

  4. С помощью запроса os/list определите os_id нужной к установке операционной системы, используя ID инстанса из п.3. Например для Ubuntu 22.04 это значение будет определено в ответе на запрос как "id": 187;

    Примечание

    Если вы не хотите ставить на сервер ОС при его развертывании, укажите позже параметр own_os=1.

  5. С помощью запроса software/list определите для данного инстанса возможное к развертыванию программное обеспечение и получите его ID (далее параметр soft_id). Например для СMS Wodrpress в выводе запроса это значение будет "id": 20;

    Примечание

    Вы можете не предустанавливать ПО при развертывании, если хотите сделать это позже самостоятельно.

  6. С помощью запроса [traffic_plans/list] получите ID тарифного плана сетевого трафика для вашего сервера. Например для плана 3Tb traffic (1Gbps) VM вызов вернет значение "id": 25;

  7. Получите сессионный токен $HOSTKEY_TOKEN через запрос auth/login;

  8. Закажите сервер, вставив в запрос eq/order_instance данные полученые в п.п. 2-7. Обязательно укажите ваш PIN-код (если вы его не задали, сделайте это через запрос eq/set_pin), пароль root, период оплаты сервера deploy_period (на месяц, квартал, 6 месяцев или за год), необходимость уведомления на почту о развертывании deploy_notify (рекомендуем ставить true по умолчанию).

По желанию можно указать дополнительные параметры, описаные в вызове eq/order_instance.

Ниже приведен пример заказа сервера с Wordpress (id=20) на Debian 11 (id=108):

пример POST-запроса заказа моментального сервера, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=order_instance" \
--data "token=eeee51003b1d81d2eca65660735c0531" \
--data "deploy_period=monthly" \
--data "deploy_notify=true" \
--data "pin=1907" \
--data "preset=108" \
--data "location_name=NL" \
--data "os_id=180" \
--data "soft_id=20" \
--data "traffic_plan=25" \
--data "root_pass=mdLus8Ng" \
Пример положительного ответа
{
    "result": "OK",
    "action": "order_instance",
    "invoice": 50062,
    "status": "Paid"
}

Invapi выберет/создаст соответствующий сервер в определенном месте и продолжит его развертывание. Перед любой установкой будет произведена проверка наличия средств на кредитном счете (при установленном параметре автоплатежей с кредитного баланса) или выставлен счет на оплату. Если установка пройдет успешно, новый сервер будет привязан к учетной записи клиента. По запросу клиент будет уведомлен по электронной почте. Все платные лицензии будут добавлены в качестве дополнений к заказу.

Примечание

При несовместимости выбранной операционной системы и устанавливаемого ПО, вам выдаст сообщение вида:

{
"result": -1,
"error": "reinstall: extra software Odoo (#49) is not compatible with Ubuntu 22.04"
}

Вам необходимо будет выбрать другую операционную систему (задать другой параметр os_id).

Внимание

Приступить к использованию сервера можно после получения инфрормации об окончании его развертывания по электронной почте или появления статуса Active в разделе Мои сервера панели управления Invapi. При возникновении сбоя в процессе развертывания сервера, на почту будет отправлено уведомление. Развертывание может занять от 20 минут и выше.

Вы можете отслеживать установку и ее статус используя асинхронные действия. Асинхронный ключ (deploy key) можно получить, запустив вызов eq/update_servers.

Установка будет завершена успешно, когда вы получите сообщение ассинхронного действия такого рода:

Пример положительного ответа
{
"result": "OK",
"scope": "Autodeploy completed, check VRI-208-64405",
"context": {
    "action": "deploy_vm",
    "id": "32645",
    "location": "NL",
    "ip": "176.222.34.23",
    "ip_ipmi": "0.0.0.0"
},
"debug": "0",
"key": "9889fcb51255146e04224205c04976e8"
}

Переустановка сервера через eq/order_instance

Переустановка сервера производится аналогично его заказу и отличается только передачей в запросе eq/order_instance дополнительного параметра id - ID переустанавливаемого сервера из Invapi и неиспользовании части параметров. При переустановке вы можете выбрать другую операционную систему и предустанавливаемое программное обеспечение или сделать переустановку "с чистого листа", установив параметр own_os=1.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string list ключевое действие — переустановка конкретного инстанса с заданными параметрами
token * string сессионный токен
pin * int PIN-код
hostname string новое имя хоста после переустановки. По умолчанию используется код локации+ID инстанса
os_id * int ID ОС из списка операционных систем из вывода os/list
soft_id int ID программного обеспечения из вывода software/list
root_pass * string новый пароль root. Пароль должен быть длиной не менее 8 символов и содержать в себе заглавные и строчные латинские буквы и хотя бы один специальный символ
ssh_key string открытый ключ ssh для пользователя root
post_install_script string код для запуска после успешного развертывания
own_os int если установлено значение 1, инстанс будет доставлен без установки ОС. Этот вызов полезен, если планируется установить ОС позже
root_size int размер корневого раздела (/) на диске в процентах. Если не задано, принимается как 100
id * int ID переустанавливаемого сервера

POST-запрос для переустановки, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=order_instance" \
--data "token=$HOSTKEY_TOKEN" \
--data "pin={PIN}" \
--data "hostname={Имя хоста}" \
--data "os_id={ID операционной системы}" \
--data "soft_id={ID программного обеспечения}" \
--data "root_pass={пароль root}" \
--data "ssh_key={открытый SSH ключ}" \
--data "post_install_script=" \
--data "own_os=" \
--data "root_size=100" \
--data "id={ID сервера из Invapi}" // Наличие ID запустит процесс переустановки сервера.

Внимание

Если при запросе переустановки вам выдало сообщение, что сервер с таким ID не найден, обновите список серверов, привязанных к сессионному токену, выполнив запрос eq/update_servers.

Примечание

При несовместимости выбранной операционной системы и устанавливаемого ПО, вам выдаст сообщение вида:

{
"result": -1,
"error": "reinstall: extra software Odoo (#49) is not compatible with Ubuntu 22.04"
}

Вам необходимо будет выбрать другую операционную систему (задать другой параметр os_id).

Внимание

Вы не можете запустить новую переустановку, если не закончен процесс предыдущей. Иначе вы получите предупреждение:

{"result":-1,"error":"another reinstall in progress for XXXXX, please wait"}

Например мы хотим переставить наш сервер из предыдущего примера на Rocky Linux 9 (id=205) и Grafana (id=18). Запрос будет следующий:

пример POST-запроса для переустановки, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=order_instance" \
--data "token=5e731472b19f25c7fe61c9eb5c2ea4e3" \
--data "deploy_notify=true" \
--data "pin=1907" \
--data "os_id=205" \
--data "soft_id=18" \
--data "root_pass=mnN48Dl@4" \
--data "id=32645"
Пример положительного ответа
{
    "result": "OK",
    "action": "order_instance",
    "callback": "e2fbe5f43796d4139983b695271da9aa", // асинхронный ключ
    "deploy_status": "reinstall",
    "id": 32645,
    "os_name": "RockyLinux 9",
    "soft_name": "Grafana"
}

Внимание

При переустановке данным способом уведомление об ее успешном окончании на электронную почту не присылается! Вам нужно запомнить и сохранить новый пароль root (или использовать прежний пароль сервера), а информацию о доступе к заказанному ПО смотреть в документации Маркетплейса или непосредственно в карточке сервера панели управления Invapi.

Используя данный асинхронный ключ (поле callback), мы можем отследить процесс переустановки, используя асинхронные действия.

Пример ответа об успешном реинстале
{
    "result": "OK",
    "scope": "{\"result\":\"deploy_done\"}",
    "context": {
        "action": "reinstall_vm",
        "id": "32645",
        "location": "NL",
        "ip": "176.222.34.23",
        "ip_ipmi": "0.0.0.0",
        "reinstall": 1
    },
    "debug": "",
    "key": "a129bad13781bdf5790746064aba0af6"
}

Стоковые серверы

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

Заказать стоковые серверы возможно через API.

Все платежи за стоковые серверы производятся со счета биллинга. Для размещение заказа на счету должна быть необходимая сумма.

Ресурс Действие Описание
stocks.php list Получение списка доступных серверов
stocks.php show Получение подробной информации о конкретном сервере
eq.php order_instance Создание заказа на развертывание стокового сервера. Заказ будет выполнен после оплаты счета

stocks/list

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string list ключевое действие - получение списка доступных серверов
location * string 'RU','NL','US','FI','DE','IS','TR' регион расположения сервера
group * string 'ALL', '1CPU', '2CPU', 'GPU', 'AMD', 'AMD-MODERN', 'INTEL' группа, к которой относится сервер
  • В настоящее время доступны инстансы в России (RU), Нидерландах (ND), США (US), Финляндии (FI), Германии (DE), Исландии (IS) и Турции (TR).
  • Серверы распределены по следующим группам: ALL - все серверы, 1CPU - однопроцессорные серверы, 2CPU-двухпроцессорные серверы, GPU - серверы на базе GPU, AMD - серверы с процессорами производства AMD, AMD-MODERN серверы с современными процессорами Ryzen производства AMD, INTEL - серверы с процессорами производства AMD. GPU серверы исключены из других групп.
  • Оценка производительности сервера отображается для его CPU, а не графического процессора.

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/stocks.php" -X POST \
    --data "action=list" \
    --data "location={двубуквенный код локации}" \
    --data "group={Группа серверов}"
Пример положительного ответа
{
    "result": "OK",
    "action": "list",
    "servers": [
        {
            "id": 40514,
            "name": "40514",
            "hardware": {
                "config": "AMD Ryzen 9 5950X 3.4GHz (16 cores)/​128Gb/​1Tb NVMe SSD/​PSU",
                "motherboard_name": "ASRock X570D4U",
                "cpu_name": "AMD Ryzen 9 5950X 3.4GHz (16 cores)",
                "cpu_type": "AMD-MODERN",
                "cpu_count": 1,
                "cpu_cores": 16,
                "cpu_frq": "3.4",
                "ram": 128,
                "ram_type": "ddr4ecc",
                "hdd_count": 1,
                "hdd_groups": [
                    {
                        "name": "1Tb NVMe SSD",
                        "type": "HDD",
                        "count": 1,
                        "size": "1024"
                    }
                ],
                "hdd_pairs": 0,
                "gpu_name": null,
                "gpu_count": 0,
                "raid_levels": [
                    "LVM_HBA"
                ]
            },
            "location": "FI",
            "cpu_count": "1",
            "cpu_perf": 46719,
            "cpu_perflink": "http://www.cpubenchmark.net/cpu_lookup.php?cpu=AMD+Ryzen+9+5950X&id=3862",
            "tags": {
                "ipmi": {
                    "tag": "ipmi",
                    "value": "ami_bmc",
                    "extra": ""
                }
            },
            "deployment_estimate": "auto",
            "billing_plan": {
                "EUR": {
                    "1": 115,
                    "3": 334.65,
                    "6": 648.6,
                    "12": 1214.4
                },
                "RUB": {
                    "1": 12075,
                    "3": 35138.25,
                    "6": 68103,
                    "12": 127512
                }
            },
            "server_group": "Dedicated Server"
        },
        {
            "id": 44717,
            "name": "44717 2U",
            "hardware": {
                "config": "2xXeon E5-2680v2 2.8GHz (10 cores)/​128Gb/​960Gb SSD/​2xPSU",
                "motherboard_name": "DELL PE R720 MB (native)",
                "cpu_name": "Xeon E5-2680v2 2.8GHz (10 cores)",
                "cpu_type": "INTEL",
                "cpu_count": 2,
                "cpu_cores": 20,
                "cpu_frq": "2.8",
                "ram": 128,
                "ram_type": "ddr3reg",
                "hdd_count": 1,
                "hdd_groups": [
                    {
                        "name": "960Gb SSD",
                        "type": "HDD",
                        "count": 1,
                        "size": "960"
                    }
                ],
                "hdd_pairs": 0,
                "gpu_name": null,
                "gpu_count": 0,
                "raid_levels": [
                    "LVM_HBA"
                ]
            },
            "location": "FI",
            "cpu_count": "2",
            "cpu_perf": 12615,
            "cpu_perflink": "http://www.cpubenchmark.net/cpu_lookup.php?cpu=Intel+Xeon+E5-2680+v2+%40+2.80GHz&id=2061",
            "tags": {
                "ipmi": {
                    "tag": "ipmi",
                    "value": "dell_idrac9",
                    "extra": ""
                },
                "hwraid": {
                    "tag": "hwraid",
                    "value": "1",
                    "extra": ""
                }
            },
            "deployment_estimate": "auto",
            "billing_plan": {
                "EUR": {
                    "1": 107,
                    "3": 311.37,
                    "6": 603.48,
                    "12": 1129.92
                },
                "RUB": {
                    "1": 11235,
                    "3": 32693.85,
                    "6": 63365.4,
                    "12": 118641.6
                }
            },
            "server_group": "Dedicated Server"
        }
    ]
}

stocks/show

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string show ключевое действие - получение расширенной информации о конкретном сервере
id * int ID сервера

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/stocks.php" -X POST \
    --data "action=show" \
    --data "id={ID сервера}"
Пример положительного ответа
{
    "result": "OK",
    "action": "show",
    "server_data": {
        "id": 44717,
        "name": "44717 2U",
        "hardware": {
            "config": "2xXeon E5-2680v2 2.8GHz (10 cores)/​128Gb/​960Gb SSD/​2xPSU",
            "motherboard_name": "DELL PE R720 MB (native)",
            "cpu_name": "Xeon E5-2680v2 2.8GHz (10 cores)",
            "cpu_type": "INTEL",
            "cpu_count": 2,
            "cpu_cores": 20,
            "cpu_frq": "2.8",
            "ram": 128,
            "ram_type": "ddr3reg",
            "hdd_count": 1,
            "hdd_groups": [
                {
                    "name": "960Gb SSD",
                    "type": "HDD",
                    "count": 1,
                    "size": "960"
                }
            ],
            "hdd_pairs": 0,
            "gpu_name": null,
            "gpu_count": 0,
            "raid_levels": [
                "LVM_HBA"
            ]
        },
        "location": {
            "dc_location": "FI",
            "location_id": 4,
            "country": "FI"
        },
        "cpu_count": "2",
        "cpu_perf": 12615,
        "cpu_perflink": "http://www.cpubenchmark.net/cpu_lookup.php?cpu=Intel+Xeon+E5-2680+v2+%40+2.80GHz&id=2061",
        "tags": {
            "ipmi": {
                "tag": "ipmi",
                "value": "dell_idrac9",
                "extra": ""
            },
            "hwraid": {
                "tag": "hwraid",
                "value": "1",
                "extra": ""
            }
        },
        "deployment_estimate": "auto",
        "billing_plan": {
            "EUR": {
                "1": 107,
                "3": 311.37,
                "6": 603.48,
                "12": 1129.92
            },
            "RUB": {
                "1": 11235,
                "3": 32693.85,
                "6": 63365.4,
                "12": 118641.6
            }
        }
    }
}

Используемые теги оборудования

  • ipmi - Сервер оснащен модулем IPMI/DRAC/ILO/ управления. Наличие модуля удаленного управления позволяет упростить решение ряда задач;
  • hwraid - На сервере установлен аппаратный RAID-контроллер или аналогичная функция, встроенная в материнскую плату. Если требуется использовать эту функцию, автоматическое развертывание будет невозможно, т.к. настройка RAID-контроллера выполняется нашими инженерами, как правило, в течение следующего рабочего дня;
  • no_autodeploy - Серверы с этим тегом нельзя развернуть с помощью наших средств автоматизации. Как и в случае с аппаратной настройкой рейда, требуется участие наших инженеров. Развертывание будет осуществлено в течение следующего рабочего дня.

Создание заказа на развертывание или переустановку стокового сервера

Для заказа развертывания или переустановки стокового сервера используйте вызов eq/order_instance c ID стокового сервера.

Связанные действия

  • os/list - получение списка ОС, подходящих для сервера;
  • traffic_plans/list - получение списка тарифных планов траффика, подходящих для сервера;
  • jenkins/get_tasks - получение списка постустановочных задач;
  • eq/order_instance - заказ/переустановка моментального сервера, стокового сервера и т.д. (асинхронное действие);

Удаленный доступ

Физические серверы

Мы можем предоставить прямой доступ к серверам, оснащенным IPMI. Все наши сервера имеют IPMI в сером диапазоне IP. Мы предоставляем NAT по запросу на внешние IP на 2 часа для выполнения необходимых операций.

Для этого вызова есть асинхронный ответ. Ключи для всех операций NAT нужно проверять с помощью вызова nat_callback.php:

https://invapi.hostkey.ru/nat_callback.php?action=check&key=XXXX

Ресурс Действие Описание
nat.php add_static_nat создание статического правила сквозного доступа DNAT к IPMI серверу (общедоступный IP-адрес для доступа к IPMI серверу)
nat.php remove_static_nat удаление статического перехода NAT на сервер IPMI
eq.php add_ipmi_user создание временного пользователя IPMI для веб-доступа IPMI
eq.php remove_ipmi_user удаление временного пользователя IPMI для веб-доступа IPMI
eq.php unit_reset перезагрузка IPMI-контроллера

nat/add_static_nat

Создает статическое правило сквозного доступа DNAT к IPMI серверу.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string add_static_nat ключевое действие - создание статического правила сквозного доступа DNAT к IPMI серверу (общедоступный IP-адрес для доступа к IPMI серверу)
token * string сессионный токен
id * int ID сервера
pin * int PIN-код

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/nat.php" -X POST \
--data "action=add_static_nat" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \
--data "pin={PIN}"
Пример положительного ответа
{
    "result": "OK",
    "action": "add_static_nat",
    "callback": "7bc29eb23fb1b879b21fce509597f07c" //ключ для асинхронного действия
}
Для этого действия есть соответствующий асинхронный ответ
{
"result": "OK",
"scope": "5.39.221.32",
"context": {
    "action": "add_static_nat",
    "id": "ID cервера",
    "location": "RU"
},
"debug": "/ip/firewall/nat/add=action=dst-nat=chain=dstnat=dst-address=5.39.221.32=to-addresses=10.77.21.239=.proplist=chain",
"key": "7bc29eb23fb1b879b21fce509597f07c"
}

nat/remove_static_nat

HTTP-метод - POST

Выполняет удаление статического перехода DNAT на сервер IPMI

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string remove_static_nat ключевое действие- удаление статического перехода NAT на сервер IPMI
token * string сессионный токен
id * int ID сервера

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/nat.php" -X POST \
--data "action=remove_static_nat" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}"
Пример положительного ответа
{
  "result": "OK",
  "action": "remove_static_nat",
  "callback": "f685eaa0f06e47faa2e6bb5002828b00"
}
Для этого действия есть соответствующий асинхронный ответ
{
  "result": "OK",
  "scope": "5.39.221.32",
  "context": {
    "action": "remove_staticnat",
    "id": "ID cервера",
    "location": "RU"
  },
  "debug": "/ip/firewall/nat/remove=.id=*42B=.proplist=chain",
  "key": "f685eaa0f06e47faa2e6bb5002828b00"
}

eq/add_ipmi_user

Создает временного пользователя для веб-доступа к IPMI.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string add_ipmi_user ключевое действие - создание временного пользователя IPMI для веб-доступа IPMI
token * string сессионный токен
id * int ID сервера

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=add_ipmi_user" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}"
Пример положительного ответа
{
"result": "OK",
"action": "add_ipmi_user",
"callback": "f685eaa0f06e47faa2e6bb5002828b00"
}
Для этого действия есть соответствующий асинхронный ответ
{
"result": "OK",
"scope": "{\"result\":\"OK\",\"message\":\"User added\",\"debug\":\"\"}\n2021/05/17 22:46:55 Set User Password command successful (user 4)\n\n2021/05/17 22:46:55 \n2021/05/17 22:46:56 Set User Access (channel 1 id 4) successful.\n\n2021/05/17 22:46:56 exit status 1\n",
"context": {
    "action": "add_ipmi_user",
    "id": "ID cервера",
    "location": "RU",
    "User": "uHFxxxxx",
    "password": "4Djxxxxx"
},
"debug": null,
"key": "f685eaa0f06e47faa2e6bb5002828b00"
}

eq/remove_ipmi_user

Удаляет временного пользователя IPMI

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string remove_ipmi_user ключевое действие - удаление временного пользователя IPMI
token * string сессионный токен
id * int ID сервера
curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=remove_ipmi_user" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}"

POST-запрос, cURL

{
  "result": "OK",
  "action": "remove_ipmi_user",
  "callback": "f685eaa0f06e47faa2e6bb5002828b00"
}
Для этого действия есть соответствующий асинхронный ответ
{
  "result": "OK",
  "scope": "2021/05/17 22:50:49  User removed",
  "context": {
    "action": "remove_ipmi_user",
    "id": "ID сервера",
    "location": "RU",
    "User": "uHFxxxxx"
  },
  "debug": null,
  "key": "f685eaa0f06e47faa2e6bb5002828b00"
}

eq/unit_reset

Перезагружает модуль IPMI для конкретного сервера.

Внимание

В некоторых случаях необходимо сбросить модуль IPMI, если он перестал отвечать или не выполняет некоторые операции. В подобных ситуациях может помочь перезагрузка IPMI-контроллера.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string unit_reset ключевое действие - перезагрузка IPMI модуля. В некоторых случаях необходимо сбросить модуль IPMI, если он перестал отвечать или не выполняет некоторые операции. В подобных ситуациях может помочь перезагрузка IPMI-контроллера.
token * string сессионный токен
id * int ID сервера
pin * int PIN-код

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=unit_reset" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \
--data "pin={PIN}"
Пример положительного ответа
{
  "result": "OK",
  "action": "unit_reset",
  "callback": "f685eaa0f06e47faa2e6bb5002828b00"
}
Для этого действия есть соответствующий асинхронный ответ
{
  "result": "OK",
  "scope": "Unit is reset",
  "context": {
    "action": "unit_reset",
    "id": "ID сервера",
    "location": "RU"
  },
  "debug": "Sent cold reset command to MC",
  "key": "f685eaa0f06e47faa2e6bb5002828b00"
}

Виртуальные серверы

Действия удаленного доступа для виртуальных машин:

Ресурс Действие Описание
eq console получение доступа к консоли ВМ

eq/console

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string console ключевое действие - получение доступа к консоли ВМ
token * string сессионный токен
id * int ID сервера
pin * int PIN-код

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=console" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \
--data "pin={PIN}"
Пример положительного ответа
{
    "result": "OK",
    "action": "console",
    "callback": "f28dfd83fbc1dbb914710774d8e9e30a"
}
Для этого действия есть соответствующий асинхронный ответ
{
    "result": "OK",
    "scope": "[virt-viewer]\ntype=spice\nhost=146.0.78.94\nport=6194\npassword=HY14U9qL\n# Password is valid for 120 seconds.\ndelete-this-file=1\nfullscreen=0\ntitle=34533:%d\ntoggle-fullscreen=shift+f11\nrelease-cursor=shift+f12\nsecure-attention=ctrl+alt+end\ntls-port=6195\nenable-smartcard=0\nenable-usb-autoshare=0\nusb-filter=null\ntls-ciphers=DEFAULT\nhost-subject=O=infra.hostkey.ru,CN=172.18.2.34\nca=-----BEGIN CERTIFICATE-----\\nMIID+jCCAuKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UEBhMCVVMxGTAXBgNVBAoM\\nEGluZnJhLmhvc3RrZXkucnUxMDAuBgNVBAMMJ292ci1ubC1lbmdpbmUwMmEuaW5mcmEuaG9zdGtl\\neS5ydS40NDU2MTAeFw0yMjA2MDUwNjQyNTZaFw00MjA2MDEwNjQyNTZaMFoxCzAJBgNVBAYTAlVT\\nMRkwFwYDVQQKDBBpbmZyYS5ob3N0a2V5LnJ1MTAwLgYDVQQDDCdvdnItbmwtZW5naW5lMDJhLmlu\\nZnJhLmhvc3RrZXkucnUuNDQ1NjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmOyY2\\n9SE0+o37Uft2HQjNcUsa/+KFQ+3/Dk9QTb2/wxIRmQLDWA/TleV2tI2rdRE+UfCnbWarP4++luvy\\nrxqKFKYU5qcf1jC1QXyS9ILkD9Akmj76GGxggmfV2YsvYCxEifSRctL6foUfYiztOqHOtj5MxC2Q\\njC/7yns+Mj8U5aM8J6wYZJI7Cv50qFgKOEMLWqguSalPRInPaFiLxb0PR9MM4vI82UBWY13sCaY2\\nUtAItk3LkKEwuJAW9XaBKPR4eP2v8c9FmvfyUK7uyV+FdEitQWsQlA07fz/Dz2AdodObgmlv9NoO\\ncg0O8sTQsVt8GcXsTXOScrylqUuljGthAgMBAAGjgckwgcYwHQYDVR0OBBYEFGZ9uIc9qrUCU7DZ\\niR4k5/OCDdE4MIGDBgNVHSMEfDB6gBRmfbiHPaq1AlOw2YkeJOfzgg3ROKFepFwwWjELMAkGA1UE\\nBhMCVVMxGTAXBgNVBAoMEGluZnJhLmhvc3RrZXkucnUxMDAuBgNVBAMMJ292ci1ubC1lbmdpbmUw\\nMmEuaW5mcmEuaG9zdGtleS5ydS40NDU2MYICEAAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E\\nBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAHcQuHN3LEEdS3bCh41xOfPD3zbR4pcmHp6N5ng0FDCs\\nOZD5sO+PSrIsYP3gegVFxUomjR3AJ9TZojpodZYnzbgzaCCvC1JOb6VT35ekmNinvMfpkMB2WptM\\nPkME6sFJS4oxo6pmoPZvlKINBr3dYLcpLmFv9nYLALvL+LYxGjgnxa8bLokPYI3Pz5LL4JE8TQp0\\nFL9U6cs4DDueN0vwmNeRYb//PdSS8snlcYRhSKRsRdxx0moYSM0+CMOutjuVlXGjDxq3f6clnz1I\\nVY1/VLw1OyJTHOCHez+phC702Oh4Z5/1lMzWbRrKdZMEWweMif3VmIMMXe5JnaluF6lopW4=\\n-----END CERTIFICATE-----\\n\nsecure-channels=main;inputs;cursor;playback;record;display;smartcard;usbredir\nversions=rhev-win64:2.0-160;rhev-win32:2.0-160;rhel8:7.0-3;rhel7:2.0-6;rhel6:99.0-1\nnewer-version-url=http://www.ovirt.org/documentation/admin-guide/virt/console-client-resources\n\n[ovirt]\nhost=ovr-ru-engine02a.infra.hostkey.ru:443\nvm-guid=12b720b2-d878-4f6c-a2cc-61a61f200a48\nsso-token=mcHYs92LDliDuVJ2lHKY8nNugkPS49IuTnS3_hpKOtylYX8DbCxAOAAm8J5ib_5-XNoRzoltHvjruHsWAY7fAw\nadmin=1\nca=-----BEGIN CERTIFICATE-----\\nMIID+jCCAuKgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UEBhMCVVMxGTAXBgNVBAoM\\nEGluZnJhLmhvc3RrZXkucnUxMDAuBgNVBAMMJ292ci1ubC1lbmdpbmUwMmEuaW5mcmEuaG9zdGtl\\neS5ydS40NDU2MTAeFw0yMjA2MDUwNjQyNTZaFw00MjA2MDEwNjQyNTZaMFoxCzAJBgNVBAYTAlVT\\nMRkwFwYDVQQKDBBpbmZyYS5ob3N0a2V5LnJ1MTAwLgYDVQQDDCdvdnItbmwtZW5naW5lMDJhLmlu\\nZnJhLmhvc3RrZXkucnUuNDQ1NjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmOyY2\\n9SE0+o37Uft2HQjNcUsa/+KFQ+3/Dk9QTb2/wxIRmQLDWA/TleV2tI2rdRE+UfCnbWarP4++luvy\\nrxqKFKYU5qcf1jC1QXyS9ILkD9Akmj76GGxggmfV2YsvYCxEifSRctL6foUfYiztOqHOtj5MxC2Q\\njC/7yns+Mj8U5aM8J6wYZJI7Cv50qFgKOEMLWqguSalPRInPaFiLxb0PR9MM4vI82UBWY13sCaY2\\nUtAItk3LkKEwuJAW9XaBKPR4eP2v8c9FmvfyUK7uyV+FdEitQWsQlA07fz/Dz2AdodObgmlv9NoO\\ncg0O8sTQsVt8GcXsTXOScrylqUuljGthAgMBAAGjgckwgcYwHQYDVR0OBBYEFGZ9uIc9qrUCU7DZ\\niR4k5/OCDdE4MIGDBgNVHSMEfDB6gBRmfbiHPaq1AlOw2YkeJOfzgg3ROKFepFwwWjELMAkGA1UE\\nBhMCVVMxGTAXBgNVBAoMEGluZnJhLmhvc3RrZXkucnUxMDAuBgNVBAMMJ292ci1ubC1lbmdpbmUw\\nMmEuaW5mcmEuaG9zdGtleS5ydS40NDU2MYICEAAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E\\nBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAHcQuHN3LEEdS3bCh41xOfPD3zbR4pcmHp6N5ng0FDCs\\nOZD5sO+PSrIsYP3gegVFxUomjR3AJ9TZojpodZYnzbgzaCCvC1JOb6VT35ekmNinvMfpkMB2WptM\\nPkME6sFJS4oxo6pmoPZvlKINBr3dYLcpLmFv9nYLALvL+LYxGjgnxa8bLokPYI3Pz5LL4JE8TQp0\\nFL9U6cs4DDueN0vwmNeRYb//PdSS8snlcYRhSKRsRdxx0moYSM0+CMOutjuVlXGjDxq3f6clnz1I\\nVY1/VLw1OyJTHOCHez+phC702Oh4Z5/1lMzWbRrKdZMEWweMif3VmIMMXe5JnaluF6lopW4=\\n-----END CERTIFICATE-----\\n\n\n",
    "context": {
        "action": "console",
        "id": "34533",
        "location": "RU",
        "ip_ipmi": ""
    },
    "debug": "",
    "key": "f28dfd83fbc1dbb914710774d8e9e30a"
}

Данные из scope должны храниться в файле console.vv для virtual machine viewer или доступны через VNC

Следующий код JS выполняет это действие:

var blob = new Blob([result.scope], {
  type: 'text/octet-stream'
});
var filename = "console.vv";

if (window.navigator.msSaveOrOpenBlob) {
  window.navigator.msSaveBlob(blob, "console.vv");
} else {
  var elem = document.createElement('a');
  elem.href = window.URL.createObjectURL(blob);
  elem.download = filename;
  document.body.appendChild(elem);
  elem.click();
  document.body.removeChild(elem);
}

Управление сервером

Информация

Большинство элементов управления сервером являются частью ресурса eq (оборудование).

Ресурс Действие Описание
eq.php list получить список серверов, найти сервера
eq.php show получить полную информацию о сервере
eq.php update_servers обновить список активных серверов

eq/list

Выполняет поиск серверов по локации, статусу, оборудованию, IP и характеристикам.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string list ключевое действие - получение списка серверов, поиск серверов. Функция list возвращает id сервера, соответствующего критериям поиска
default (no extra parameters) (без дополнительных параметров) - возвращает id всех назначенных серверов
location string показывает сервера из определенного региона. Возможные значения: RU,NL,FI,IS,TR,DE and US (Россия, Нидерланды, Финляндия, Исландия, Турция, Германия и США). Пример location=RU,NL (все сервера из регионов RU и NL)
status string показывает сервера с определенным статусом. Возможные статусы клиента: rent (активный сервер), power_off (приостановлено по причине). Например (просмотр всех приостановленных серверов): status=power_off
component string серверы с определенным оборудованием, например, CPU или GPU. Используйте:component=12345,5456,... Числа — это id оборудования.
ip string сервер с определенным IP-адресом. Например: ip=199.100.7.5
mac string сервер с определенным MAC-адресом. Например: mac=00.00.00.00.00.00
Mini string компактные серверы с одним процессором и IPMI
Storage string серверы, предназначенные для использования в качестве хранилища
Nodes string серверы, предназначенные для использования в качестве узлов виртуализации
Micro string серверы с одним процессором и без IPMI
VPS string виртуальные серверы
1CPU string серверы с одним процессором
2CPU string серверы с двумя процессорами
Dell string серверы Dell
Gpu string GPU-серверы
Instances string серверы со стандартной конфигурацией и полным удаленным управлением
AMD string серверы на базе EPYC и Ryzen

Возможно запросить несколько групп, например все сервера с группами 1CPU и AMD:

group=1CPU,AMD

Примечание

Для поиска внутри тегов сервера используются API-вызовы, действие user_search.

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=list" \
--data "token=$HOSTKEY_TOKEN" \
Пример положительного ответа
{
    "servers": [
        34533
        32645
        17405
    ],
    "result": "OK"
}

eq/show

Предоставляет данные о конкретном сервере.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string show ключевое действие - предоставляет полные данные о конкретном сервере
token * string сессионный токен
id * int ID сервера

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=show" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}"
Пример положительного ответа
{
    "result": "OK",
    "server_data": {
        "id": 34533,
        "ref_tableName": "VPS",
        "Condition_Component": "rent",
        "account_id": 5724,
        "type_billing": "whmcs_itb",
        "is_owner": "Rent",
        "cost_trafficIN": 0,
        "limit_trafficIN": 999,
        "cost_traffic": 180,
        "limit_traffic": 3,
        "new_limit_traffic": 0,
        "limit_bands": 1000,
        "trafficPeriodOut": 0,
        "trafficPeriodIn": 0,
        "trafficPeriodOutBilling": 0,
        "trafficPeriodInBilling": 0,
        "datePeriod": "2024-01-14 00:00:00",
        "IsShape": 1,
        "hwconfig": "4 vCore/​4Gb/​60Gb SSD",
        "status": "rent",
        "type": "VPS",
        "days_left": 18,
        "due_date": "2024-01-14"
    },
    "hardware": {
        "config": "4 vCore/​4Gb/​60Gb SSD",
        "components": [
            {
                "Type": "Platform",
                "Name": "Ovirt VM",
                "Count": 1,
                "hdd_type": "SSD"
            },
            {
                "Type": "CPU",
                "Name": "VPS Core",
                "Count": 4,
                "hdd_type": "SSD",
                "Cores": 4,
                "cpu_type": "INTEL"
            },
            {
                "Type": "RAM",
                "Name": "VPS RAM 1Gb",
                "Count": 4,
                "hdd_type": "SSD",
                "Size": 1
            },
            {
                "Type": "HDD",
                "Name": "VPS HDD 10 Gb",
                "Count": 6,
                "hdd_type": "SSD",
                "Size": 10
            }
        ],
        "tags": {
            "platform_ipmi": [
                "ovirt"
            ],
            "platform_location": [
                "RU,NL,US,FI,IS,DE"
            ],
            "platform_tdp": [
                "1"
            ],
            "platform_blades": [
                "100"
            ],
            "platform_nojava_console": [
                ""
            ],
            "platform_vm": [
                "true"
            ],
            "platform_virt": [
                "1"
            ],
            "cpu_location": [
                "RU,NL,US,FI,IS,TR",
                "RU,NL,US,FI,IS,TR",
                "RU,NL,US,FI,IS,TR",
                "RU,NL,US,FI,IS,TR"
            ],
            "cpu_deprecation": [
                "8",
                "8",
                "8",
                "8"
            ],
            "cpu_production_start": [
                "",
                "",
                "",
                ""
            ],
            "cpu_tdp": [
                "1",
                "1",
                "1",
                "1"
            ],
            "cpu_virt": [
                "1",
                "1",
                "1",
                "1"
            ],
            "cpu_frq": [
                "2.4",
                "2.4",
                "2.4",
                "2.4"
            ],
            "cpu_cores": [
                "1",
                "1",
                "1",
                "1"
            ],
            "ram_vm": [
                "1",
                "1",
                "1",
                "1"
            ],
            "ram_location": [
                "RU,NL,US,FI",
                "RU,NL,US,FI",
                "RU,NL,US,FI",
                "RU,NL,US,FI"
            ],
            "ram_ram_type": [
                "VRAM",
                "VRAM",
                "VRAM",
                "VRAM"
            ],
            "ram_size": [
                "1",
                "1",
                "1",
                "1"
            ],
            "ram_ramtype": [
                "VRAM",
                "VRAM",
                "VRAM",
                "VRAM"
            ],
            "ram_virt": [
                "1",
                "1",
                "1",
                "1"
            ],
            "hdd_location": [
                "RU,NL,US,FI",
                "RU,NL,US,FI",
                "RU,NL,US,FI",
                "RU,NL,US,FI",
                "RU,NL,US,FI",
                "RU,NL,US,FI",
            ],
            "hdd_tdp": [
                "0.01",
                "0.01",
                "0.01",
                "0.01",
                "0.01",
                "0.01"
            ],
            "hdd_size": [
                "10",
                "10",
                "10",
                "10",
                "10",
                "10"
            ],
            "hdd_type": [
                "HDD",
                "HDD",
                "HDD",
                "HDD",
                "HDD",
                "HDD"
            ],
            "hdd_virt": [
                "1",
                "1",
                "1",
                "1",
                "1",
                "1"
            ],
            "hdd_interface": [
                "SATA",
                "SATA",
                "SATA",
                "SATA",
                "SATA",
                "SATA"
            ],
            "hdd_interface_sata": [
                "SATA",
                "SATA",
                "SATA",
                "SATA",
                "SATA",
                "SATA"
            ],
            "eta": 0.07
        },
        "vm": 1,
        "gpu": 0,
        "vds": 0,
        "uefi": 0,
        "hwraid": 0,
        "motherboard_name": "",
        "cpu_name": "vCPU",
        "cpu_type": "vCPU",
        "cpu_count": 4,
        "cpu_cores": 4,
        "cpu_frq": "2.4",
        "ram": 4,
        "ram_type": "vram",
        "hdd": 60,
        "hdd_count": 1,
        "hdd_groups": [
            {
                "name": "60Gb SSD",
                "type": "HDD",
                "count": 1,
                "size": "60"
            }
        ],
        "hdd_pairs": 0,
        "gpu_name": null,
        "gpu_count": 0,
        "raid_levels": [
            "LVM_HBA"
        ]
    },
    "groups": [
        {
            "ID": "26",
            "Code": "Micro",
            "Name": "Micro",
            "active": 0
        },
        {
            "ID": "32",
            "Code": "1CPU",
            "Name": "1CPU",
            "active": 0
        },
        {
            "ID": "33",
            "Code": "2CPU",
            "Name": "2CPU",
            "active": 0
        },
        {
            "ID": "39",
            "Code": "OUT",
            "Name": "OUT",
            "active": 0
        },
        {
            "ID": "41",
            "Code": "Gpu",
            "Name": "Gpu",
            "active": 0
        },
        {
            "ID": "52",
            "Code": "1CPU_OUT_NEW",
            "Name": "1CPU_OUT_NEW",
            "active": 0
        },
        {
            "ID": "53",
            "Code": "Ryzen",
            "Name": "Ryzen",
            "active": 0
        },
        {
            "ID": "54",
            "Code": "5Ghz",
            "Name": "5Ghz",
            "active": 0
        },
        {
            "ID": "55",
            "Code": "2CPU_OUT_NEW",
            "Name": "2CPU_OUT_NEW",
            "active": 0
        },
        {
            "ID": "59",
            "Code": "Promo",
            "Name": "Promo",
            "active": 0
        }
    ],
    "licenses": [
        {
            "id": 124,
            "name": "ISPmanager 6 Lite on IP 31.207.44.105",
            "amount": 1,
            "date_buy": ""
        }
    ],
    "location": {
        "dc_location": "RU",
        "location_id": 1
    },
    "OS": null,
    "IP": [
        {
            "port": "eth0",
            "MAC": "56:6f:ff:5b:08:7b",
            "IP": "31.207.44.105",
            "status": "enable",
            "main_ip": 1,
            "locked": 0,
            "date_block": null,
            "license_id": 124,
            "main_int": 1,
            "vlan": 415,
            "updated": 13,
            "license_name": "ISPmanager",
            "white_ddos": 0,
            "description": ""
        }
    ],
    "interfaces": [
        {
            "id": 122936,
            "type": "eth0",
            "mac": "56:6f:ff:5b:08:7b",
            "upstream_id": null,
            "IsMain": 1,
            "IsVirt": 0,
            "Status": "enable",
            "switch_owner": "",
            "switch_model": "virtual"
        }
    ],
    "IPMI": {
        "model": "ovirt",
        "interfaces": []
    },
    "tags": [
        {
            "id": 799108,
            "component": "Component1",
            "component_id": 34533,
            "tag": "order_origin",
            "value": "invapi",
            "extra": "1",
            "internal": 0
        },
        {
            "id": 799112,
            "component": "Component1",
            "component_id": 34533,
            "tag": "hostname",
            "value": "ru-vmmini",
            "extra": "",
            "internal": 0
        },
        {
            "id": 799116,
            "component": "Component1",
            "component_id": 34533,
            "tag": "password",
            "value": "wK5Vjwx_BC",
            "extra": "",
            "internal": 0
        },
        {
            "id": 799128,
            "component": "Component1",
            "component_id": 34533,
            "tag": "OS",
            "value": "Ubuntu 22.04",
            "extra": "",
            "internal": 0
        },
        {
            "id": 799132,
            "component": "Component1",
            "component_id": 34533,
            "tag": "user_name",
            "value": "root",
            "extra": "",
            "internal": 0
        },
        {
            "id": 799137,
            "component": "Component1",
            "component_id": 34533,
            "tag": "webpanel",
            "value": "ispmanager6",
            "extra": "https://isp34533.hostkey.in:1500/ispmgr",
            "internal": 0
        }
    ],
    "preset": "vm.mini",
    "preset_description": "VM instance 4/4/60 SSD"
}

eq/update_servers

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string update_servers ключевое действие - обновление списка активных серверов.
token * string сессионный токен

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=update_servers" \
--data "token=$HOSTKEY_TOKEN"
Пример положительного ответа
{
  "result": "OK"
}

Управление питанием сервера

Управление серверами без ОС осуществляется через внешний модуль IPMI. Виртуальные машины oVirt управляются через стандартный API.

Ресурс Действие Описание
eq.php status получение статуса питания
eq.php sensors получение данных датчиков (только для физических серверов)
eq.php on включение питания
eq.php off выключение питания
eq.php reboot перезагрузка сервера

eq/status

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string status ключевое действие - получение статуса питания
token * string сессионный токен
id * int ID сервера

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=status" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}"
Пример положительного ответа
{
    "result": "OK",
    "action": "status",
    "callback": "6fae43c4aca5be531a1275307bd094b1"
}
Для этого действия есть соответствующий асинхронный ответ
{
    "result": "OK",
    "scope": "VM is up now",
    "context": {
        "action": "status",
        "id": "34533",
        "location": "RU",
        "ip_ipmi": ""
    },
    "debug": "debug",
    "key": "6fae43c4aca5be531a1275307bd094b1"
}
{
"result": "OK",
"scope": "Chassis Power is on",
"context": {
    "action": "status",
    "id": "ID сервера",
    "location": "RU"
},
"debug": "Chassis Power is on",
"key": "f685eaa0f06e47faa2e6bb5002828b00"
}

eq/sensors (только для физических серверов)

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string sensors ключевое действие- получение данных датчиков
token * string сессионный токен
id * int ID сервера

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=sensors" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}"
Пример положительного ответа
{
  "result": "OK",
  "action": "sensors",
  "callback": "f685eaa0f06e47faa2e6bb5002828b00"
}
Для этого действия есть соответствующий асинхронный ответ
{
  "result": "OK",
  "scope": "CPU Temp         | 36 degrees C      | ok\nPCH Temp         | 37 degrees C      | ok\nSystem Temp      | 25 degrees C      | ok\nPeripheral Temp  | 33 degrees C      | ok\nVcpuVRM Temp     | 34 degrees C      | ok\nVmemABVRM Temp   | 31 degrees C      | ok\nVmemCDVRM Temp   | 30 degrees C      | ok\nP1-DIMMA1 Temp   | 26 degrees C      | ok\nP1-DIMMB1 Temp   | 26 degrees C      | ok\nP1-DIMMC1 Temp   | no reading        | ns\nP1-DIMMD1 Temp   | no reading        | ns\nFAN              | 3100 RPM          | ok\n12V              | 12.06 Volts       | ok\n5VCC             | 5.08 Volts        | ok\n3.3VCC           | 3.33 Volts        | ok\nVBAT             | 3.00 Volts        | ok\nVcpu             | 1.84 Volts        | ok\nVDIMMAB          | 1.22 Volts        | ok\nVDIMMCD          | 1.22 Volts        | ok\n5VSB             | 5.10 Volts        | ok\n3.3VSB           | 3.27 Volts        | ok\n1.5V PCH         | 1.53 Volts        | ok\n1.2V BMC         | 1.23 Volts        | ok\n1.05V PCH        | 1.06 Volts        | ok\nPS Status        | 0x01              | ok\n",
  "context": {
    "action": "get_sensors",
    "id": "ID сервера",
    "location":"RU"
  },
  "debug":"CPU Temp         | 36 degrees C      | okPCH Temp         | 37 degrees C      | okSystem Temp      | 25 degrees C      | okPeripheral Temp  | 33 degrees C      | okVcpuVRM Temp     | 34 degrees C      | okVmemABVRM Temp   | 31 degrees C      | okVmemCDVRM Temp   | 30 degrees C      | okP1-DIMMA1 Temp   | 26 degrees C      | okP1-DIMMB1 Temp   | 26 degrees C      | okP1-DIMMC1 Temp   | no reading        | nsP1-DIMMD1 Temp   | no reading        | nsFAN              | 3100 RPM          | ok12V              | 12.06 Volts       | ok5VCC             | 5.08 Volts        | ok3.3VCC           | 3.33 Volts        | okVBAT             | 3.00 Volts        | okVcpu             | 1.84 Volts        | okVDIMMAB          | 1.22 Volts        | okVDIMMCD          | 1.22 Volts        | ok5VSB             | 5.10 Volts        | ok3.3VSB           | 3.27 Volts        | ok1.5V PCH         | 1.53 Volts        | ok1.2V BMC         | 1.23 Volts        | ok1.05V PCH        | 1.06 Volts        | okPS Status        | 0x01              | ok",
  "key":"f685eaa0f06e47faa2e6bb5002828b00"
}

eq/on

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string on ключевое действие - включение питания
token * string сессионный токен
id * int ID сервера
pin * int PIN-код

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=on" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \
--data "pin={PIN}"
Пример положительного ответа
{
    "result": "OK",
    "action": "on",
    "callback": "9f058913338363da1276a003707dc8bd"
}
Для этого действия есть соответствующий асинхронный ответ
{
    "result": "OK",
    "scope": "VM is up now",
    "context": {
        "action": "on",
        "id": "34533",
        "location": "RU",
        "ip_ipmi": ""
    },
    "debug": "",
    "key": "9f058913338363da1276a003707dc8bd"
}

eq/off

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

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string off ключевое действие - Выключение питания
token * string сессионный токен
id * int ID сервера
pin * int PIN-код

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=off" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \
--data "pin={PIN}"
Пример положительного ответа
{
    "result": "OK",
    "action": "off",
    "callback": "6ff0b0895a6c25edd31c4069ea009ff7"
}
Для этого действия есть соответствующий асинхронный ответ
{
    "result": "OK",
    "scope": "VM is down now",
    "context": {
        "action": "off",
        "id": "34533",
        "location": "RU",
        "ip_ipmi": ""
    },
    "debug": "debug",
    "key": "6ff0b0895a6c25edd31c4069ea009ff7"
}

eq/reboot

Позволяет выполнить перезагрузку сервера.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string reboot ключевое действие - перезагрузка сервера
token * string сессионный токен
id * int ID сервера
pin * int PIN-код

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=reboot" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \
--data "pin={PIN}"
Пример положительного ответа
{
    "result": "OK",
    "action": "reboot",
    "callback": "9a3751450d879fd9e933fdea92add6e8"
}
Для этого действия есть соответствующий асинхронный ответ

//ошибка не сработало для виртуалки.

    "result": "OK",
    "scope": "VM is rebooted",
    "context": {
        "action": "off",
        "id": "34533",
        "location": "RU",
        "ip_ipmi": ""
    },
    "debug": "debug",
    "key": "9a3751450d879fd9e933fdea92add6e8"
}

Переустановка операционной системы на сервере (второй вариант)

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

Мы используем Foreman для развертывания серверов через сетевую загрузку PXE. Процесс установки проходит в несколько этапов:

  1. Создать ключ этапа переустановки (опционально) через eq/reinstall;
  2. Создать конфигурацию PXE с параметрами через eq/create_pxe;
  3. Изменить порядок загрузки сервера через eq/bootdev. Он должен запускаться с PXE;
  4. Перезагрузить сервер через eq/reboot;
  5. Сервер “поймает” загрузчик PXE и установка ОС продолжится;
  6. ОС сообщит об этапах установки:
    1. 1-й этап: начата установка ОС;
    2. 2 этап: базовая ОС установлена, переходим к постустановочным задачам;
    3. 3-й этап: постустановочные задачи выполнены, запущены финальные задачи;
    4. 4-й этап: завершение установки, перезапуск сервера;
    5. 5-й этап: сервер онлайн;
  7. После установки ОС следует изменить порядок загрузки через eq/bootdev. Сервер должен загружаться с жесткого диска;
  8. Запуск дополнительных задач Jenkins на сервере (т.е. установить драйверы графического процессора);
  9. Удалить конфигурацию PXE через eq/clear_pxe. Это действие позволит избежать внезапной переустановки.
Ресурс Действие Описание
eq.php reinstall создание мастер-ключа для переустановки ОС
os.php list получение списка ОС для сервера
jenkins.php list получение доступных задач Ansible
eq.php create_pxe создание конфигурации PXE для установки ОС
eq.php boot_dev устанавливает порядок загрузки для виртуальной машины или физического сервера
eq.php reboot перезагрузка сервера

eq/reinstall

Позволяет создать мастер-ключ $REINSTALL_KEY для переустановки операционной системы.

Примечание

Мастер-ключ необходим для автоматизации процесса установки. Он позволяет отслеживать этапы переустановки ОС, так как на этот ключ будут идти все оповещения об этапах установки ОС через асинхронные ответы. Этот ключ также потребуется для вызова eq/create_pxe.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action string reinstall ключевое действие - создание мастер-ключа для переустановки ОС
token * string сессионный токен
id * int ID сервера

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=reinstall" \
--data "token=$HOSTKEY_TOKEN" \
--data "id={ID сервера}" \
Пример положительного ответа
{
"result":"OK",
"action":"reinstall",
"stage":"create_pxe",
"callback":"aa719bfc59c3626c059950c1dcb4dbfa" \\ ключ $REINSTALL_KEY для получения информации об этапах установки.
}    

Примечание

Информацию обо всех этапах переустановки можно получить через вызов eq_callback/check.

eq_callback/check

Получение информации обо всех этапах переустановки ОС.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action string сheck ключевое действие - получение информации об этапе переустановки ОС
reinstall_key string ключ из eq/reinstall для отслеживания этапов переустановки

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/eq_callback.php" -X POST \
--data "action=сheck" \
--data "key=$REINSTALL_KEY" \
Пример положительного ответа
{
"result":"Stage", // информативное сообщение о прогрессе процесса установки
"scope":" (1\/5) OS installation started", // информация об этапе
"context":{"action":"reinstall","id":"42253","location":"RU"}, // данные установки (основное действие, ID сервера и локация)
"key":"aa719bfc59c3626c059950c1dcb4dbfa" // ключ переустановки
} 
{
"result":"OK",
"scope":" Deploy completed, Server is online",
"context":{"action":"reinstall",
"id":"42253","location":"RU"},
"debug":null,
"key":"0aacc95ff67f81943519b44f566bedd8"
}

Действия перед началом установки

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

  1. Получить список возможных к установке операционных систем с помощью вызова os_list

    Внимание

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

  2. Выбрать способ организации данных (разбиения диска):

    • LVM_RAID0 - создать полосу на всех дисках через LVM;
    • LVM_HBA - если имеется более 1 устройства хранения, следует установить ОС на самое маленькое устройство и оставить остальные нетронутыми;
    • LVM_RAID1 - создать зеркало диска через LVM, применимо, если есть два одинаковых устройства хранения;
    • LVM_RAID10 - создать LVM RAID10 для всех пар устройств хранения, требуется минимум 2 пары устройств;
    • LVM_RAID10S - создать LVM RAID1 на наименьшей паре устройств хранения для ОС, создать LVM RAID10 на остальных парах устройств хранения.
  3. Приготовить Public ssh key если вы хотите установить свой SSH-ключ для входа администратора.

  4. Продумать Post-install task - стандартизированные задачи Ansible, которые можно запускать на сервере после установки через Jenkins. Их список можно получить через вызов jenkins/get_tasks.

jenkins/get_tasks

Позволяет получить все возможные задачи Ansible с их тегами. Эти данные можно загрузить в переменные JS и показать их для соответствующих серверов - проверка по тегам.

HTTP-метод - POST

Параметр Обязательный параметр Тип Значение/по умолчанию Описание
action * string get_tasks ключевое действие - получение доступных задач Ansible

Возможные теги:

  • gpu - задача подходит для GPU серверов;
  • bm - задача подходит для физического сервера;
  • vm - задача подходит для ВМ (VPS);
  • vgpu - задача подходит для vGPU сервера;
  • default - значение по умолчанию.

POST-запрос, cURL

curl -s "https://invapi.hostkey.ru/jenkins.php" -X POST \
--data "action=get_tasks" \
Пример положительного ответа
{
    "result": "OK",
    "tasks": [{
        "id": -1,
        "task": "",
        "desc": "Do nothing",
        "tag": "",
        "tags": [{
            "tag": "gpu"
        }, {
            "tag": "vgpu"
        }, {
            "tag": "vm"
        }, {
            "tag": "bm"
        }]
    }, {
        "id": 1,
        "task": "invapi_gpu_conf_iommu_patch_gpu_linux_auto.dsl", // название задачи
        "desc": "Install GPU drivers", // понятное человеку описание
        "tag": "gpu_driver", // вариант задачи
        "tags": [{  // теги для фильтрации вывода в пользовательском интерфейсе
            "tag": "gpu"
        }, {
            "tag": "vgpu"