API платформы VK WorkSpace (SaaS) для партнеров
Документ содержит описание программного интерфейса к SaaS-версии платформы VK WorkSpace (далее — партнерский API). С помощью API приложение партнера VK WorkSpace может автоматизированно:
- создавать запросы на регистрацию клиентов;
- управлять подписками клиентов на тарифы.
Документ предназначен для разработчиков партнеров VK WorkSpace.
Авторизация выполняется при помощи токена. При отправке запросов токен передается в HTTP‑заголовке X-Access-Token.
Запросы к API передаются по протоколу HTTP. Формат запроса:
<метод> /partner/api/v1/<ресурс> HTTP/1.1<параметры>
где:
<метод>― HTTP‑метод;<ресурс>― идентификатор (URI) ресурса;<параметры>― параметры запроса, которые не входят в URI ресурса.
Данные передаются в формате JSON.
Если запрос выполнен успешно, API возвращает в ответе коды 200 (OK) и необходимые данные. Ответы возвращаются в формате JSON.
Если запрос не выполнен, API возвращает в ответе коды 400 и 403. Формат ответа с кодом ошибки:
{"error": {"code": 0000,"message": "Ошибка"}}
Код | Возможные причины |
|---|---|
400 Bad Request | Сервер не может обработать запрос: - У вас нет прав на указанный домен - Домен уже зарегистрирован ранее - Указаны неправильные данные (неправильный адрес электронной почты, некорретный ИНН и т.п.) - Произошла техническая ошибка |
403 Forbidden | Проблемы с авторизацией, доступом к данным: - Указан невалидный токен авторизации - Отправитель запроса не является действущим партнером VK WorkSpace |
- Регистрация клиента и домена
- Получение информации по клиенту
- Получение статуса заявки на регистрацию
- Получение списка тарифов
- Создание подписки на тариф
- Изменение подписки на тариф
Выполняет запрос на регистрацию и возвращает ссылку на прохождение регистрации. Ссылка имеет ограниченный срок действия.
Входные данные:
POST /partner/api/v1/clients/ HTTP/1.1X-Access-Token: api.clients.registrationContent-Type: application/json
Параметры запроса с примерами значений:
{"email": "client@mail.ru","subpartner": "local_partner","domain_name": "example.ru","partner_client_id": "client-000000","fio": "Иванов Иван Иванович","phone": "79998887755","company": {"is_resident": false,"inn": "123456789","ogrn": "32165645987651321314","kpp": "55566622","country": "РФ","name": "СтройСервис","registration_number": "321654","zip_code": 630023,"address": "Москва ул.Ленина д.5","address_legal": "Москва ул.Ленина д.6","city": "Москва","street": "Ленина","house": "5"}}
Описание параметров:
Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
email | string | да | Адрес электронной почты клиента, для которого регистрируется домен |
subpartner | string | Ваш партнер или подрядчик, обслуживающий клиента (если применимо) | |
domain_name | string | Имя домена | |
partner_client_id | string | Идентификатор клиента в вашей системе | |
fio | string | ФИО клиента | |
phone | string | Номер телефона клиента | |
company | object | Данные компании клиента | |
is_resident | bool | да, если указан company | Налоговый резидент РФ. Возможные значения: true, false |
inn | string | да, если указан company | ИНН |
country | string | да, если указан company | Страна |
name | string | да, если указан company | Наименование организации |
ogrn | string | да, если указан company | ОГРН или ОГРНИП |
kpp | string | да, если указан company | КПП |
address | string | Фактический адрес | |
address_legal | string | Юридический адрес | |
zip_code | string | Почтовый индекс | |
city | string | Город | |
street | string | Улица | |
house | string | Дом |
Выходные данные:
В случае успешного выполнения запроса возвращает код 200 и данные:
HTTP/1.1 200 OK{"client_uid": "550e8400-e29b-41d4-a716-446655440000","link": "https://link-to-register-client","valid_until": "2024-12-31T23:59:59Z","link_uid": "abc123-456def-789ghi"}
Описание параметров:
Параметр | Тип | Описание |
|---|---|---|
client_uid | string | Идентификатор вашего клиента, присвоенный системой VK WorkSpace |
link | string | Ссылка на прохождение регистрации, в которой зашиты параметры: - uid — уникальный код ссылки; - email — адрес почты клиента, если был передан в запросе; - domain_name — имя домена, если было передан в запросе. Ссылка имеет ограниченный период действия. |
valid_until | string | Срок окончания действия ссылки |
link_uid | string | Идентификатор ссылки на регистрацию |
В слушае ошибки возвращает коды 400, 403.
Возвращает информацию по клиенту.
Входные данные:
GET /partner/api/v1/clients/<client_uid>/ HTTP/1.1X-Access-Token: api.clients.get
Описание параметров:
Path-парметр | Тип | Обязательный | Описание |
|---|---|---|---|
<client_uid> | int | да | Идентификатор клиента в системе VK WorkSpace, предоставляется в ответе на запрос на регистрацию клиента |
Выходные данные:
В случае успешного выполнения запроса возвращает код 200 и данные:
HTTP/1.1 200 OK{"client_uid": "550e8400-e29b-41d4-a716-446655440000","partner_client_id": "partner-00000","domain_name": "example.com","status": "active","phone": "+7934567890","email": "client@example.com"}
Описание параметров:
Параметр | Тип | Описание |
|---|---|---|
client_uid | string | Идентификатор клиента в системе VK WorkSpace |
partner_client_id | string | Идентификатор клиента в вашей системе |
domain_name | string | Имя домена. Возвращается, если домен был передан в запросе на регистрацию либо по созданной ссылке выполнилось создание домена |
status | string | Статус (актуальность) ссылки на регистрацию клиента, возможные значения: active (активна), inactive (неактивна) |
phone | string | Номер телефона клиента |
email | string | Адрес почты клиента |
В слушае ошибки возвращает коды 400, 403.
Возвращает статус по процессу регистрации клиента и домена.
Входные данные:
GET /partner/api/v1/registrations/<link_uid>/status/ HTTP/1.1X-Access-Token: api.registrations.status
Описание параметров:
Path-парметр | Тип | Обязательный | Описание |
|---|---|---|---|
<link_uid> | int | да | Идентификатор ссылки на регистрацию, предоставляется в ответе на запрос на регистрацию клиента |
Выходные данные:
В случае успешного выполнения запроса возвращает код 200 и данные:
HTTP/1.1 200 OK{"client_uid": "550e8400-e29b-41d4-a716-446655440000","domain_name": "example.ru","valid_until": "2024-12-31T23:59:59Z","status": "0"}
Описание параметров:
Параметр | Тип | Описание |
|---|---|---|
client_uid | string | Идентификатор клиента в VK WorkSpace |
domain_name | string | Имя домена. Возвращается, если домен был передан в запросе на регистрацию либо по созданной ссылке выполнилось создание домена |
valid_until | string | Срок окончания действия ссылки на регистрацию |
status | int | Статус заявки |
В слушае ошибки возвращает коды 400, 403.
Возвращает список тарифов с информацией по ним.
Входные данные:
GET /partner/api/v1/rates/ HTTP/1.1X-Access-Token: api.rates.get
Выходные данные:
В случае успешного выполнения запроса возвращает код 200 и данные:
HTTP/1.1 200 OK[{"uid": "basic-0000","name": "Basic Plan","service_slug": "basic_service","rate_type": "monthly","period": "1 month","users_max": 100,"price": "10000.00","options": [{"option_slug": "priority_support","price": "20000.00","option_limit": null,"is_default": true,"is_fix": true}]},{// данные следующего тарифа}]
Описание параметров:
Параметр | Тип | Описание |
|---|---|---|
uid | string | Идентификатор тарифа |
name | string | Название тарифа |
service_slug | string | |
rate_type | sring | Тип подписки (помесячная, годовая) |
period | string | Период оплаты подписки на тариф |
users_max | int | Максимальное количество пользователей на тарифе |
price | int | Стоимость подписки на тариф |
options | object | Опции, которые могут быть подключены в рамках тарифа |
option_slug | string | Идентификатор опции |
price | string | Стоимость опции |
option_limit | int | Ограничения по опции |
is_default | bool | Условия подключения опции: - true — опция подключается автоматически, не требует действий;- false — для подключения опции требуется выполнить действия |
is_fix | bool | Стоимость опции: - фиксированная (не зависит от количества пользователей в подписке) — значение true;- указана за одного пользователя — значение false |
В слушае ошибки возвращает коды 400, 403.
Создает подписку на тариф и возвращает идентификатор созданной подписки.
Входные данные:
POST /partner/api/v1/subscriptions/ HTTP/1.1X-Access-Token: api.subscriptions.createContent-Type: application/json
Параметры запроса:
{"client_uid": "550e8400-e29b-41d4-a716-446655440000","domain_name": "example.ru","order_id": "ORD123456","deal_number": "DEAL78910","rate": "premium","users_count": 100,"auto_renew": true}
Описание параметров:
Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
client_uid | int | да | Идентификатор клиента в VK WorkSpace |
domain_name | string | да | Имя домена |
order_id | string | Идентификатор заявки в вашей системе (если применимо) | |
deal_number | string | Идентификатор сделки в вашей системе (если применимо) | |
rate | string | да | Название / идентификатор тарифа, который можно узнать с помощью запроса GET /partner/api/v1/rates (Получение списка тарифов); см. uid в rates |
users_count | int | да | Количество пользователей на тарифе |
auto_renew | bool | да | Автопродление подписки, возможные значения: true (включить), false (не включать) |
Выходные данные:
В случае успешного выполнения запроса возвращается код 200 с указанием идентификатора подписки:
HTTP/1.1 200 OK{"id":00000}
В слушае ошибки возвращает коды 400, 403.
Изменяет подписку на тариф:
- включает или отключает автопродление подписки;
- изменяет количество пользователей (лицензий) на тарифе;
- изменяет тариф.
Входные данные:
PATCH /partner/api/v1/subscriptions/ HTTP/1.1X-Access-Token: api.subscriptions.updateContent-Type: application/json
Параметры запроса:
{"client_uid": "550e8400-e29b-41d4-a716-446655440000","domain_name": "example.ru","rate": "premuim","users_count": 100,"auto_renew": false}
Описание параметров:
Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
client_uid | int | да | Идентификатор клиента в VK WorkSpace |
domain_name | string | да | Имя домена |
deal_number | string | да | Идентификатор сделки |
rate | string | Название (идентификатор) нового тарифа, если нужно изменить тариф | |
users_count | int | Новое количество пользователей на тарифе, если нужно изменить количество лицензий | |
auto_renew | bool | Включение ( true) или отключение (false) автопродления подписки |
Выходные данные:
В случае успешного выполнения запроса возвращает код 200 ОК с указанием идентификатора подписки:
HTTP/1.1 200 OK{"id": 0000000}
В слушае ошибки возвращает коды 400, 403.
Выполняем последовательно запросы и действия:
- Регистрируем клиента
POST /partner/api/v1/clients/, получаем ссылку и выполняем регистрацию. - Узнаем статус регистрации
GET /partner/api/v1/registrations/<id>/status/, чтобы убедиться, что регистрация прошла успешно (либо можно запросить информацию по клиентуGET /partner/api/v1/clients/<id>/). - Запрашиваем список тарифов
GET /partner/api/v1/rates/. - Создаем подписку на тариф
POST /partner/api/v1/subscriptions/.
1. Пример запроса на регистрацию клиента:
POST /partner/api/v1/clients/ HTTP/1.1X-Access-Token: api.clients.registrationContent-Type: application/json{"email": "hinkali@hinkali.ru","subpartner": "MyPartner","domain_name": "hinkali.ru","fio": "Ivanov Ivan Ivanovich","phone": "+793456789","company":{"is_resident": true,"inn": "1234567890","country": "Russia","name": "ООО Хинкалёнок","registration_number": "987654321","zip_code": 123456,"city": "Москва","street": "Тверская","house": "10"}}
В случае успешной регистрации будет возвращен ответ 200 ОК с указанием ссылки на регистрацию:
HTTP/1.1 200 OK{"client_uid": "550e8400-e29b-41d4-a716-446655440000","link": "https://example.com/registration/12345","valid_until": "2024-12-31T23:59:59Z","link_uid": "abc123-456def-789ghi"}
2а. Пример запроса статуса регистрации:
GET /partner/api/v1/registrations/abc123-456def-789ghi/status/ HTTP/1.1X-Access-Token: api.registrations.status
В случае успешного выполнения запроса будет возвращен ответ 200 ОК с информацией по клиенту:
HTTP/1.1 200 OK{"client_uid": "550e8400-e29b-41d4-a716-446655440000","domain_name": "hinkali.ru","valid_until": "2024-12-31T23:59:59Z","status": "0"}
2б. Пример запроса информации по клиенту:
GET /partner/api/v1/clients/550e8400-e29b-41d4-a716-446655440000/ HTTP/1.1X-Access-Token: api.clients.get
В случае успешного выполнения запроса будет возвращен ответ 200 ОК с информацией по клиенту:
HTTP/1.1 200 OK{"client_uid": "550e8400-e29b-41d4-a716-446655440000","partner_client_id": "MyPartner","domain_name": "hinkali.ru","status": "active","phone": "+7934567890","email": "hinkali@hinkali.ru"}
3. Пример запроса на получение списка тарифов:
GET /partner/api/v1/rates/ HTTP/1.1X-Access-Token: api.rates.get
В случае успешного выполнения запроса будет возвращен ответ 200 ОК с информацией по тарифам:
HTTP/1.1 200 OK[{"uid": "basic-00000","name": "Basic Plan","service_slug": "basic_service","rate_type": "monthly","period": "1 month","users_max": 100,"price": "10000.00","options": [{"option_slug": "priority_support","price": "20000.00","option_limit": null,"is_default": true,"is_fix": true}]}]
4. Пример запроса на создание подписки:
POST /partner/api/v1/subscriptions/ HTTP/1.1X-Access-Token: api.subscriptions.createContent-Type: application/json{"client_uid": "550e8400-e29b-41d4-a716-446655440000","domain_name": "example.com","order_id": "ORD123456","deal_number": "DEAL78910","rate": "premium","users_count": 50,"auto_renew": true}
В случае успешного выполнения запроса будет возвращен ответ 200 ОК с идентификатором подписки:
HTTP/1.1 200 OK{"id": 000000}
Чтобы выключить автопродление конкретной подписки и прекратить списание оплаты по ней, выполняем запрос Изменение подписки на тариф и указываем параметр auto_renew со значением false:
PATCH /partner/api/v1/subscriptions/ HTTP/1.1X-Access-Token: api.subscriptions.updateContent-Type: application/json{"client_uid": "550e8400-e29b-41d4-a716-446655440000","domain_name": "example.com","auto_renew": false}
В случае успешноого выключения автопродления будет возвращен ответ 200 ОК с идентификатором подписки:
HTTP/1.1 200 OK{"id": 000000}
Чтобы возобновить автопродление подписки, выполняем запрос Изменение подписки на тариф и указываем параметр auto_renew со значением true:
PATCH /partner/api/v1/subscriptions/ HTTP/1.1X-Access-Token: api.subscriptions.updateContent-Type: application/json{"client_uid": "550e8400-e29b-41d4-a716-446655440000","domain_name": "example.com","auto_renew": true}
В случае успешного выполнения запроса будет возвращен ответ 200 OK с указанием идентификатора подписки:
HTTP/1.1 200 OK{"id": 000000}
Чтобы изменить количество лицензий, выполняем запрос Изменение подписки на тариф и указываем новое количество лицензий в параметре users_count:
PATCH /partner/api/v1/subscriptions/ HTTP/1.1X-Access-Token: api.subscriptions.updateContent-Type: application/json{"client_uid": "550e8400-e29b-41d4-a716-446655440000","domain_name": "example.com","users_count": 25}
В случае успешного изменения количества лицензий будет возвращен ответ 200 ОК с указанием идентификатора подписки:
HTTP/1.1 200 OK{"id": 000000}
Чтобы изменить тариф для адаптации подписки под запросы клиента, выполняем запрос Изменение подписки на тариф и указываем новый тариф rate:
PATCH /partner/api/v1/subscriptions/ HTTP/1.1X-Access-Token: api.subscriptions.updateContent-Type: application/json{"client_uid": "550e8400-e29b-41d4-a716-446655440000","domain_name": "example.com","rate": "premium"}
В случае успешного изменения тарифа будет возвращен ответ 200 ОК с указанием идентификатора подписки:
HTTP/1.1 200 OK{"id": 000000}