Skip to main content

Hollihop API 2.0

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

Авторизация

Все функции, кроме AddStudyRequest требуют передачи ключа доступа (авторизации) через аргумент authkey. Получить ключ можно разделе Настройки→Интеграция→API.
При указании ключа в URL не забудьте применить к нему urlencode(), т.к. в нём могут содержаться символы, которые нельзя указывать в URL как есть.

Вызов API

Вызов ф-ций данной версии API осуществляется по следующему URL: https://<Ваш субдомен>.t8s.ru/Api/V2/<Имя функции>. Т.е., к примеру, если ваш субдомен - «someschool», а имя функции - «GetLocations», то получится следующий URL: https://someschool.t8s.ru/Api/V2/GetLocations

Функции для запроса данных могут вызываться как через GET, так и через POST. Для отправки данных - только через POST.

Вызывать функции можно как с серверной стороны сайта (это предпочтительный вариант), так и с клиентской (поддерживается JSONP).

При вызове с клиентской стороны имейте в виду, что ключ размещается в открытом доступе (в HTML или JS-файле). Поэтому используйте для этого специальные ключи (т.е. действующие только в рамках одной ф-ции) и только для ф-ций, не возвращающих конфиденциальную информацию.

Имеется ограничение на количество запросов за единицу времени. На данный момет это ограничение составляет: 600 запросов за 30 сек. При превышении ограничения возвращается ошибка "Requests limit is exceeded".

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

Передача аргументов

В случае POST аргументы можно передавать как с использованием Content-Type x-www-form-urlencoded, так и application/json.

Дату в качестве параметра необходимо указывать в формате YYYY-MM-DD, дату/время – в формате YYYY-MM-DDThh:mm.

Культура

Любая из функций API может принимать аргумент culture. На данный момент поддерживаются два значения: «ru-RU» и «en-US». Если аргумент culture не указан, он запрашивается из cookies, в противном случае принимается равным «ru-RU». Передавать данный аргумент можно только через URL.
Его значение влияет на строковое представление дробных чисел, например, в названиях цен (разные десятичные разделители и разделители групп разрядов) и транслитерацию имён пользователей и филиалов.
В числовом виде дробные числа при любом culture всегда возвращаются с разделителем "." (как это требует JSON).

Ошибки

В случае ошибки при вызове любой из функций возвращается поле: "Error" и, если вызов не в формате JSONP, устанавливается код состояния HTTP 500.

Пример:

{
	"Error": "Неверный аргумент."
}


Запрос данных


GetLocations: Локации

Список параметров (ни один не является обязательным):

id Идентификатор локации
name
Наименование локации (по полному совпадению, без учёта регистра)
Пример результата
{
	"Locations":
	[{
		"Id": 5, // Идентификатор локации
		"Name": "Главный филиал" // Наименование локации
	},
	...]
}

GetOffices: Филиалы

Список параметров (ни один не является обязательным):

id Идентификатор филиала.
locationId Идентификатор локации.
name Наименование филиала (по полному совпадению, без учёта регистра).
license По номеру лицензии (по частичному совпадению, без учёта регистра).
Пример результата
{
	"Offices":
	[{
		"Id": 5, // Идентификатор филиала
		"Name": "Главный филиал", // Наименование филиала
		"Location": "Основная локация", // Наименование локации
		"Address": "г. Москва", // Адрес филиала
		"EMail": "school@school.ru", // E-mail филиала
		"Phone": "+71111111111", // Телефон филиала
		"NoClassrooms": false, // Признак филиала без аудиторий
		"TimeZone": "+3:00", // Часовой пояс филиала
		"License": "№123" // Номер лицензии филиала
	},
	...]
}


GetStudyRequests: Заявки на обучение

Список параметров (ни один не является обязательным):

id Идентификатор заявки.
from Начальные дата/время создания заявки.
to Конечные дата/время создания заявки.
status Битовая маска статуса заявки (1 - необработанная, 2 - обработанная, 4 - удалённая в архив без обработки, 8 - удалённая из архива).
location Наименование локации в заявке.
office Наименование филиала в заявке.
leadId Идентификатор лида, подтверждённого по заявке.
studentClientId Идентификатор клиента-ученика, подтверждённого по заявке.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"StudyRequests":
	[{
		"Id": 123, // Идентификатор заявки (отсутствует для удалённых из архива)
		"Created": "2019-10-09T15:30:23", // Дата и время создания заявки в UTC
		"Status": 1, // Статус заявки (0 - необработанная, 1 - обработанная, 2 - удалённая в архив без обработки, отсутствует для удалённых из архива)
		"Location": "Москва", // Локация
		"Office": "Основной филиал", // Филиал
		"Name": "Иван Иванов", // Имя
		"EMail": "ivan@company.ru", // E-mail
		"Phone": "+71111111111" // Телефон
		"Birthday": "1981-01-20", // Дата рождения ученика в формате YYYY-MM-DD
		"AgentName": "Ольга Иванова", // Имя контактного лица
		"AgentEMail": "olga@company.ru", // E-mail контактного лица
		"AgentPhone": "+71111111112" // Телефон контактного лица
		"Discipline": "Английский", // Дисциплина
		"Level": "Начальный", // Уровень
		"Maturity": "Дошкольники", // Возрастная категория
		// Массив пользовательских полей в заявке
		"ExtraFields":
		[{
			"Name": "Наименование пользовательского поля",
			"Value": "Значение пользовательского поля"
		},
		...],
		"Teacher": "Сидоров Иван", // Преподаватель
		"BeginDate": "2019-10-20", // Желаемая дата начала занятий
		"EndDate": "2019-11-01", // Желаемая дата окончания занятий
		"Weekdays": 15, // Маска желаемых дней недели
		"BeginTime": "15:30", // Желаемое время начала занятий
		"EndTime": "16:30", // Желаемое время окончания занятий
		"Type": "Заявка с сайта школы", // Тип заявки
		"Description": "Примечание от ученика",
		"ExtraData": "someData", // Произвольные пользовательские данные
		// UTM-метки
		"Utm":
		{
			"Source": "SomeSource", // utm_source
			"Medium": "SomeMedium", // utm_medium
			"Campaign": "SomeCampaign", // utm_campaign
			"Term": "SomeTerm", // utm_term
			"Content": "SomeContent" // utm_content
		},
		"Referrer": "http://somesite.ru", // Ссылка на источник заявки
		"Comment": "Комментарий от сотрудника",
		"LeadId": 23, // Идентификатор лида, подтверждённого по заявке
		"StudentClientId": 52 // Идентификатор клиента-ученика, подтверждённого по заявке
	},
	...]
}


Лиды

GetLeads: Лиды

Список параметров (ни один не является обязательным):

id Идентификатор лида.
officeOrCompanyId Идентификатор филиала/компании.
term Общее выражение для поиска (ФИО, ФИ, ИФ, телефон или email).
byAgents Булевский признак того, что выражение term будет использоваться и для поиска по конт. лицам. По умолчанию false.
attached Булевский признак: true – только прикреплённые к ученикам, false – только неприкреплённые к ученикам, null – все. По умолчанию null.
studentClientId Идентификатор клиента-ученика, к которому прикреплены лиды.
addressDateFrom Начальная дата диапазона дат обращения.
addressDateTo Конечная дата диапазона дат обращения.
extraFieldName Имя пользовательского поля.
extraFieldValue Значение пользовательского поля.
createdFrom Начальные дата и время создания лида в UTC.
createdTo Конечные дата и время создания лида в UTC.
lastUpdatedFrom * Минимальные дата и время изменения лида в UTC (создание лида также является его первым изменением).
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).

* На данный момент изменением лида считается только смена статуса, контактов и ответственных.

Пример результата
{
	"Leads":
	[{
		"Id": 123, // Идентификатор лида
		"Created": "2019-10-09T15:30:23", // Дата и время создания лида в UTC
		"Updated": "2019-10-09T16:30:05", // Дата и время последнего изменения лида в UTC
		"FirstName": "Иван", // Имя лида
		"LastName": "Иванов", // Фамилия лида
		"MiddleName": "Иванович", // Отчество лида
		"AddressDate": "2019-10-30", // Дата обращения лида в формате YYYY-MM-DD
		"AdSource": "Нашёл в интернете", // Рекламный источник
		"StatusId": 52, // Идентификатор статуса лида
		"Status": "В процессе", // Наименование статуса лида
		"Birthday": "1981-01-20", // Дата рождения лида в формате YYYY-MM-DD
		"Phone": "+71111111111", // Телефон лида
		"Mobile": "+79611111111", // Мобильный лида ученика
		"UseMobileBySystem": false, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
		"EMail": "ivan@company.ru", // E-mail лида
		"UseEMailBySystem": true, // Если true, то e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
		"Maturity": "Взрослые", // Возрастная категория лида
		"LearningType": "Бизнес", // Тип обучения лида
		"Discipline": "Английский", // Дисциплина лида
		"Level": "Начальный", // Уровень лида
		// Массив контактных лиц
		"Agents":
		[{
			"FirstName": "Ирина", // Имя контактного лица
			"LastName": "Иванова", // Фамилия контактного лица
			"MiddleName": "Ивановна", // Отчество контактного лица
			"WhoIs": "Мать", // Кем приходится лиду
			"Phone": "+71111111112", // Телефон контактного лица
			"Mobile": "+79611111112", // Мобильный телефон контактного лица
			"UseMobileBySystem": true, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
			"EMail": "irina@company.ru", // E-mail контактного лица
			"UseEMailBySystem": false // Если true, то e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
		},
		...],
		// Массив филиалов/компаний лида
		"OfficesAndCompanies":
		[{
			"Id": 5, // Идентификатор филиала
			"Name": "Главный филиал" // Наименование филиала
		},
		...],
		// Массив ответственных за лида
		"Assignees":
		[{
			"Id": 5, // Идентификатор ответственного
			"FullName": "Сидоров Денис Петрович" // ФИО ответственного
		},
		...],
		// Массив пользовательских полей лица
		"ExtraFields":
		[{
			"Name": "Наименование пользовательского поля",
			"Value": "Значение пользовательского поля"
		},
		...],
		"StudentClientId": 52 // ID клиента-ученика, к которому прикреплён лид
	},
	...],
	"Now": "2021-07-06T18:25:00" // Текущие дата и время сервера в UTC (для последующей передачи в lastUpdatedFrom)
}


GetLeadStatuses: Статусы лидов
Пример результата

Статусы возвращаются в порядке, установленном в настройках CRM.

{
	"Statuses":
	[{
		"Id": 52 // Идентификатор статуса
		"Name": "Успешный", // Наименование статуса
		"Type": "successful" // Тип статуса (regular – в процессе, successful – финишный успешный, unsuccessful – финишный неуспешный, pending - отложенный)
	},
	...]
}


GetHistoryModifyLeadStatus: История действий по смене статусов лидов

Список параметров (ни один не является обязательным):

dateTimeFrom Начальные дата и время совершения действия в UTC.
dateTimeTo Конечные дата и время совершения действия в UTC.
leadId Идентификатор лида.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"Actions":
	[{
		"DateTime": "2019-10-09T15:30:23", // Дата и время смены статуса в UTC
		"LeadId": 52, // Идентификатор лида
		"BeforeId": 3, // Идентификатор предыдущего статуса
		"BeforeName": "Ждет группы", // Наименование предыдущего статуса
		"AfterId": 4, // Идентификатор установленного статуса
		"AfterName": "Успешный" // Наименование установленного статуса
	},
	...]
}


Клиенты

GetStudents: Ученики

Список параметров (ни один не является обязательным):

clientId Идентификатор ученика как клиента (клиентом может быть как ученик, так и компания).
id Идентификатор ученика.
officeOrCompanyId Идентификатор филиала/компании.
term Общее выражение для поиска (ФИО, ФИ, ИФ, телефон или email).
byAgents Булевский признак того, что выражение term будет использоваться и для поиска по конт. лицам. По умолчанию false.
addressDateFrom Начальная дата диапазона дат обращения.
addressDateTo Конечная дата диапазона дат обращения.
statuses Имена статусов как они указаны в настройках через запятую («-» – поиск учеников без статуса).
extraFieldName Имя пользовательского поля.
extraFieldValue Значение пользовательского поля.
lastUpdatedFrom * Минимальные дата и время изменения ученика в UTC (создание ученика также является его первым изменением).
queryStudyRequests Возвращать информацию по заявкам.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).

* На данный момент изменением ученика считается только смена статуса, контактов и ответственных.

Пример результата
{
	"Students":
	[{
		"ClientId": 236, // Идентификатор ученика как клиента
		"Id": 123, // Идентификатор ученика
		"Created": "2019-10-09T15:30:23", // Дата и время создания ученика в UTC
		"Updated": "2019-10-09T16:30:05", // Дата и время последнего изменения ученика в UTC
		"FirstName": "Иван", // Имя ученика
		"LastName": "Иванов", // Фамилия ученика
		"MiddleName": "Иванович", // Отчество ученика
		"PhotoUrls": ["/Files/Default/Photos/ghahnhlx-100x100.jpg"], // Коллекция фото ученика в различных разрешениях
		"Gender": false, // Пол (true – мужской, false - женский)
		"AddressDate": "2019-10-20", // Дата обращения ученика в формате YYYY-MM-DD
		"AdSource": "Нашёл в интернете", // Рекламный источник
		"VisitDateTime": "2019-10-30", // Дата и время (если указано) визита ученика в формате YYYY-MM-DD(Thh:mm)
		"StatusId": 2, // Идентификатор статуса клиента
		"Status": "Занимается", // Статус клиента
		"Birthday": "1981-01-20", // Дата рождения ученика в формате YYYY-MM-DD
		"Mobile": "+79611111111", // Мобильный телефон ученика
		"UseMobileBySystem": false, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
		"Phone": "+71111111111", // Телефон ученика
		"EMail": "ivan@company.ru", // E-mail ученика
		"UseEMailBySystem": true, // Если true, то e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
		"Skype": "SomeSkype", // Skype ученика
		"Address": "г. Москва", // Адрес ученика
		"SocialNetworkPage": "http://facebook.com/...", // Адрес ученика в соц. сети
		"JobOrStudyPlace": "ООО \"Microsoft\"", // Место работы ученика
		"Position": "Директор", // Должность ученика
		// Массив контактных лиц
		"Agents":
		[{
			"FirstName": "Ирина", // Имя контактного лица
			"LastName": "Иванова", // Фамилия контактного лица
			"MiddleName": "Ивановна", // Отчество контактного лица
			"WhoIs": "Мать", // Кем приходится ученику
			"Mobile": "+79611111112", // Мобильный телефон контактного лица
			"UseMobileBySystem": true, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Phone": "+71111111112", // Телефон контактного лица
			"EMail": "irina@company.ru", // E-mail контактного лица
			"UseEMailBySystem": false, // Если true, e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Skype": "SomeSkype", // Skype контактного лица
			"JobOrStudyPlace": "ООО \"Microsoft\"", // Место работы контактного лица
			"Position": "Директор", // Должность контактного лица
			"IsCustomer": false, // Признак того, что контактное лицо является заказчиком
			"Birthday": "1980-02-01" // Дата рождения контактного лица
		},
		...],
		"Maturity": "Взрослые", // Возрастная категория ученика
		"LearningTypes": ["Английский", "Средний", ...], // Массив типов обучения ученика
		// Массив пар дисциплина-уровень
		"Disciplines":
		[{
			"Discipline": "Английский",
			"Level": "Средний"
		},
		...],
		// Массив филиалов/компаний ученика
		"OfficesAndCompanies":
		[{
			"Id": 5, // Идентификатор филиала
			"Name": "Главный филиал" // Наименование филиала
		},
		...],
		// Массив ответственных за ученика
		"Assignees":
		[{
			"Id": 5, // Идентификатор ответственного
			"FullName": "Сидоров Денис Петрович" // ФИО ответственного
		},
		...],
		// Массив пользовательских полей ученика
		"ExtraFields":
		[{
			"Name": "Наименование пользовательского поля",
			"Value": "Значение пользовательского поля"
		},
		...],
		// Массив заявок ученика (и непосредственно связанных с учеником, и через лида, возвращается только при queryStudyRequests = true)
		"StudyRequests":
		[{
			"Id": 123, // Идентификатор заявки (отсутствует для удалённых из архива)
			"Created": "2019-10-09T15:30:23", // Дата и время создания заявки в UTC
			// UTM-метки
			"Utm":
			{
				"Source": "SomeSource", // utm_source
				"Medium": "SomeMedium", // utm_medium
				"Campaign": "SomeCampaign", // utm_campaign
				"Term": "SomeTerm", // utm_term
				"Content": "SomeContent" // utm_content
			},
			"Referrer": "http://somesite.ru", // Ссылка на источник заявки
			"LeadId": 23 // Идентификатор лида, подтверждённого по заявке
		},
		...]
	},
	...],
	"Now": "2021-07-06T18:25:00" // Текущие дата и время сервера в UTC (для последующей передачи в lastUpdatedFrom)
}


GetCompanies: Компании (корп. клиенты)

Список параметров (ни один не является обязательным):

clientId Идентификатор компании как клиента (клиентом может быть как ученик, так и компания).
id Идентификатор компании.
name Наименование компании (по полному совпадению, без учёта регистра).
extraFieldName Имя пользовательского поля.
extraFieldValue Значение пользовательского поля.
bankDetailsInn ИНН/ИИН/УНП из банковских реквизитов компании.
bankDetailsKpp КПП/БИН/ЕГРПОУ из банковских реквизитов компании.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"Companies":
	[{
		"ClientId": 10, // Идентификатор компании как клиента
		"Id": 8, // Идентификатор компании
		"Name": "Microsoft", // Наименование компании
		"AdSource": "Нашёл в интернете", // Рекламный источник
		"StatusId": 2, // Идентификатор статуса клиента
		"Status": "Занимается", // Статус клиента
		"Address": "г. Москва", // Адрес компании
		"EMail": "company@company.ru", // E-mail компании
		"Phone": "+71111111111", // Телефон компании
		"MasterContractDate": "2020-03-23", // Дата рамочного договора с компанией
		"MasterContractNumber": "Договор №123", // Номер рамочного договора с компанией
		// Массив пользовательских полей компании
		"ExtraFields":
		[{
			"Name": "Наименование пользовательского поля",
			"Value": "Значение пользовательского поля"
		},
		...],
		// Банковские реквизиты
		"BankDetails":
		{
			"CompanyName": "ООО Microsoft", // Полное наименование компании
			"LegalAddress": "Redmond", // Юридический адрес
			"ActualAddress": "Redmond", // Фактический адрес
			"Inn": "444444566787", // ИНН/ИИН/УНП
			"Kpp": "49506955", // КПП/БИН/ЕГРПОУ
			"BankName": "ПАО Банк Москвы", // Наименование банка
			"Bic": "5578990", // БИК/МФО
			"CorrAccount": "670488888888888", // Корреспондирующий счет
			"CheckingAccount": "6664859666666666", // Расчетный счет
			"HeadName": "Билл Гейтс", // Имя руководителя
			"ChiefAccountantName": "Стив Балмер", // Имя главного бухгалтера
			"TaxNotice": "НДС не облагается", // Примечание по НДС
			"Okato": "1234567890", // ОКАТО/ОКВЭД/ОКФС
			"Ogrn": "1234567890", // ОГРН
			"ContactPhone": "+71234567890", // Контактный телефон
			"ContactEmail": "company@company.ru" // Контактный e-mail
		}
	},
	...]
}


GetClientStatuses: Статусы клиентов
Пример результата

Статусы возвращаются в порядке, установленном в настройках CRM.

{
	"Statuses":
	[{
		"Id": 52, // Идентификатор статуса
		"Name": "Занимается" // Наименование статуса
	},
	...]
}

GetClientFiles: Файлы клиента

Список параметров (обязательные поля отмечены звёздочкой):

clientId * Идентификатор клиента (клиентом может быть как ученик, так и компания).
edUnitId Идентификатор уч. единицы (если указан, возвращаются только файлы, связанные с ней).
Пример результата
{
	"Files":
	[{
		"Created": "2020-03-23T10:10:00", // Дата и время создания файла (отсутствует для динамических документов)
		"Title": "Договор №1", // Заголовок файла
		"Extension": "docx", // Расширение файла
		"Dynamic": false, // Если true, то данный файл является динамическим документом *
		"Url": "/File/Download/1210", // URL для скачивания файла
		"Type": "Contract", // Тип файла (Contract – договор, Act – документ, Custom – пользовательский файл)
		"CommentHtml": "Примечание<br/>к договору", // Примечание к договору в HTML
		"CommentText": "Примечание\r\nк договору" // Примечание к договору, преобразованное в текст
	},
	...]
}

Динамическими документами являются документы, которые не хранятся на сервере, а создаются динамически при их запросе. В CRM такие документы отображаются во вкладке «Автоматические». На данный момент такие документы возможны только для конкретной уч. единицы, поэтому данная функция может вернуть их только при наличии параметра «edUnitId».

Для скачивания файла к значению из поля «Url» также необходимо добавить параметр authkey.


GetStudentPersonalOfficeSettings: Настройки личного кабинета ученика
Пример результата
{
	"ShowFinances": false, // Отображать в ЛК финансовую информацию
	"ShowDayDescriptions": true, // Отображать в ЛК комментарии к дням
	"AllowFillEmptyPersonalInfo": false, // Позволять ученикам добавлять свою личную информацию
	"AllowFillEmptyContacts": true, // Позволять ученикам добавлять свои контактные данные
	"AllowAddAgents": false, // Позволять ученикам добавлять контактных лиц
	"AllowEditOwnPhoto": true, // Позволять ученикам загружать и удалять свою фотографию
	"EnableClassmatesChats": false, // Возможность переписки с одногруппниками
	"HideManagerNames": true, // Скрывать имена менеджеров для учеников
	"AboutSchoolHtml": "Какая-либо информация о <b>школе</b> для ученика",
	// Массив закладок
	"Bookmarks":
	[{
		"Name": "Гугл",
		"Url": "https://google.com",
		"IconUrl": "/Files/Default/Uploads/SavedIcons/google.com.png"
	},
	...],
}


Сотрудники

GetEmployees: Сотрудники

Данная ф-ция возвращает всех сотрудников, за исключением преподавателей.

Список параметров (ни один не является обязательным):

id Идентификатор сотрудника.
officeId Идентификатор рабочего филиала.
corporative Сотрудники работающие (или не работающие) в корпоративном отделе.
term Общее выражение для поиска (ФИО, ФИ, ИФ, телефон или email).
byAgents Булевский признак того, что выражение term будет использоваться и для поиска по конт. лицам. По умолчанию false.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"Employees":
	[{
		"Id": 123, // Идентификатор сотрудника
		"Created": "2019-10-09T15:30:23", // Дата и время создания сотрудника в UTC
		"FirstName": "Иван", // Имя сотрудника
		"LastName": "Иванов", // Фамилия сотрудника
		"MiddleName": "Иванович", // Отчество сотрудника
		"PhotoUrls": ["/Files/Default/Photos/ghahnhlx-100x100.jpg"], // Коллекция фото сотрудника в различных разрешениях
		"StatusId": 2, // Идентификатор статуса сотрудника
		"Status": "Работает", // Статус сотрудника
		"Fired": false, // Если true, то сотрудник уволен
		"Birthday": "1981-01-20", // Дата рождения сотрудника в формате YYYY-MM-DD
		"Mobile": "+79611111111", // Мобильный телефон сотрудника
		"UseMobileBySystem": false, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
		"Phone": "+71111111111", // Телефон сотрудника
		"EMail": "ivan@company.ru", // E-mail сотрудника
		"UseEMailBySystem": true, // Если true, то e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
		"Skype": "SomeSkype", // Skype сотрудника
		"Address": "г. Москва", // Адрес сотрудника
		"SocialNetworkPage": "http://facebook.com/...", // Адрес сотрудника в соц. сети
		"JobOrStudyPlace": "ООО \"Microsoft\"", // Другое место работы сотрудника
		"Position": "Директор", // Должность сотрудника в другом месте работы
		// Массив контактных лиц
		"Agents":
		[{
			"FirstName": "Ирина", // Имя контактного лица
			"LastName": "Иванова", // Фамилия контактного лица
			"MiddleName": "Ивановна", // Отчество контактного лица
			"WhoIs": "Мать", // Кем приходится сотруднику
			"Mobile": "+79611111112" // Мобильный телефон контактного лица
			"UseMobileBySystem": true, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Phone": "+71111111112", // Телефон контактного лица
			"EMail": "irina@company.ru", // E-mail контактного лица
			"UseEMailBySystem": false, // Если true, e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Skype": "SomeSkype", // Skype контактного лица
			"JobOrStudyPlace": "ООО \"Microsoft\"", // Место работы контактного лица
			"Position": "Директор", // Должность контактного лица
			"IsCustomer": false, // Признак того, что контактное лицо является заказчиком
			"Birthday": "1980-02-01" // Дата рождения контактного лица
		},
		...],
		// Массив филиалов сотрудника
		"Offices":
		[{
			"Id": 5, // Идентификатор филиала
			"Name": "Главный филиал" // Наименование филиала
		},
		...],
		"Corporative": false // Признак того, что сотрудник работает в корпоративном отделе
	},
	...]
}


GetTeachers: Преподаватели

Список параметров (ни один не является обязательным):

id Идентификатор преподавателя.
officeOrCompanyId Идентификатор филиала/компании.
term Общее выражение для поиска (ФИО, ФИ, ИФ, телефон или email).
byAgents Булевский признак того, что выражение term будет использоваться и для поиска по конт. лицам. По умолчанию false.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"Teachers":
	[{
		"Id": 123, // Идентификатор преподавателя
		"Created": "2019-10-09T15:30:23", // Дата и время создания преподавателя в UTC
		"FirstName": "Иван", // Имя преподавателя
		"LastName": "Иванов", // Фамилия преподавателя
		"MiddleName": "Иванович", // Отчество преподавателя
		"PhotoUrls": ["/Files/Default/Photos/ghahnhlx-100x100.jpg"], // Коллекция фото преподавателя в различных разрешениях
		"StatusId": 2, // Идентификатор статуса сотрудника
		"Status": "Работает", // Статус сотрудника
		"Fired": false, // Если true, то преподаватель уволен
		"Birthday": "1981-01-20", // Дата рождения преподавателя в формате YYYY-MM-DD
		"Mobile": "+79611111111", // Мобильный телефон преподавателя
		"UseMobileBySystem": false, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
		"Phone": "+71111111111", // Телефон преподавателя
		"EMail": "ivan@company.ru", // E-mail преподавателя
		"UseEMailBySystem": true, // Если true, то e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
		"Skype": "SomeSkype", // Skype преподавателя
		"Address": "г. Москва", // Адрес преподавателя
		"SocialNetworkPage": "http://facebook.com/...", // Адрес преподавателя в соц. сети
		"JobOrStudyPlace": "ООО \"Microsoft\"", // Другое место работы преподавателя
		"Position": "Директор", // Должность преподавателя в другом месте работы
		// Массив контактных лиц
		"Agents":
		[{
			"FirstName": "Ирина", // Имя контактного лица
			"LastName": "Иванова", // Фамилия контактного лица
			"MiddleName": "Ивановна", // Отчество контактного лица
			"WhoIs": "Мать", // Кем приходится преподавателю
			"Mobile": "+79611111112", // Мобильный телефон контактного лица
			"UseMobileBySystem": true, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Phone": "+71111111112", // Телефон контактного лица
			"EMail": "irina@company.ru", // E-mail контактного лица
			"UseEMailBySystem": false, // Если true, e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Skype": "SomeSkype", // Skype контактного лица
			"JobOrStudyPlace": "ООО \"Microsoft\"", // Место работы контактного лица
			"Position": "Директор", // Должность контактного лица
			"IsCustomer": false, // Признак того, что контактное лицо является заказчиком
			"Birthday": "1980-02-01" // Дата рождения контактного лица
		},
		...],
		// Массив филиалов преподавателя
		"Offices":
		[{
			"Id": 5, // Идентификатор филиала
			"Name": "Главный филиал" // Наименование филиала
		},
		...],
		"Corporative": false // Признак того, что преподаватель может работать в корпоративном отделе
	},
	...]
}


GetEmployeeStatuses: Статусы сотрудников
Пример результата
{
	"Statuses":
	[{
		"Id": 1, // Идентификатор статуса
		"Name": "Работает" // Наименование статуса
	},
	...]
}

Учебные единицы

GetEdUnits: Учебные единицы

Список параметров (ни один не является обязательным):

id Идентификатор учебной единицы.
types Типы единиц обучения, которые необходимо получить. Возможные значения: Group (группы), MiniGroup (мини-группы), OpenLesson (открытые уроки), Exam (экзамены), Tour (поездки), Individual (инд. занятия) , TrialLesson (инд. пробные уроки).
dateFrom Начальная дата диапазона занятий.
dateTo Конечная дата диапазона занятий.
timeFrom Начальное время диапазона занятий.
timeTo Конечное время диапазона занятий.
weekdays Дни недели. Целое число, которое формируется следующим образом: каждому дню недели соответствует определённая степень двойки. Для того, чтобы получить набор дней необходимо их просуммировать.
Пн: 1, Вт: 2, Ср: 4, Чт: 8, Пт: 16, Сб: 32, Вс: 64.
Например, Пн/Ср = 1 + 4 = 5.
statuses Статусы групп и поездок через запятую (Reserve, Forming, Working, Stopped, Finished). На другие типы обучения не влияет.
officeOrCompanyId Идентификатор филиала/компании.
officeOrCompany Название филиала/компании.
locationId Идентификатор локации.
corporative Если true, то возвращаются только корпоративные единицы обучения, false – только некорпоративные. По умолчанию не задано (возвращаются и те, и другие).
disciplines Названия дисциплин через запятую.
levels Название уровней через запятую (для уровня «[Все]» используется обозначение «[All]»).
maturities Название возрастных категорий через запятую.
learningTypes Названия типов обучения через запятую.
teacherId Идентификатор преподавателя.
extraFieldName Имя пользовательского поля.
extraFieldValue Значение пользовательского поля.
lastUpdatedFrom * Минимальные дата и время изменения уч. единицы в UTC (создание уч. единицы также является её первым изменением).
queryDays Булевский признак необходимости в запросе информации по дням (занятиям) уч. единицы.
queryFiscalInfo Булевский признак необходимости в запросе финансовой информации (будут возвращён объект «FiscalInfo»). Принимает значения false и true, по умолчанию false. Может замедлить выполнение запроса.
queryTeacherPrices Булевский признак необходимости в запросе ставок преподавателей по группе (будут возвращён объект «TeacherPrices»). Принимает значения false и true, по умолчанию false. Может замедлить выполнение запроса.

* На данный момент изменением уч. единицы считаются: изменения элементов расписания (добавление/редактирование/удаление) и изменения дней (установка занятия/пропуска, изменение оплачиваемости).

Примеры использования

Все группы с 15:00 до 21:00:
/GetEdUnits?types=Group&timeFrom=15:00&timeTo=21:00&authkey=...

Все группы и открытые уроки в Главном филиале:
/GetEdUnits?types=Group,OpenLesson&officeOrCompany=Главный+филиал&authkey=...

Все английские группы с уровнями Intermediate и Upper-Intermediate:
/GetEdUnits?types=Group&levels=Intermediate,Upper-Intermediate&authkey=...

Пример результата
{
	"EdUnits":
	[{
		"Id": 1535, // Идентификатор учебной единицы
		"Type": "Group", // Тип учебной единицы
		"Name": "General Intermediate 108", // Название учебной единицы
		"Corporative": false, // Если true, то уч. единица корпоративная, а в поле OfficeOrCompanyName указано наименование компании
		"OfficeOrCompanyId": 5, // Идентификатор филиала/компании
		"OfficeOrCompanyName": "Главный филиал", // Наименование филиала/компании
		"OfficeOrCompanyAddress": "Адрес филиала/компании",
		"OfficeTimeZone": "+3:00", // Часовой пояс филиала учебной единицы
		"Discipline": "Английский", // Дисциплина
		"Level": "Intermediate", // Уровень владения дисциплиной
		"Maturity": "Взрослые", // Возрастная категория
		"LearningType": "Общий", // Тип обучения
		// Массив пользовательских полей учебной единицы
		"ExtraFields":
		[{
			"Name": "Наименование пользовательского поля",
			"Value": "Значение пользовательского поля"
		},
		...],
		"StudentsCount": 5, // Количество учеников в уч. единице
		"Vacancies": 2, // Количество свободных мест
		"StudyUnitsInRange": "12 а.ч.", // Количество посещаемых (не пропусков) единиц (а.ч./дней) в рамках диапазона [dateFrom, dateTo]
		"Description": "Лучшая группа", // Примечание к учебной единице
		"CompanyContractNumber": "№24-46", // Номер заключенного на данный момент договора с компанией (только для корп. уч. единиц)
		"CompanyContractDate": "2017-01-20", // Дата заключенного на данный момент договора с компанией (только для корп. уч. единиц)
		// Массив элементов расписания (только те, что проходят указанный фильтр)
		"ScheduleItems":
		[{
			"BeginDate": "2014-01-01 ", // Начальная дата
			"EndDate": "2015-02-03", // Конечная дата
			"Weekdays": 10, // Дни недели (в том же формате, что и в фильтре)
			"BeginTime": "19:30", // Начальное время
			"EndTime": "21:30", // Конечное время
			"TeacherId": 123, // Идентификатор преподавателя
			"Teacher": "Иванов И.И.", // ФИО преподавателя
			"ClassroomId": 2, // Идентификатор аудитории (если отсутствует, то занятия проводятся на территории учащегося)
			"ClassroomName": "№2", // Наименование аудитории (если отсутствует, то занятия проводятся на территории учащегося)
			"ClassroomLink": "https://zoom.us/j/1234567" // Соответствующая аудитории ссылка
		},
		...],
		// Ответственный за уч. единицу
		"Assignee":
		{
			"Id": 5, // Идентификатор ответственного
			"FullName": "Сидоров Денис Петрович" // ФИО ответственного
		},
		// Массив дней (при queryDays = true)
		"Days":
		[{
			"Date": "2014-01-01", // Дата
			"Minutes": 45.0, // Длительность занятия в минутах
			"Pass": false, // Признак пропуска
			"StudentPayableMinutes": 22.5, // Количество оплачиваемых учеником минут
			"TeacherPayableMinutes": 45.0, // Количество оплачиваемых преподавателю минут
			"Description": "Комментарий к занятию"
		},
		...],
		// Финансовая информация (при queryFiscalInfo = true)
		"FiscalInfo":
		{
			"Units": "24 а.ч.", // Кол-во оплачиваемых единиц (а.ч./дней) за весь период обучения (может отсутствовать, если расписание бесконечно)
			"Units7": "2 а.ч.", // Кол-во оплачиваемых единиц за первые 7 дней обучения
			"Units28": "8 а.ч.", // Кол-во оплачиваемых единиц за первые 28 дней обучения
			"PriceId": 9, // Идентификатор цены по умолчанию
			"PriceName": "Пакет (5 000,00 руб. за 10 а.ч.)", // Наименование цены по умолчанию
			"PriceValue": "5 000,00 руб.", // Значение цены по умолчанию
			"Value": "10 000 руб.", // Стоимость всего периода обучения по цене по умолчанию (может отсутствовать, если расписание бесконечно или не задана цена)
			"Value7": "1 000 руб.", // Стоимость первых 7 дней обучения по цене по умолчанию (может отсутствовать, если не задана цена)
			"Value28": "4 000 руб." // Стоимость первых 28 дней обучения по цене по умолчанию (может отсутствовать, если не задана цена)
		},
		// Массив всех ставок по группе всех преподавателей (при queryTeacherPrices = true)
		// Если отсутствует, ставки для группы не заданы: стоимость преподавателя входит в оклад
		"TeacherPrices":
		[{
			"TeacherId": 5, // Идентификатор преподавателя
			"Date": "2014-01-01", // Дата вступления ставки в силу (если отсутствует, ставка действует с самого начала)
			"PriceId": 10, // Идентификатор ставки (если данное поле и все поля ниже отсутствуют, это означает, что ставка по группе на данный период не задана)
			"PriceName": "Главная ставка", // Наименование ставки
			// Массив значений ставки в зависимости от кол-ва посетивших занятие учеников (если ставка не плавающая, данный массив всегда содержит единственный элемент со Students = 0)
			"PriceValues":
			[{
				"Students": 0, // Кол-во посетивших учеников
				"Value": "2 000,00 руб.", // Значение ставки строкой
				"ValueQuantity": 2000.00, // Значение ставки числом
				"ValueCurrency": "Рубли" // Валюта ставки
			},
			...],
			"PriceUnits": "1 а.ч.", // Количество единиц, входящих в ставку, строкой (на данный момент всегда 1)
			"PriceUnitsQuantity": 45.0, // Количество единиц, входящих в ставку, числом (кол-во минут, зависит от типа ак. часа)
			"PriceUnitsType": "Minutes" // Тип единиц (на данный момент всегда “Minutes”)
		},
		...]
	},
	...],
	"Now": "2021-07-06T18:25:00" // Текущие дата и время сервера в UTC (для последующей передачи в lastUpdatedFrom)
}


GetEdUnitStudents: Связки «Учебная единица - ученик»

Список параметров (ни один не является обязательным):

edUnitId Идентификатор учебной единицы (для получения всех учеников одной уч. единицы).
edUnitTypes Типы уч. единиц. Возможные значения: Group (группы), MiniGroup (мини-группы), OpenLesson (открытые уроки), Exam (экзамены), Tour (поездки), Individual (инд. занятия).
edUnitOfficeOrCompanyId Идентификатор филиала/компании уч. единицы.
edUnitOfficeOrCompany Название филиала/компании уч. единицы. Например, «Главный филиал».
edUnitCorporative Если true, то возвращаются только корпоративные уч. единицы, false – только некорпоративные. По умолчанию не задано (возвращаются и те, и другие).
edUnitDisciplines Названия дисциплин уч. единицы через запятую.
edUnitLevels Название уровней уч. единицы через запятую (для уровня «[Все]» используется обозначение «[All]»).
edUnitMaturities Название возрастных категорий уч. единицы через запятую.
studentClientId Идентификатор ученика как клиента (для получения всех единиц обучения одного ученика)
dateFrom Начальная дата диапазона занятий.
dateTo Конечная дата диапазона занятий.
statuses Статусы ученика в уч. единице через запятую (могут быть «Reserve», «Normal», «WorkingOff» или «Stopped»)
contractExists Если true, то возвращаются только связки, по которым в данный момент имеется заключенный договор. false – только без договора. По умолчанию не задано (возвращаются и те, и другие).
contractNumber Номер заключенного договора (по полному совпадению строки).
queryDays Булевский признак необходимости в запросе информации по дням (занятиям) связки.
queryPayers Булевский признак необходимости в запросе информации по плательщикам (будут возвращён объект «Payers»). Принимает значения false и true, по умолчанию false. Может замедлить выполнение запроса.
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"EdUnitStudents":
	[{
		"EdUnitId": 1535, // Идентификатор учебной единицы
		"EdUnitType": "Group", // Тип учебной единицы
		"EdUnitName": "General Intermediate 108", // Название учебной единицы
		"EdUnitCorporative": false, // Если true, то уч. единица корпоративная, а в поле EdUnitOfficeOrCompanyName указано наименование компании
		"EdUnitOfficeOrCompanyId": 5, // Идентификатор филиала/компании учебной единицы
		"EdUnitOfficeOrCompanyName": "Главный филиал", // Наименование филиала/компании учебной единицы
		"EdUnitDiscipline": "Английский", // Дисциплина учебной единицы
		"EdUnitLevel": "Intermediate", // Уровень владения дисциплиной, заданный для учебной единицы
		"EdUnitMaturity": "Взрослые", // Возрастная категория учебной единицы
		"EdUnitLearningType": "Общий", // Тип обучения учебной единицы
		"StudentClientId": 236, // Идентификатор ученика как клиента
		"StudentName": "Иванов Иван Иванович", // ФИО ученика
		"StudentMobile": "+79611111111", // Мобильный телефон ученика
		"StudentPhone": "+71111111111", // Телефон ученика
		"StudentEMail": "ivan@company.ru", // E-mail ученика
		// Массив контактных лиц ученика
		"StudentAgents":
		[{
			"FirstName": "Ирина", // Имя контактного лица
			"LastName": "Иванова", // Фамилия контактного лица
			"MiddleName": "Ивановна", // Отчество контактного лица
			"WhoIs": "Мать", // Кем приходится ученику
			"Mobile": "+79611111112", // Мобильный телефон контактного лица
			"UseMobileBySystem": true, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Phone": "+71111111112", // Телефон контактного лица
			"EMail": "irina@company.ru", // E-mail контактного лица
			"UseEMailBySystem": false, // Если true, e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Skype": "SomeSkype", // Skype контактного лица
			"JobOrStudyPlace": "ООО \"Microsoft\"", // Место работы контактного лица
			"Position": "Директор", // Должность контактного лица
			"IsCustomer": false, // Признак того, что контактное лицо является заказчиком
			"Birthday": "1980-02-01" // Дата рождения контактного лица
		},
		...],
		// Массив пользовательских полей ученика
		"StudentExtraFields":
		[{
			"Name": "Наименование пользовательского поля",
			"Value": "Значение пользовательского поля"
		},
		...],
		"BeginDate": "2017-01-20", // Начальная дата диапазона занятий связки
		"EndDate": "2017-02-01", // Конечная дата диапазона занятий связки
		"BeginTime": "7:40", // Время начала занятий в указанном диапазоне
		"EndTime": "8:25", // Время окончания занятий в указанном диапазоне
		"Weekdays": 10, // Дни недели занятий (в том же формате, что и в фильтре GetEdUnits)
		"Status": "Reserve", // Статус ученика в учебной единице (может быть «Reserve», «Normal», «WorkingOff» или «Stopped»)
		"StudyMinutes": 720, // Количество минут занятий (может отсутствовать)
		"StudyUnits": "16 а.ч.", // Количество единиц занятий (может отсутствовать)
		// Массив дней (только если указан диапазон, и queryDays = true)
		"Days":
		[{
			"Date": "2016-07-11", // Дата
			"Minutes": 45.0, // Длительность занятия в минутах
			"Pass": false, // Признак пропуска
			"StudentPayableMinutes": 22.5, // Количество оплачиваемых учеником минут
			"TeacherPayableMinutes": 45.0, // Количество оплачиваемых преподавателю минут
			"Description": "Опоздал", // Комментарий к занятию
			"WorkingOffToEdUnitId": 22, // Уч. единица, в которой происходит отработка данного занятия, если таковая имеет место
			"WorkingOffToDate": "2016-08-01", // Дата отработки, если таковая имеет место
			"WorkingOffFromEdUnitId": 21, // Уч. единица, являющаяся источником отработки, если таковая имеет место
			"WorkingOffFromDate": "2016-07-01", // Дата источника отработки, если таковая имеет место
			"Accepted": true, // Признак того, что посещение подтверждено
		},
		...]
		// Массив плательщиков за занятия связки (только если учебная единица некорпоративная, и queryPayers = true)
		"Payers":
		[{
			"ClientId": 3264, // Идентификатор клиента (ученика или компании)
			"IsCompany": false, // Признак того, что клиент-плательщик (ClientId) является компанией
			"Name": "Иванов Иван", // Имя плательщика
			"Actual": true, // Если false, то данный плательщик является учеником, но, при этом, плательщик-компания полностью оплачивает его занятия
			"ContractNumber": "№24-46", // Номер заключенного на данный момент договора с данным плательщиком (может отсутствовать)
			"ContractDate": "2017-01-20", // Дата заключенного на данный момент договора с данным плательщиком (может отсутствовать)
			// Массив расторгнутых договоров с данным плательщиком (если таковых нет, отсутствует)
			"TerminatedContracts":
			[{
				"Number": "№24-45", // Номер договора
				"Date": "2016-07-11", // Дата заключения договора
				"TerminateDateTime": "2016-08-19T15:16:17", // Дата и время расторжения договора в UTC
				"Reason": "Отказался заниматься", // Причина расторжения договора
				"ReasonDescription": "Заболел" // Комментарий к причине расторжения договора
			},
			...],
			"PriceId": 9, // Идентификатор цены по договору (может отсутствовать)
			"PriceName": "Основная (250,00 руб./а.ч.)", // Наименование цены по договору (может отсутствовать)
			// Массив скидок по договору (скидки применяются строго в данном порядке)
			"Discounts":
			[{
				"Id": 2, // Идентификатор скидки
				"Name": "Первая скидка", // Наименование скидки (может отсутствовать)
				"Percent": 10 // Размер скидки в процентах (если скидка процентная)
			},
			{
				"Id": 3, // Идентификатор скидки
				"Name": "Вторая скидка", // Наименование скидки (может отсутствовать)
				"Value": 123.45 // Сумма скидки в деньгах (если скидка фиксированная)
			},
			...],
			// Массив доплат по договору (все доплаты являются фиксированными, т.е. представлены суммой, применяются после скидок)
			"Surcharges":
			[{
				"Id": 4, // Идентификатор доплаты
				"Name": "Первая доплата", // Наименование доплаты (может отсутствовать)
				"Value": 123.45 // Сумма доплаты в деньгах
			}
			...],
			"PayableMinutes": 720, // Количество оплачиваемых минут (может отсутствовать)
			"PayableUnits": "16 а.ч.", // Количество оплачиваемых единиц (может отсутствовать)
			"PayableMinutesRanged": 540, // Количество оплачиваемых минут в указанном диапазоне дат (может отсутствовать)
			"PayableUnitsRanged": "12 а.ч.", // Количество оплачиваемых единиц в указанном диапазоне дат (может отсутствовать)
			"Value": "4 000,00 руб.", // Фактическая стоимость занятий (может отсутствовать)
			"ValueRanged": "3 000,00 руб.", // Фактическая стоимость занятий в указанном диапазоне дат (может отсутствовать)
			"ValuePaidRanged": "2 000,00 руб.", // Оплаченная фактическая стоимость занятий в указанном диапазоне дат
			"ContractValue": "4 000,00 руб.", // Стоимость занятий по договору (может отсутствовать)
			"ContractValueRestored": "5 000,00 руб.", // Стоимость занятий по договору без скидок и доплат (может отсутствовать)
			"ContractValueRanged": "3 000,00 руб.", // Стоимость занятий по договору в указанном диапазоне дат (может отсутствовать)
			"ContractValueRangedRestored": "3 750,00 руб.", // Стоимость занятий по договору в указанном диапазоне дат без скидок и доплат (может отсутствовать)
			"DebtDate": "2017-03-01", // Дата возникновения задолженности (может отсутствовать)
			// Массив оплат (списаний) за обучение от данного плательщика (если таковых нет, отсутствует)
			"EdUnitPayments":
			[{
				"Paid": true, // Признак того, что оплата имеет статус «Оплачено»
				"Date": "2017-02-09", // Дата оплаты
				"PaidDate": "2017-02-10", // Дата принятия оплаты (может отсутствовать)
				"BillNumber": "211", // Номер счёта (отсутствует, если со списанием не связано поступление)
				"Minutes": 90, // Количество минут, входящих в оплату
				"Units": "2 а.ч.", // Количество единиц, входящих в оплату
				"PriceId": 9, // Идентификатор цены оплаты
				"PriceName": "Основная (250,00 руб./а.ч.)", // Наименование цены оплаты
				"Value": "1 000,00 руб." // Сумма оплаты
			},
			...]
		},
		...]
	},
	...]
}


GetEdUnitLeads: Связки «Учебная единица - лид» (пробные уроки)

Список параметров (ни один не является обязательным):

edUnitId Идентификатор учебной единицы (для получения всех лидов одной уч. единицы).
edUnitTypes Типы уч. единиц. Возможные значения: Group (группы), OpenLesson (открытые уроки), TrialLesson (инд. пробные).
edUnitOfficeOrCompanyId Идентификатор филиала/компании уч. единицы.
edUnitOfficeOrCompany Название филиала/компании уч. единицы. Например, «Главный филиал».
edUnitCorporative Если true, то возвращаются только корпоративные уч. единицы, false – только некорпоративные. По умолчанию не задано (возвращаются и те, и другие).
edUnitDisciplines Названия дисциплин уч. единицы через запятую.
edUnitLevels Название уровней уч. единицы через запятую (для уровня «[Все]» используется обозначение «[All]»).
edUnitMaturities Название возрастных категорий уч. единицы через запятую.
leadId Идентификатор лида (для получения всех пробных уроков одного лида).
createdFrom Начальные дата и время создания пробного урока.
createdTo Конечные дата и время создания пробного урока.
dateFrom Начальная дата диапазона занятий.
dateTo Конечная дата диапазона занятий.
visited Если true, то возвращаются только посещённые пробные уроки, false – только непосещённые. По умолчанию не задано (возвращаются и те, и другие).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"EdUnitLeads":
	[{
		"EdUnitId": 1535, // Идентификатор учебной единицы
		"EdUnitType": "Group", // Тип учебной единицы
		"EdUnitName": "General Intermediate 108", // Название учебной единицы
		"EdUnitCorporative": false, // Если true, то уч. единица корпоративная, а в поле EdUnitOfficeOrCompanyName указано наименование компании
		"EdUnitOfficeOrCompanyId": 5, // Идентификатор филиала/компании учебной единицы
		"EdUnitOfficeOrCompanyName": "Главный филиал", // Наименование филиала/компании учебной единицы
		"EdUnitDiscipline": "Английский", // Дисциплина учебной единицы
		"EdUnitLevel": "Intermediate", // Уровень владения дисциплиной, заданный для учебной единицы
		"EdUnitMaturity": "Взрослые", // Возрастная категория учебной единицы
		"EdUnitLearningType": "Общий", // Тип обучения учебной единицы
		"LeadId": 236, // Идентификатор лида
		"LeadName": "Иванов Иван Иванович", // ФИО лида
		"LeadMobile": "+79611111111", // Мобильный телефон лида
		"LeadPhone": "+71111111111", // Телефон лида
		"LeadEMail": "ivan@company.ru", // E-mail лида
		// Массив контактных лиц лида
		"LeadAgents":
		[{
			"FirstName": "Ирина", // Имя контактного лица
			"LastName": "Иванова", // Фамилия контактного лица
			"MiddleName": "Ивановна", // Отчество контактного лица
			"WhoIs": "Мать", // Кем приходится лиду
			"Mobile": "+79611111112", // Мобильный телефон контактного лица
			"UseMobileBySystem": true, // Если true, то моб. телефон отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Phone": "+71111111112", // Телефон контактного лица
			"EMail": "irina@company.ru", // E-mail контактного лица
			"UseEMailBySystem": false, // Если true, e-mail отмечен как разрешённый для использования системой для рассылок/уведомлений
			"Skype": "SomeSkype", // Skype контактного лица
			"JobOrStudyPlace": "ООО \"Microsoft\"", // Место работы контактного лица
			"Position": "Директор", // Должность контактного лица
			"IsCustomer": false, // Признак того, что контактное лицо является заказчиком
			"Birthday": "1980-02-01" // Дата рождения контактного лица
		},
		...],
		// Массив пользовательских полей лида
		"LeadExtraFields":
		[{
			"Name": "Наименование пользовательского поля",
			"Value": "Значение пользовательского поля"
		},
		...],
		"Created": "2019-10-09T15:30:23", // Дата и время создания пробного урока в UTC
		"Date": "2017-01-20", // Дата пробного урока
		"BeginTime": "7:40", // Время начала пробного урока
		"EndTime": "8:25", // Время окончания пробного урока
		"Visited": true // Признак посещения
	},
	...]
}


GetLessonPlans: Планы занятий (домашние задания)

Список параметров (ни один не является обязательным):

id Идентификатор плана занятий.
edUnitId Идентификатор уч. единицы.
officeOrCompanyId Идентификатор филиала/компании.
dateFrom Начальная дата диапазона занятий.
dateTo Конечная дата диапазона занятий.
visibleForClients Признак того, что план занятия видим для клиентов (т.е. является домашним заданием).
Пример результата
{
	"LessonPlans":
	[{
		"Id": 2, // Идентификатор плана занятий
		"EdUnitId": 123, // Идентификатор уч. единицы
		"Date": "2019-08-01", // Дата занятия, для которого создан данный план/ДЗ
		"VisibleForClients": false, // Признак того, что план занятия видим для клиентов (т.е. является домашним заданием).
		"Content": "Глаголы и времена" // Содержимое плана/ДЗ (может содержать теги HTML)
	}
	...]
}


Параметры обучения

GetDisciplines: Дисциплины
Пример результата
{
	"Disciplines":
	[
		"Английский",
		"Немецкий",
		"Французский",
	...]
}


GetLevels: Уровни обучения
Пример результата
{
	"Levels":
	[{
		"Name": "Начальный", // Наименование уровня
		"Disciplines": [ // Дисциплины, к которым может быть применён данный уровень
			"Английский",
			"Немецкий"
		]
	},
	{
		"Name": "Продвинутый", // Наименование уровня
		"Disciplines": [ // Дисциплины, к которым может быть применён данный уровень
			"Немецкий",
			"Французский"
		]
	},
	...]
}


GetLearningTypes: Типы обучения
Пример результата
{
	"LearningTypes":
	[
		"Обычный",
		"Бизнес",
	...]
}

Финансы

GetPrices: Цены

Список параметров (ни один не является обязательным):

id Идентификатор цены.
officeId Идентификатор филиала
corporative Корпоративные цены. Булевский признак, по умолчанию null.
calendar Календарные цены. Булевский признак, по умолчанию null.
packet Пакетные цены. Булевский признак, по умолчанию null.
Пример результата
{
	"Prices":
	[{
		"Id": 9, // Идентификатор цены
		"Name": "Общая", // Наименование цены
		"Value": "5 000,50 руб.", // Значение цены строкой
		"ValueQuantity": 5000.5, // Значение цены числом
		"ValueCurrency": "Рубли", // Валюта цены
		"Calendar": false, // Признак календарной цены
		"Units": "10 а.ч.", // Количество единиц, входящих в цену, строкой
		"UnitsQuantity": 450, // Количество единиц, входящих в цену, числом (для некалендарных цен)
		"UnitsType": "Minutes", // Тип единиц (Minutes/Days, для некалендарных цен)
		"Months": 450, // Количество месяцев, входящих в цену (для календарных цен)
		"Days": 450, // Количество дней, входящих в цену (для календарных цен)
		"Packet": true, // Признак пакетной цены (отсутствует для календарной цены)
		"PartlyPayable": true, // Может оплачиваться частично
		"DaysActual": 15, // Срок действия, дней (может отсутствовать)
		"Corporative": true, // Признак того, что цена может использоваться в корп. отделе
		// Массив филиалов, в которых может используется цена (если таковых нет, отсутствует)
		"Offices":
		[{
			"Id": 5, // Идентификатор филиала
			"Name": "Главный филиал" // Наименование филиала
		},
		...],
	}
	...]
}


GetDiscounts: Скидки

Список параметров:

id Идентификатор скидки (необязательный).
Пример результата
{
	"Discounts":
	[{
		"Id": 3, // Идентификатор скидки
		"Name": "День Рождения", // Наименование скидки
		"Percent": "20" // Процент скидки (только для процентных скидок)
	},
	{
		"Id": 4, // Идентификатор скидки
		"Name": "Промокод", // Наименование скидки
		"Fixed": 200.5 // Размер фиксированной скидки (только для фиксированных скидок)
	},
	...]
}


GetSurcharges: Доплаты

Список параметров:

id Идентификатор доплаты (необязательный).
Пример результата
{
	"Surcharges":
	[{
		"Id": 2, // Идентификатор доплаты
		"Name": "Доп. занятия", // Наименование доплаты
		"Value": 100.5 // Значение доплаты
	},
...]
}


GetPayments: Платежи

Список параметров (ни один не является обязательным):

id Идентификатор платежа.
types Наименования типов платежей (как они именуются в настройках) через запятую. Для системных типов желательно использовать системные обозначения: Обучение – Study, Учебные материалы – Supplies, Глава курса – Chapter и Возврат – StudyRefund. Однако на данный момент поддерживаются оба варианта.
dateFrom Начальная дата платежа.
dateTo Конечная дата платежа.
paidDateFrom Начальная дата установки для платежа статуса «Оплачено».
paidDateTo Конечная дата установки для платежа статуса «Оплачено».
officeOrCompanyId Идентификатор филиала/компании, к которому прикреплён платёж.
state Битовая маска состояния платежа (1 - не оплачен, 2 - не подтверждён, 4 - оплачен).
clientId Идентификатор клиента-плательщика.
createdFrom Начальные дата и время создания платежа  в UTC.
createdTo Конечные дата и время создания платежа  в UTC.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"Payments":
	[{
		"Id": 123, // Идентификатор платежа
		"Created": "2019-10-09T15:30:23", // Дата и время создания платежа в UTC
		"Type": "Обучение", // Тип платежа
		"Date": "2019-10-01", // Дата платежа в формате YYYY-MM-DD
		"PaidDate": "2019-10-09", // Дата оплаты платежа в формате YYYY-MM-DD (отсутствует у неоплаченных платежей)
		"RequiredPaidDate": "2019-10-09", // Требуемая дата оплаты (срок оплаты) в формате YYYY-MM-DD
		"OfficeOrCompanyId": 7, // Идентификатор филиала/компании, к которому прикреплён платёж
		"OfficeOrCompanyName": "Основной филиал", // Наименование филиала/компании, к которому прикреплён платёж
		"State": "Paid", // Состояние платежа (“Unpaid”, “Unconfirmed” или “Paid”)
		"ClientId": 23, // Идентификатор клиента-плательщика
		"ClientName": "Иванов Иван", // Имя клиента-плательщика
		"Value": "1 000,00 руб.", // Сумма платежа
		"ValueQuantity": 1000, // Значение суммы числом
		"ValueCurrency": "Рубли", // Валюта платежа
		"PaymentMethodId": 2, // Идентификатор способа оплаты
		"PaymentMethodName": "Наличные", // Наименование способа оплаты
		"Tag": "SomeTag", // Тег платежа
		"Description": "Комментарий к платежу"
	},
	...]
}


GetBalances: Запрос балансов плательщиков

Список параметров:

balanceDate Дата, на которую необходимо вычислять баланс
clientId Идентификатор клиента-плательщика
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 100, не может быть больше 10 000).
Пример результата
{
	"Balances":
	[{
		"ClientId": 123, // Идентификатор клиента-плательщика
		// Массив балансов по уч. единицам
		"EdUnitsBalances":
		[{
			"EdUnitId": 1535, // Идентификатор учебной единицы
			"EdUnitType": "Group", // Тип учебной единицы
			"EdUnitName": "General Intermediate 108", // Название учебной единицы
			"StudentClientId": 234, // Идентификатор клиента-ученика, если компания платит за ученика
			"StudentName": "Иванов Иван Иванович", // ФИО ученика, если компания платит за ученика
			"BalanceUnits": "-16 а.ч.", // Баланс в единицах (а.ч. или дни/месяцы)
			"BalanceMoney": "-1 000,00 руб.", // Баланс в деньгах
			"DebtUnits": "-16 а.ч.", // Задолженность в единицах (равно балансу, если баланс отрицательный, иначе 0)
			"DebtMoney": "-1 000,00 руб.", // Задолженность в деньгах (равно балансу, если баланс отрицательный, иначе 0)
			"IsDebtUnits": true, // Признак того, что по данной уч. единице имеется задолженность в единицах
			"IsDebtMoney": true // Признак того, что по данной уч. единице имеется задолженность в деньгах
		},
		...],
		// Баланс личного счёта плательщика
		"StudyBalance":
		{
			"BalanceMoney": "1 500,00 руб.", // Баланс в деньгах
			"DebtMoney": "0,00 руб.", // Задолженность в деньгах (равно балансу, если баланс отрицательный, иначе 0)
			"IsDebtMoney": false // Признак того, что по ЛС имеется задолженность
		},
		"BalanceUnits": "-16 а.ч.", // Суммарный баланс в единицах (а.ч. или дни/месяцы)
		"BalanceMoney": "500,00 руб.", // Суммарный баланс в деньгах
		"DebtUnits": "-16 а.ч.", // Задолженность в единицах (суммируются только задолженности по уч. единицам)
		"DebtMoney": "-1 000,00 руб.", // Задолженность в деньгах (суммируются только задолженности по ЛС и уч. единицам)
		"HasAnyDebtUnits": true, // Признак того, что имеется задолженность в единицах по любой из уч. единиц
		"HasAnyDebtMoney": true, // Признак того, что имеется задолженность в деньгах по любой из уч. единиц или ЛС
		"HasAggregateDebtUnits": true, // Признак того, что имеется агрегатная задолженность в единицах (с учётом положительных остатков)
		"HasAggregateDebtMoney": false // Признак того, что имеется агрегатная задолженность в деньгах (с учётом положительных остатков)
	},
	...]
}

Возможные типы поступлений/списаний:

  • Payment – Платёж
  • Study – Занятие
  • Pass – Пропуск
  • Other – Излишки по абонементам, округления и т.п.
  • NonActual – Возврат на ЛС / Списание за обучение по уч. единице, в которой ученик уже не состоит
  • Nulling – Обнуление остатка по уч. единице (списание в счёт школы)
  • PointsEarning – Начисление баллов


GetIncomesAndOutgoes: Поступления и списания

Список параметров:

clientId Идентификатор клиента-плательщика
Пример результата
{
	"Study": // Поступления и списания за обучение
	{
		"Items":
		[{
			"Type": "Study", // Тип поступления/списания
			"Begin": "2019-10-01", // Начальная дата в формате YYYY-MM-DD (отсутствует для Type=PointsEarning)
			"End": "2019-10-01", // Конечная дата в формате YYYY-MM-DD (отсутствует для Type=PointsEarning)
			"Income": false, // true – поступление, false - списание
			"Value": "1 000,00 руб.", // Сумма поступления/списания
			"PaymentTypeName": "Обучение", // Тип платежа (только для Type=Payment)
			"PaymentDetails": "Оплата для Группа Для тестов (60 а.ч.)", // Детали платежа (только для Type=Payment)
			"EdUnitId": 123, // Идентификатор уч. единицы (только для Type=Pass|Study|Other)
			"EdUnitType": "Group", // Тип уч. единицы (только для Type=Pass|Study|Other|NonActual|Nulling)
			"EdUnitName": "General Intermediate 108", // Название уч. единицы (только для Type=Pass|Study|Other|NonActual|Nulling)
			"Units": "10 а.ч." // Количество единиц (только для Type=Pass|Study|NonActual|Nulling)
		},
		...],
		"Incomes": "5 000,00 руб.", // Сумма всех поступлений
		"Outgoes": "2 000,00 руб.", // Сумма всех списаний
		"Balance": "3 000,00 руб." // Баланс
	},
	"OtherPayments": // Другие платежи (уч. материалы, курсы и т.п.)
	{
		"Items":
		[{
			"Type": "Payment",
			"Begin": "2019-10-01", // Дата платежа в формате YYYY-MM-DD
			"End": "2019-10-01", // Дата платежа в формате YYYY-MM-DD
			"Income": true, // true – поступление, false - списание
			"Value": "1 000,00 руб.", // Сумма поступления/списания
			"PaymentTypeName": "Учебные материалы", // Тип платежа
			"PaymentDetails": "\"Книга 1\", \"Книга 4\"" // Детали платежа
		},
		...],
		"Incomes": "2 000,00 руб." // Сумма всех поступлений
	}
}

Возможные типы поступлений/списаний:

  • Payment – Платёж
  • Study – Занятие
  • Pass – Пропуск
  • Other – Излишки по абонементам, округления и т.п.
  • NonActual – Возврат на ЛС / Списание за обучение по уч. единице, в которой ученик уже не состоит
  • Nulling – Обнуление остатка по уч. единице (списание в счёт школы)
  • PointsEarning – Начисление баллов

Тесты

GetEntranceTests: Вступительные тесты

Список параметров (ни один не является обязательным):

from Начальные дата и время диапазона проведения тестов.
to Конечные дата и время диапазона проведения тестов.
leadOrStudentOfficeOrCompanyId Идентификатор филиала/компании лида или ученика.
leadId Идентификатор лида.
studentClientId Идентификатор клиента-ученика.
descending Сортировать элементы по убыванию (true/false)
skip Количество элементов, пропускаемых перед возвращением остальных элементов
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000)
Пример результата
{
	"EntranceTests":
	[{
		"DateTime": "2019-08-01T15:00:00", // Дата и время проведения теста
		"LeadId": 123, // Идентификатор лида (если тест проходил лид)
		"LeadName": "Иванов Иван Иванович", // ФИО лида (если тест проходил лид)
		"StudentClientId": 236, // Идентификатор ученика как клиента (если тест проходил ученик)
		"StudentName": "Иванов Иван Иванович", // ФИО ученика (если тест проходил ученик)
		"Discipline": "Английский", // Дисциплина теста
		"LearningType": "Общий", // Тип обучения теста
		"TeacherId": 10, // Идентификатор преподавателя, который проводит тестирование
		"TeacherName": "Петров Пётр Петрович", // Имя преподавателя, который проводит тестирование
		"Level": "Продвинутый", // Полученный после прохождения теста уровень владения дисциплиной (отсутствует, если тест не пройден)
		"CommentHtml": "Хорошо ответил", // Примечание к тесту в HTML
		"CommentText": "Хорошо ответил" // Примечание к тесту, преобразованное в текст
	}
	...]
}


GetOfflineTestTypes: Типы оффлайн-тестов (а также их категорий и навыков)

Список параметров (ни один не является обязательным):

testTypeCategoryId Идентификатор категории теста
testTypeCategoryName Наименование категории теста
testTypeId Идентификатор типа теста
testTypeName Наименование типа теста
Пример результата
{
	"Categories":
	[{
		"Id": 2, // Идентификатор категории тестов
		"Name": "Основная категория", // Наименование категории тестов
		// Массив типов тестов в данной категории
		"TestTypes":
		[{
			"Id": 3, // Идентификатор типа теста
			"Name": "Основной тип", // Наименование типа теста
			// Массив навыков данного теста
			"Skills":
			[{
				"Id": 5, // Идентификатор навыка
				"Name": "Основной навык", // Наименование навыка
				"MaxScore": 20, // Максимально возможное кол-во баллов
				"ValidScore": 15 // Кол-во баллов, считающееся успешным
			},
			...],
		},
		...],
	}
	...]
}


GetPersonalTestResults: Результаты персональных тестов

Список параметров (ни один не является обязательным):

from Начальные дата и время диапазона проведения тестов.
to Конечные дата и время диапазона проведения тестов.
studentOfficeOrCompanyId Идентификатор филиала/компании ученика.
studentClientId Идентификатор клиента-ученика.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"PersonalTestResults":
	[{
		"DateTime": "2019-08-01T15:00:00", // Дата и время проведения теста
		"StudentClientId": 236, // Идентификатор ученика как клиента
		"StudentName": "Иванов Иван Иванович", // ФИО ученика
		"Discipline": "Английский", // Дисциплина теста
		"TeacherId": 10, // Идентификатор преподавателя, который проводит тестирование
		"TeacherName": "Петров Пётр Петрович", // Имя преподавателя, который проводит тестирование
		"TestTypeCategoryId": 2, // Идентификатор категории теста
		"TestTypeCategoryName": "Основная категория", // Наименование категории теста
		"TestTypeId": 3, // Идентификатор типа теста
		"TestTypeName": "Основной тип", // Наименование типа теста
		// Массив оценок по навыкам
		"Skills":
		[{
			"SkillId": 5, // Идентификатор навыка
			"SkillName": "Основной навык", // Наименование навыка
			"Score": 15.5, // Кол-во баллов, набранных учеником
			"MaxScore": 20, // Максимально возможное кол-во баллов
			"ValidScore": 15 // Кол-во баллов, считающееся успешным
		},
		...],
		"CommentHtml": "Хорошо ответил", // Примечание к результату теста в HTML
		"CommentText": "Хорошо ответил" // Примечание к результату теста, преобразованное в текст
	}
	...]
}


GetEdUnitTestResults: Результаты групповых тестов

Список параметров (ни один не является обязательным):

dateFrom Начальная дата диапазона проведения тестов.
dateTo Конечная дата диапазона проведения тестов.
edUnitId Идентификатор уч. единицы.
officeOrCompanyId Идентификатор филиала/компании.
studentClientId Идентификатор клиента-ученика.
testTypeCategoryId Идентификатор категории теста.
testTypeCategoryName Наименование категории теста.
testTypeId Идентификатор типа теста.
testTypeName Наименование типа теста.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"EdUnitTestResults":
	[{
		"Date": "2019-08-01", // Дата занятия, для которого создан результат теста
		"EdUnitId": 123, // Идентификатор уч. единицы
		"EdUnitType": "Group", // Тип уч. единицы
		"EdUnitName": "Some group name", // Наименование уч. единицы
		"EdUnitCorporative": false, // Если true, то уч. единица корпоративная, а в поле EdUnitOfficeOrCompanyName указано наименование компании
		"EdUnitOfficeOrCompanyId": 2, // Идентификатор филиала/компании уч. единицы
		"EdUnitOfficeOrCompanyName": "Главный филиал", // Наименование филиала/компании уч. единицы
		"StudentClientId": 236, // Идентификатор ученика как клиента
		"StudentName": "Иванов Иван Иванович", // ФИО ученика
		"TestTypeCategoryId": 2, // Идентификатор категории теста
		"TestTypeCategoryName": "Основная категория", // Наименование категории теста
		"TestTypeId": 3, // Идентификатор типа теста
		"TestTypeName": "Основной тип", // Наименование типа теста
		// Массив оценок по навыкам
		"Skills":
		[{
			"SkillId": 5, // Идентификатор навыка
			"SkillName": "Основной навык", // Наименование навыка
			"Score": 15.5, // Кол-во баллов, набранных учеником
			"MaxScore": 20, // Максимально возможное кол-во баллов
			"ValidScore": 15 // Кол-во баллов, считающееся успешным
		},
		...],
		"CommentHtml": "Хорошо ответил", // Примечание к результату теста в HTML
		"CommentText": "Хорошо ответил" // Примечание к результату теста, преобразованное в текст
	}
	...]
}


GetOnlineTestResults: Результаты онлайн-тестов

Список параметров (ни один не является обязательным):

from Начальные дата и время прохождения теста в UTC.
to Конечные дата и время прохождения теста в UTC.
studentOfficeOrCompanyId Идентификатор филиала/компании ученика.
studentClientId Идентификатор клиента-ученика.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"OnlineTestResults":
	[{
		"Created": "2019-08-01T15:34:12", // Дата и время прохождения теста в UTC
		"StudentClientId": 236, // Идентификатор ученика как клиента
		"StudentName": "Иванов Иван Иванович", // ФИО ученика
		"Discipline": "Английский", // Дисциплина теста
		"CourseTitle": "Курс #1", // Наименование курса
		"ChapterTitle": "Глава #1", // Наименование главы
		"LessonTitle": "Занятие #1", // Наименование занятия
		"LessonType": "Normal", // Тип урока (Normal – обычное прохождение курса, Intermediate – промежуточный тест, Final – итоговый тест)
		"Score": 15, // Набранное количество баллов
		"Total": 25, // Максимально возможное количество баллов
		"Level": "Продвинутый", // Полученный после прохождения теста уровень владения дисциплиной (только для тестов на уровень)
		"RewardPoints": 5, // Количество призовых баллов, полученных после прохождения теста
		"CommentHtml": "Хорошо ответил", // Примечание к результату теста в HTML
		"CommentText": "Хорошо ответил" // Примечание к результату теста, преобразованное в текст
	}
	...]
}


GetEdUnitStudentReports: Отчёты об успеваемости

Список параметров (ни один не является обязательным):

createdFrom Начальные дата и время создания отчёта.
createdTo Конечные дата и время создания отчёта.
month Месяц отчёта в формате YYYYMM.
edUnitId Идентификатор уч. единицы.
edUnitOfficeOrCompanyId Идентификатор филиала/компании уч. единицы.
studentClientId Идентификатор клиента-ученика.
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"EdUnitStudentReports":
	[{
		"Created": "2016-12-22T14:07:18", // Дата и время создания отчёта
		"Month": 202003, // Месяц отчёта
		"EdUnitId": 123, // Идентификатор уч. единицы
		"EdUnitType": "Group", // Тип уч. единицы
		"EdUnitName": "Some group name", // Наименование уч. единицы
		"EdUnitCorporative": false, // Если true, то уч. единица корпоративная, а в поле EdUnitOfficeOrCompanyName указано наименование компании
		"EdUnitOfficeOrCompanyId": 2, // Идентификатор филиала/компании уч. единицы
		"EdUnitOfficeOrCompanyName": "Главный филиал", // Наименование филиала/компании уч. единицы
		"StudentClientId": 236, // Идентификатор ученика как клиента
		"StudentName": "Иванов Иван Иванович", // ФИО ученика
		// Массив оценок по критериям
		"Criterions":
		[{
			"CriterionName": "Усвоение материала", // Наименование критерия
			"Value": 4 // Оценка по пятибалльной шкале
		},
		...],
		"CommentHtml": "Примечание<br/>к отчёту", // Примечание к отчёту в HTML
		"CommentText": "Примечание\r\nк отчёту" // Примечание к отчёту, преобразованное в текст
	}
	...]
}


Авторизация

GetMemberAuthKey: Ключ авторизации определённого пользователя

Данная ф-ция может использоваться на стороннем ресурсе для реализации авторизации сотрудников/клиентов с тем, чтобы выполнять другие вызовы API от имени данного пользователя, передавая в ф-ции API значение authkey, полученненное в данном методе.

Также полученный ключ можно использовать для авторизации сотрудников/клиентов в CRM. Для этого необходимо открыть в браузере пользователя ссылку [schooldomain]/Account/AuthByKey?authkey=[ключ].

Список параметров (обязательные поля отмечены звёздочкой):

login *
Логин.
password *
Пароль.
Пример результата
{
	"Id": 5, // Идентификатор пользователя
	"Type": "Student", // Тип пользователя (возможные значения: Employee - сотрудник, Teacher - преподаватель, Student - ученик, CompanyMember – конт. лицо компании)
	"AuthKey": "e6er5QSZ9sl1BwISTt1u2Wv3c2CFasfN9Q3Lzw=", // Ключ авторизации данного пользователя
	"FirstName": "Иван", // Имя пользователя
	"LastName": "Иванов", // Фамилия пользователя
	"MiddleName": "Иванович", // Отчество пользователя
	"ClientId": 5 // Идентификатор пользователя как клиента (присутствует только для учеников и конт. лиц компаний)
}


GetAuthMember: Информация об авторизованном пользователе

Иными словами, ф-ция возвращает информацию о владельце указанного authkey.
Помимо authkey параметров не имеет.

Пример результата
{
	"Id": 5, // Идентификатор пользователя
	"Type": "Student", // Тип пользователя (возможные значения: Employee - сотрудник, Teacher - преподаватель, Student - ученик, CompanyMember – конт. лицо компании)
	"FirstName": "Иван", // Имя пользователя
	"LastName": "Иванов", // Фамилия пользователя
	"MiddleName": "Иванович", // Отчество пользователя
	"ClientId": 5 // Идентификатор пользователя как клиента (присутствует только для учеников и конт. лиц компаний)
}

Разное

GetSupplies: Учебные принадлежности (библиотека)

Список параметров (ни один не является обязательным):

id Идентификатор уч. принадлежности (книги).
title Наименование уч. принадлежности.
stockId Идентификатор филиала (склада), либо -1 – общий склад. Влияет на фильтры lendable и saleable, а также на значения возвращаемых полей, связанных с выдачей и продажей. Отсутствие параметра подразумевает все склады.
lendable Признак того, что единица должна (при true) или не должна (при false) подлежать выдаче во временное пользование со склада stockId. Если stockId не указан, данный параметр игнорируется.
saleable Признак того, что единица должна (при true) или не должна (при false) подлежать продаже со склада stockId. Если stockId не указан, данный параметр игнорируется.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"Supplies":
	[{
		"Id": 123, // Идентификатор уч. принадлежности (книги)
		"Created": "2019-10-09T15:30:23", // Дата и время создания уч. принадлежности в UTC
		"Title": "Английский для начинающих", // Наименование уч. принадлежности
		"Lendable": false, // Признак того, что уч. принадлежность подлежит выдаче во временное пользование с указанного склада
		                   // Значение null означает наличие разных значений для разных складов когда не указан параметр stockId
		"Saleable": true, // Аналогично Lendable, но в отношении продажи
		"InStockForLending": 0, // Количество единиц для выдачи на указанном складе/складах
		"InStockForSale": 0, // Количество единиц для продажи на указанном складе/складах
		"Price": "100 руб.", // Цена уч. принадлежности
		"DescriptionHtml": "<b>Полезная книга</b>", // Описание уч. принадлежности в HTML
		"DescriptionText": "Полезная книга", // Описание уч. принадлежности в текстовом формате
	},
	...]
}


GetEdMaterials: Учебные материалы, доступные пользователю

Список параметров (ни один не является обязательным):

type Тип уч. материала (Image, Book, Audio или Video). Если не указан, возвращаются все типы.
descending Сортировать элементы по убыванию (true/false).
skip Количество элементов, пропускаемых перед возвращением остальных элементов.
take Количество возвращаемых элементов (по умолчанию 1 000, не может быть больше 10 000).
Пример результата
{
	"EdMaterials":
	[{
		"Title": "Таблица неправильных глаголов", // Заголовок уч. материала
		"Type": "Image", // Тип уч. материала
		"ThumbnailUrl": "/Files/Default/Images/4lnbjzvc-100x100.jpg", // URL миниатюры уч. материала
		"Url": "/Files/Default/Images/4lnbjzvc-700x480.jpg", // URL уч. материала
		"VideoHostingPlayerUrl": " https://www.youtube.com/embed/hbF2swavgSA", // URL плеера видеохостинга для встройки в HTML
		"Description": "Примечание к уч. материалу"
	},
	...]
}

Набор возвращаемых уч. материалов зависит от пользователя, который их запрашивает (т.е. от authkey). Если authkey не привязан к пользователю (GetMemberAuthKey), возвращаются все уч. материалы.

Для скачивания файла к значению из поля «Url» также необходимо добавить параметр authkey.

URL видео может ссылаться как на файл на сервере (например, "/Files/Default/Video/xza3q3z5.mp4"), так и на видеохостинг (например, "http://www.youtube.com/v/qwerty").


GetAnnouncements: Объявления

Список параметров:

targets * Типы адресатов объявлений через запятую. Допустимые значения: Inside, Students, CompanyMembers.
createdFrom Минимальные дата и время создания объявления в UTC.
lastOnly ** Возвращать только последнее объявление. По умолчанию false.

* Если объявление запрашиваются под определённым пользователем, то указывать параметр не обязательно, он будет соответствовать типу пользователя. В противном случае, параметр обязателен.
** Не влияет на возвращаемое поле Count.

Пример результата
{
	"Announcements":
	[{
		"Id": 123, // Идентификатор объявления
		"Created": "2019-04-30T15:30:23", // Дата и время создания объявления в UTC
		"ContentHtml": "Завтра<br/>выходной", // Содержимое объявления в HTML
		"ContentText": "Завтра\r\nвыходной" // Содержимое объявления, преобразованное в текст
	},
	...],
	"Count": 5,
	"Now": "2019-04-30T18:25:00" // Текущие дата и время сервера в UTC (для последующей передачи в createdFrom)
}


Отправка данных


AddStudyRequest: Добавление заявки на обучение

Ни один из приведённых в примере параметров не является обязательным.

Принимается как GET-, так и POST-запрос. GET желательно использовать только для JSONP.

POST-запрос можно отправлять как в обычном (x-www-form-urlencoded), так и в JSON-формате (однако extraFields при использовании x-www-form-urlencoded всё равно необходимо отправлять в JSON, например:
extraFields: JSON.stringify({customField1: "CustomValue1"})).

Если UTM-метки содержатся в обратной ссылке (HTTP-заголовок Referer), то добавлять их в качестве параметров нет необходимости. Однако если таковые параметры есть, они сильнее соответствующих параметров из ссылки.

Также имеется возможность указывать дополнительные произвольные параметры. Они будут сохранены в базе данных и будут отображены в CRM в подсказке при наведении мышью на дату заявки.

Вместе с данными заявки CRM сохраняет (и отображает) также и значение HTTP-заголовка Referer. Если AddStudyRequest вызывается из клиентского кода (js), то браузер сам передаст этот заголовок. Если же из серверного, то не забудьте передать с запросом и заголовок Referer, если в том есть необходимость. На PHP+CURL это можно сделать вот так:
curl_setopt($curlDecriptor, CURLOPT_REFERER, $refererValue);

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddStudyRequest",
	data: JSON.stringify({
		id: null, // Идентификатор заявки (используется только для обновления существующей заявки)
		fullName: "Иванов Иван Иванович",
		eMail: "ivanov@mail.ru",
		phone: "+712312312312",
		birthday: "1984-02-25",
		agentFullName: "ФИО конт. лица",
		agentEMail: "ivanov-father@mail.ru",
		agentPhone: "+72342342323",
		discipline: "Английский",
		level: "Средний",
		maturity: "Дошкольники",
		location: "Тверь",
		office: "Главный филиал",
		extraFields: { // Пользовательские поля (при подтверждении заявки переносятся в лида/ученика, но только те поля, что есть в настройках)
			customField1: "CustomValue1",
			customField2: "True"
		},
		teacher: "Петров Пётр Петрович",
		beginDate: "17.03",
		endDate: "20.04",
		weekdays: "ср/чт",
		beginTime: "15:30",
		endTime: "16:10",
		edUnitId: null, // Идентификатор уч. единицы
		type: "Заявка на обучение", // Тип заявки
		description: "Примечание к заявке",
		utm_source: "Yandex-Direct", // UTM-метка «Рекламная система»
		utm_medium: "CPC", // UTM-метка «Тип трафика»
		utm_campaign: "Первая рекламная кампания", // UTM-метка «Обозначение рекламной кампании»
		utm_term: "Ключевое слово", // UTM-метка «Условие поиска кампании»
		utm_content: "red-button", // UTM-метка «Содержание кампании»
		extraData: "someData", // Произвольные пользовательские данные, доступные при экспорте заявок
		deleted: false, // Если true, заявка создаётся сразу как удалённая и помещается в архив заявок
		roistat: getCookie("roistat_visit"), // Для интеграции с системой Roistat (ф-ция «getCookie» реализуется самостоятельно)
		...
	}),
	contentType: "application/json;charset=utf-8",
	type: "post",
	success: function (result) {
		if (result.Error) alert("Ошибка: " + result.Error);
		else alert("Успешно: " + result.Id);
	},
	error: function (jqXhr) {
		try {
			alert("Ошибка: " + $.parseJSON(jqXhr.responseText).Error);
		} catch (e) {
			alert("Ошибка: " + jqXhr.statusText + " (" + jqXhr.readyState + ", " + jqXhr.status + ", " + jqXhr.responseText + ")");
		}
	}
});


Лиды/Клиенты

AddLead: Добавление лида

Список параметров (обязательные поля отмечены звёздочкой):

firstName Имя.
middleName Отчество.
lastName Фамилия.
gender * Пол (true – мужской, false - женский).
birthday Дата рождения в формате YYYY-MM-DD.
age Возраст (игнорируется при указании birthday).
officeOrCompanyId Идентификатор филиала или компании.
assigneeId Идентификатор ответственного за лида сотрудника.
status Наименование статуса лида.
adSource Наименование рекламного источника.
visitDateTime Дата/время визита (можно задавать только дату, например: «2022-07-27», или дату со временем, например: «2022-07-27T15:00:00»).
contacts ** Объект, содержащий контакты.
discipline Наименование дисциплины.
level Наименование уровня.
maturity Наименование возрастной категории.
learningType Наименование типа обучения.
comment Комментарий к лиду (HTML).
studyRequestId Идентификатор заявки, к которой необходимо прикрепить созданного лида.

Обязательных полей может быть больше, если в настройках соответствующие поля отмечены как обязательные.

** Поля данного объекта идентичны полям в EditContacts, за вычетом leadId и studentClientId (их указывать не нужно). Если данный объект указан, то для контактов действуют обязательные поля, указанные в настройках.

При указании studyRequestId заявка переводится в статус «Подтверждённая», т.е. переходит в архив.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddLead",
	data: {
		authkey: ...,
		firstName: "Иван",
		lastName: "Иванов",
		gender: true,
		contacts: {
			mobile: "+79121234567",
			useMobileBySystem: true,
			useEMailBySystem: true,
			position: "Директор"
		}
	},
	type: "post"
});
Пример результата
{
	"LeadId": 123 // Идентификатор добавленного лида
}


AddStudent: Добавление ученика

Список параметров (обязательные поля отмечены звёздочкой):

firstName * Имя.
middleName Отчество.
lastName * Фамилия.
gender * Пол (true – мужской, false - женский).
birthday Дата рождения в формате YYYY-MM-DD.
age Возраст (игнорируется при указании birthday).
officeOrCompanyId Идентификатор филиала или компании.
assigneeId Идентификатор ответственного за ученика сотрудника.
status Наименование статуса ученика.
adSource Наименование рекламного источника.
visitDateTime Дата/время визита (можно задавать только дату, например: «2022-07-27», или дату со временем, например: «2022-07-27T15:00:00»).
discipline Наименование дисциплины.
level Наименование уровня.
maturity Наименование возрастной категории.
learningType Наименование типа обучения.
comment Комментарий к ученику (HTML не поддерживается).
studyRequestId Идентификатор заявки, к которой необходимо прикрепить созданного ученика.

Обязательных полей может быть больше, если в настройках соответствующие поля отмечены как обязательные.

При указании studyRequestId заявка переводится в статус «Подтверждённая», т.е. переходит в архив.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddStudent",
	data: {
		authkey: ...,
		firstName: "Иван",
		lastName: "Иванов",
		gender: true
	},
	type: "post"
});
Пример результата
{
	"ClientId": 123 // Идентификатор добавленного ученика как клиента
}


AddStudentFromLead: Создание ученика из лида

Список параметров (обязательные поля отмечены звёздочкой):

leadId * Идентификатор лида.
Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddStudentFromLead",
	data: {
		authkey: ...,
		leadId: 15,
	},
	type: "post"
});
Пример результата
{
	"ClientId": 123 // Идентификатор созданного ученика как клиента
}


EditPersonal: Редактирование персональной информации лида/ученика

Список параметров (обязательные поля отмечены звёздочкой):

leadId ** Идентификатор лида.
studentClientId ** Идентификатор клиента-ученика.
firstName * Имя.
middleName Отчество.
lastName * Фамилия.
gender * Пол (true – мужской, false - женский).
birthday Дата рождения в формате YYYY-MM-DD.
age Возраст (игнорируется при указании birthday).
comment Комментарий к ученику (HTML не поддерживается).

** Обязательно должен быть указан один из данных параметров.

Обязательных полей может быть больше, если в настройках соответствующие поля отмечены как обязательные.

Редактирование перс. информации лида, прикреплённого к ученику, не допускается (ф-ция вернёт ошибку).
Также обратите внимание, что если несколько лидов связаны друг с другом, то перс. информация изменятся у всех.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/EditPersonal",
	data: {
		authkey: ...,
		studentClientId: 34,
		firstName: "Иван",
		lastName: "Иванов",
		gender: true
	},
	type: "post"
});


EditContacts: Редактирование основных контактов лида/ученика

Список параметров (обязательные поля отмечены звёздочкой):

leadId ** Идентификатор лида.
studentClientId ** Идентификатор клиента-ученика.
mobile Номер мобильного телефона.
useMobileBySystem * Признак того, что mobile может использоваться системой (например, для отправки SMS).
phone Номер телефона.
eMail E-mail.
useEMailBySystem * Признак того, что eMail может использоваться системой.
skype Skype.
address Адрес.
socialNetworkPage Адрес в соц. сети.
jobOrStudyPlace Место работы.
position Должность.

** Обязательно должен быть указан один из данных параметров.

Обязательных полей может быть больше, если в настройках соответствующие поля отмечены как обязательные.

Редактирование контактов лида, прикреплённого к ученику, не допускается (ф-ция вернёт ошибку).
Также обратите внимание, что если несколько лидов связаны друг с другом, то контакты изменятся у всех.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/EditContacts",
	data: {
		authkey: ...,
		studentClientId: 34,
		mobile: "+79121234567",
		useMobileBySystem: true,
		eMail: "some@mail.com",
		useEMailBySystem: true
	},
	type: "post"
});


EditAgentContacts: Редактирование контактных лиц лида/ученика

Список параметров (обязательные поля отмечены звёздочкой):

leadId ** Идентификатор лида.
studentClientId ** Идентификатор клиента-ученика.
agents Массив контактных лиц.
agents.firstName Имя.
agents.middleName Отчество.
agents.lastName Фамилия.
agents.whoIs Кем приходится ученику конт. лицо.
agents.mobile Номер мобильного телефона.
agents.useMobileBySystem * Признак того, что agents.mobile может использоваться системой (например, для отправки SMS).
agents.phone Номер телефона.
agents.eMail E-mail.
agents.useEMailBySystem * Признак того, что agents.eMail может использоваться системой.
agents.skype Skype.
agents.jobOrStudyPlace Место работы.
agents.position Должность.
agents.isCustomer * Признак того, что контактное лицо является заказчиком.
agents.birthday Дата рождения в формате YYYY-MM-DD.

** Обязательно должен быть указан один из данных параметров.

Обязательных полей может быть больше, если в настройках соответствующие поля отмечены как обязательные.

Добавить/отредактировать/удалить отдельное конт. лицо нельзя. Весь набор конт. лиц всегда отправляется полностью. Если конт. лица не указаны, все имеющиеся конт. лица лида/ученика будут удалены.

Редактирование конт. лиц лида, прикреплённого к ученику, не допускается (метод вернёт ошибку).
Также обратите внимание, что если несколько лидов связаны друг с другом, то конт. лица изменятся у всех.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/EditAgentContacts",
	data: {
		authkey: ...,
		studentClientId: 34,
		agents: [{
			whoIs: "Отец",
			mobile: "+79121234567",
			useMobileBySystem: true,
			eMail: "some@mail.com",
			useEMailBySystem: true,
			isCustomer: true
		},
		...]
	},
	type: "post"
});


EditIndClientParams: Редактирование параметров лида/ученика

Список параметров:

leadId * Идентификатор лида.
studentClientId * Идентификатор клиента-ученика.
assigneeIds Идентификаторы ответственных за лида/ученика сотрудников.
visitDateTime Дата/время визита (можно задавать только дату, например: «2022-07-27», или дату со временем, например: «2022-07-27T15:00:00»).

* Обязательно должен быть указан один из данных параметров.

Если какой-то из параметров не указан, то он не будет изменён.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/EditIndClientParams",
	data: {
		authkey: ...,
		studentClientId: 34,
		assigneeIds: [123,124]
	},
	type: "post"
});


EditUserExtraFields: Редактирование пользовательских полей лида/ученика

Список параметров:

leadId * Идентификатор лида.
studentClientId * Идентификатор клиента-ученика.
fields Массив полей.
fields.name Наименование поля.
fields.value Значение поля.

* Обязательно должен быть указан один из данных параметров.

Добавить/отредактировать/удалить отдельное поле нельзя. Весь набор полей всегда отправляется полностью. Если какое-то из полей не указано, то оно будет удалено у лида/ученика.

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

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/EditUserExtraFields",
	data: {
		authkey: ...,
		studentClientId: 34,
		fields: [{
			name: "Поле типа «Текст»",
			value: "Какой-либо текст"
		}, {
			name: "Поле типа «Число»",
			value: 1234
		}, {
			name: "Поле типа «Флажок»",
			value: true // Допустимые значения: true и false
		}, {
			name: "Поле типа «Дата»",
			value: "2020-03-25"
		}, {
			name: "Поле типа «Описание»",
			value: "Какое-либо <b>Описание</b> в HTML"
		}, {
			name: "Поле типа «Список»",
			value: "Элемент 1"
		},
		...]
	},
	type: "post"
});


UploadPhoto: Загрузка фотографии ученика

Список параметров (обязательные поля отмечены звёздочкой):

studentClientId * Идентификатор клиента-ученика.
Пример вызова из HTML
<form>
	<input type="file" name="file" onchange="window.onFileChange(this);" />
</form>
window.onFileChange = function(file) {
	var xhr = new XMLHttpRequest();
	xhr.open("POST", "http://schooldomain.t8s.ru/Api/V2/UploadPhoto?studentClientId=34&authkey=...");
	xhr.send(new FormData($(file).closest("form")[0]));
	xhr.onload = function () { … };
};
Пример результата
{
	"PhotoUrls": ["/Files/Default/Photos/ghahnhlx-100x100.jpg"] // Коллекция фото ученика в различных разрешениях
}


RemovePhoto: Удаление фотографии ученика

Список параметров (обязательные поля отмечены звёздочкой):

studentClientId * Идентификатор клиента-ученика.
Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/RemovePhoto",
	data: {
		authkey: ...,
		studentClientId: 34
	},
	type: "post"
});


SetStudentAuthInfo: Установка параметров авторизации ученика

Список параметров (обязательные поля отмечены звёздочкой):

studentClientId * Идентификатор клиента-ученика.
loginType
Тип логина. Возможные значения: "Email", "Phone", "Login". Если не указан, используется значение "Email".
login
Логин (email, телефон или просто логин). Если не указан, возможность авторизации отключается (т.е. отключается личный кабинет ученика). Значение loginType в этом случае не играет роли.
password Пароль. Если не указан, сохраняется старый пароль. Если авторизация до этого была отключена, устанавливается случайный пароль.

При включении/изменении параметров авторизации ученик автоматически уведомляется об этом по email/SMS аналогично тому, как это происходит при установке авторизации через UI.
Если имела место ошибка при уведомлении, параметры авторизации всё равно будут сохранены, а в ответе будет иметь место поле NotificationError.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/SetStudentAuthInfo",
	data: {
		authkey: ...,
		studentClientId: 34,
		loginType: "Login",
		login: "SomeLogin",
		password: "SomePassword",
	},
	type: "post"
});
Пример результата
{
	"NotificationError": "Некая ошибка при уведомлении", // Ошибка при уведомлении
	"AuthKey": "e6er5QSZ9sl1BwISTt1u2Wv3c2CFasfN9Q3Lzw=" // Ключ авторизации ученика (тот же, что вернула бы ф-ция GetMemberAuthKey)
}

SetLeadStatus: Установка статуса лида

Список параметров (обязательные поля отмечены звёздочкой):

leadId * Идентификатор лида.
statusId ** Идентификатор статуса.
statusName ** Наименование статуса.

** Статус можно задавать либо по идентификатору, либо по наименованию. Если не указано ни то, ни другое. Устанавливается отсутствие статуса (статус «[Нет]»).

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/SetLeadStatus",
	data: {
		authkey: ...,
		leadId: 34,
		statusName: "Успешный"
	},
	type: "post"
});


SetClientStatus: Установка статуса клиента

Список параметров (обязательные поля отмечены звёздочкой):

clientId * Идентификатор клиента (ученика или компании).
statusId ** Идентификатор статуса.
statusName ** Наименование статуса.

** Статус можно задавать либо по идентификатору, либо по наименованию. Если не указано ни то, ни другое. Устанавливается отсутствие статуса (статус «[Нет]»).

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/SetClientStatus",
	data: {
		authkey: ...,
		clientId: 12,
		statusName: "Занимается"
	},
	type: "post"
});


Учебные единицы

AddEdUnitLead: Добавление пробного урока

Список параметров (обязательные поля отмечены звёздочкой):

edUnitId * Идентификатор уч. единицы.
leadId * Идентификатор лида.
date * Дата пробного урока в формате YYYY-MM-DD.
comment Комментарий к пробному уроку.
Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddEdUnitLead",
	data: JSON.stringify({
		authkey: ...,
		edUnitId: 12,
		leadId: 25,
		date: "2020-03-25",
		comment: "Примечание к пробному уроку"
	}),
	type: "post"
});


AddEdUnitStudent: Добавление ученика в учебную единицу

Список параметров (обязательные поля отмечены звёздочкой):

edUnitId * Идентификатор уч. единицы.
studentClientId * Идентификатор клиента-ученика.
begin Дата начала занятий ученика в группе в формате YYYY-MM-DD (если параметр не указан, берётся начало занятий уч. единицы).
end Дата окончания занятий ученика в группе в формате YYYY-MM-DD (если параметр не указан, берётся окончание занятий уч. единицы).
weekdays Маска дней недели занятий ученика в группе (если параметр не указан, берутся все дни недели уч. единицы).
status Статус связки (может быть «Reserve», «Normal», «WorkingOff» или «Stopped», отсутствие параметра равносильно «Normal»).
priceId Идентификатор цены.
comment Комментарий.

Для добавления ученика «Без занятий» необходимо указать любые значения begin и end, такие, чтобы begin > end.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddEdUnitStudent",
	data: JSON.stringify({
		authkey: ...,
		edUnitId: 12,
		studentClientId: 34,
		begin: "2020-03-01",
		end: "2020-03-25",
		weekdays: 10, // 2 + 8 = Вт/Чт
		status: "Reserve",
		priceId: 10,
		comment: "Примечание к связке"
	}),
	type: "post"
});


EditEdUnitStudent: Редактирование связки «Учебная единица - ученик»

Список параметров (обязательные поля отмечены звёздочкой):

edUnitId * Идентификатор уч. единицы.
studentClientId * Идентификатор клиента-ученика.
begin ** Начальная дата диапазона обучения.
end ** Конечная дата диапазона обучения.
status ** Статус связки (может быть «Reserve», «Normal», «WorkingOff» или «Stopped»).
comment ** Комментарий.

** Если данный параметр не указан или равен null, его значение не меняется. Если параметр begin или end указан, но равен пустой строке, его значение сбрасывается (иными словами, меняется, соответственно, на -∞ или ∞, и на практике всегда равно текущим границам расписаний УЕ).

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/EditEdUnitStudent",
	data: JSON.stringify({
		authkey: ...,
		edUnitId: 12,
		studentClientId: 34,
		status: "Normal",
		comment: "Примечание к связке"
	}),
	type: "post"
});


SetStudentPasses: Установка информации о занятиях/пропусках

Ф-ция принимает параметр authkey (через URL), а также массив объектов, каждый из которых состоит из следующих полей:

date Дата занятия.
edUnitId Идентификатор учебной единицы.
studentClientId Идентификатор клиента-ученика.
pass *
Булевский признак пропуска.
payable *
Булевский признак оплачиваемости для учеников и преподавателей.
description *
Примечание к занятию.
overwriteAcceptedManually Булевский признак, позволяющий перезаписывать подтверждённое вручную занятие, по умолчанию: true.

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

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/SetStudentPasses?authkey=...",
	data: JSON.stringify([
		{ Date: '2017-03-26', EdUnitId: 4563, StudentClientId: 3206, Pass: false, Payable: false },
		{ Date: '2017-04-02', EdUnitId: 4563, StudentClientId: 3206, Pass: false, Payable: true }
	]),
	contentType: "application/json; charset=utf-8",
	type: "post"
});

Пример GET-вызова с теми же параметрами:
http://schooldomain.t8s.ru/Api/V2/SetStudentPasses?[0].Date=2017-03-26&[0].EdUnitId=4563&[0].StudentClientId=3206&[0].Pass=false&[0].Payable=false&[1].Date=2017-04-02&[1].EdUnitId=4563&[1].StudentClientId=3206&[1].Pass=false&[1].Payable=true&authkey=...

Пример результата

Если в процессе работы метода возникли ошибки, возвращается массив Errors, содержащий ошибки по каждому из занятий, например:

{
	"Errors": [{
		"errorType": "Exception",
		"errorMessage": "The day info was set manually",
		"Date": "2017-04-02",
		"EdUnitId": 4563,
		"StudentClientId": 3206
	},
	...]
}

Если состояние пропуска и оплачиваемости объединённого дня (дня уч. единицы, объединённого с днём ученика) в результате вызова метода остаётся неизменным, то возвращается ошибка «The pass and payable state will not be changed», и параметры этого дня не изменяются. Однако подтверждение пропуска/занятия всё равно устанавливается, но только если значение параметра Pass совпадает с текущим состоянием пропуска объединённого дня.


AddWorkingOff: Добавление отработки

Список параметров (обязательные поля отмечены звёздочкой):

studentClientId * Идентификатор клиента-ученика.
edUnitFromId * Идентификатор исходной уч. единицы.
dateFrom * Исходная дата.
edUnitToId * Идентификатор уч. единицы назначения.
dateTo * Дата отработки.

Необходимые условия:
- Уч. единицы могут быть только группами или мини-группами.
-
Ученик должен состоять в указанной исходной уч. единице.
- Даты dateFrom и dateTo должны соответствовать элементам расписания соответственно исходной уч. единицы и уч. единицы назначения.
- День отработки в уч. единице назначения не должен быть пропуском.

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

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddWorkingOff",
	data: JSON.stringify({
		authkey: ...,
		studentClientId: 34,
		edUnitFromId: 21,
		dateFrom: '2022-01-20',
		edUnitToId: 22,
		dateTo: '2022-01-25'
	}),
	type: "post"
});


Финансы

AddPayment: Добавление платежа (прихода на ЛС)

Список параметров (обязательные поля отмечены звёздочкой):

clientId * Идентификатор клиента.
officeOrCompanyId * Идентификатор филиала/компании.
date Дата платежа. Если не указана, берётся текущая.
type Тип платежа. На данный момент поддерживаются два стандартных типа: «Study» («Обучение») и «Supplies» («Учебные материалы») и пользовательские.
Для пользовательского типа необходимо указать здесь имя, как оно указано в настройках.
Если не указан, считается равным Study.
supplies ** Массив уч. принадлежностей (материалов).
value *** Используется только для типа Study.
Сумма и валюта платежа. Валюта должна указываться в том же виде, что используется для возврата денежных сумм (например, в GetPrices).
Если валюта не указана, берётся основная.
Десятичный разделитель должен соответствовать текущей культуре. Допускаются разделители групп разрядов.
paymentMethodId Идентификатор способа оплаты. Если не указан, берётся в первый в соответствии с установленным в настройках порядком.
state Состояние платежа: «Unpaid», «Unconfirmed» или «Paid». Если не указан, принимается равным «Paid».
description Комментарий к платежу.
requiredPaidDate Требуемая дата оплаты. Имеет смысл только при State = «Unpaid».
paidDate Дата оплаты платежа (приёма средств). Имеет смысл только при State = «Paid». Если не указана, берётся текущая дата.
paidEmployeeId Идентификатор принявшего платёж сотрудника.
tag Тег платежа (должен присутствовать в справочнике)
notifyClient Булевский признак, позволяющий уведомить клиента об успешной оплате или выставлении счёта (в зависимости от State).
По умолчанию: false.

** Обязателен только для типа Supplies. Необходимый формат указан в примере. Идентификаторы уч. принадлежностей можно получить с помощью ф-ции GetSupplies.

*** Обязателен только для типа Study.

Пример для типа Study с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddPayment",
	data: {
		authkey: ...,
		clientId: 236,
		officeOrCompanyId: 5,
		date: "2018-10-15",
		value: "1 234,12 руб.",
		state: "Paid",
		description: "Какое-то описание",
		paidEmployeeId: 40,
		tag: "SomeTag",
		notifyClient: true
	},
	type: "post"
});
Пример для типа Supplies с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddPayment",
	data: {
		authkey: ...,
		clientId: 236,
		officeOrCompanyId: 5,
		date: "2018-10-15",
		type: "Supplies",
		supplies: [{
			id: 20, // Идентификатор уч. принадлежности (материала)
			quantity: 2 // Количество экземпляров
		},
		...],
		state: "Paid",
		description: "Какое-то описание",
		paidEmployeeId: 40,
		notifyClient: true
	},
	type: "post"
});
Пример результата
{
	"Id": 1425 // Идентификатор добавленного платежа
}


EditPayment: Редактирование платежа

Список параметров (обязательные поля отмечены звёздочкой):

id *
Идентификатор платежа (можно передавать в виде «/EditPayment/id»).
state **
Состояние платежа: «Unpaid», «Unconfirmed» или «Paid».
description **
Комментарий (чтобы добавить текст к существующему комментарию, необходимо начать параметр с «+», а чтобы удалить – передать пустую строку).
chequeNumber **
Номер добавляемого к платежу чека (если к платежу уже прикреплён чек, возвращается ошибка).
acquiring **
Булевский признак того, что оплата произведена посредством эквайринга (свойство чека, не имеет смысла без chequeNumber).

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

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/EditPayment",
	data: {
		authkey: ...,
		id: 1234,
		state: "Paid",
		description: "+Оплачено через Сбербанк",
		chequeNumber: 123,
		acquiring: true
	},
	type: "post"
});


AddEdUnitPayment: Добавление оплаты за уч. единицу (расхода с ЛС)

Список параметров (обязательные поля отмечены звёздочкой):

clientId *
Идентификатор клиента.
beneficialClientId Идентификатор клиента-бенефициара. Указывается, если клиент платит не за себя. Применяется только в ситуациях, когда компания платит за ученика в некорпоративной группе.
edUnitId *
Идентификатор уч. единицы.
date Дата платежа. Если не указана, берётся текущая.
priceId *
Идентификатор цены.
Цена должна соответствовать типу уч. единицы (календарной, либо некалендарной) и типу добавляемой оплаты (параметр multiplier).
discountIds Массив идентификаторов скидок (из GetDiscounts).
surchargeIds Массив идентификаторов доплат (из GetSurcharges).
beginDate **
Начальная дата диапазона оплачиваемых занятий. Имеет смысл только для календарных оплат.
multiplier ***
Множитель целой (не частичной) пакетной оплаты.
По наличию данного параметра определяется тип добавляемой оплаты: либо частичная пакетная или почасовая (если отсутствует), либо полная пакетная (если присутствует).
units ***
Количество единиц для почасовой или частичной пакетной оплаты. Число или строка.
Для некалендарной оплаты должен содержать количество а.ч. (того типа а.ч., что указан в цене).
Для календарной оплаты должен содержать JSON-строку объекта, содержащего целочисленные поля months и days. Если объект содержит только одно из них, второе принимается равным нулю.
description Комментарий к оплате.
validDate Дата, после которой оплата считается недействительной. Имеет смысл только для некалендарных оплат.
studyPaymentId Идентификатор прихода, который необходимо связать с добавляемым расходом.
Сумма прихода должна соответствовать сумме расхода. Приход должен быть свободен от связи с другим расходом.
notifyClient Булевский признак, позволяющий уведомить клиента об успешной оплате или выставлении счёта (в зависимости от состояния прихода studyPaymentId). Без прихода игнорируется (клиент не уведомляется о расходах с ЛС).
По умолчанию: false.

** Только для календарных оплат

*** Обязательно должен быть указан один из данных параметров.

Пример добавления некалендарной частичной пакетной, либо почасовой (в зависимости от цены) оплаты
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddEdUnitPayment",
	data: {
		authkey: ...,
		clientId: 236,
		edUnitId: 123,
		date: "2018-10-15",
		priceId: 9,
		discountIds: [2, 4],
		units: 2.5,
		description: "Какое-то описание",
		validDate: "2018-10-22"
		notifyClient: true
	},
	type: "post"
});
Пример добавления календарной полной пакетной оплаты, связанной с приходом на ЛС
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddEdUnitPayment",
	data: {
		authkey: ...,
		clientId: 236,
		edUnitId: 456,
		priceId: 15,
		beginDate: "2018-06-01",
		multiplier: 2,
		studyPaymentId: 3618
	},
	type: "post"
});
Пример добавления календарной частичной пакетной оплаты
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddEdUnitPayment",
	data: {
		authkey: ...,
		clientId: 236,
		edUnitId: 456,
		priceId: 15,
		beginDate: "2018-06-01",
		units: "{months: 1, days: 5}"
	},
	type: "post"
});
Пример результата
{
	"Id": 1425, // Идентификатор добавленной оплаты
	"Value": "1 234,12 руб." // Вычисленная на основе указанных параметров итоговая сумма оплаты
}


Тесты

AddEditPersonalTestResult: Добавление/редактирование результата персонального теста

Список параметров (обязательные поля отмечены звёздочкой):

id Идентификатор существующего результата теста (только при редактировании).
studentClientId * Идентификатор клиента-ученика.
dateTime * Дата и время проведения теста.
discipline * Наименование дисциплины.
teacherId Идентификатор преподавателя.
testTypeId * Идентификатор типа теста.
skills Массив навыков и оценок.
skills.skillId * Идентификатор навыка.
skills.score * Количество баллов за данный навык.
commentHtml Комментарий к результату теста в HTML.

Набор навыков в массиве skills должен соответствовать актуальному набору навыков указанного типа теста, а количество баллов за навык не должно превышать соответствующее максимальное значение.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddEditPersonalTestResult",
	data: JSON.stringify({
		authkey: ...,
		id: 7,
		studentClientId: 20,
		dateTime: "2021-04-23T14:30",
		discipline: "Английский",
		teacherId: 123,
		testTypeId: 1,
		skills: [{
			skillId: 1,
			score: 1.5
		},
		...],
		commentHtml: "<b>Хорошо ответил</b>"
	}),
	contentType: "application/json;charset=utf-8",
	type: "post"
});
Пример результата
{
	"Id": 1425 // Идентификатор добавленного результата теста
}


AddEditEdUnitTestResult: Добавление/редактирование результата группового теста

Список параметров (обязательные поля отмечены звёздочкой):

edUnitId * Идентификатор уч. единицы.
studentClientId * Идентификатор клиента-ученика.
date * Дата проведения теста.
testTypeId * Идентификатор типа теста.
skills Массив навыков и оценок.
skills.skillId * Идентификатор навыка.
skills.score * Количество баллов за данный навык.
commentHtml Комментарий к результату теста в HTML.

Набор навыков в массиве skills должен соответствовать актуальному набору навыков указанного типа теста, а количество баллов за навык не должно превышать соответствующее максимальное значение.

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddEditEdUnitTestResult",
	data: JSON.stringify({
		authkey: ...,
		edUnitId: 10,
		studentClientId: 20,
		date: "2018-10-08",
		testTypeId: 1,
		skills: [{
			skillId: 1,
			score: 1.5
		},
		...],
		commentHtml: "<b>Хорошо ответил</b>"
	}),
	contentType: "application/json;charset=utf-8",
	type: "post"
});


Разное

AddTask: Добавление задачи

Список параметров (обязательные поля отмечены звёздочкой):

date * Дата выполнения задачи.
executorIds * Массив идентификаторов исполнителей задачи.
leadId ** Идентификатор лида (если необходимо связать задачу с коммуникацией с лидом).
clientId ** Идентификатор клиента (ученика или компании, если необходимо связать задачу с коммуникацией с клиентом).
outgoing Признак того, что направление коммуникации исходящее (по умолчанию true).
descriptionHtml * Описание задачи в HTML.

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

Пример POST-вызова с использованием jQuery
$.ajax({
	url: "http://schooldomain.t8s.ru/Api/V2/AddTask",
	data: JSON.stringify({
		authkey: ...,
		date: "2022-07-30",
		executorIds: [25,40],
		clientId: 20,
		outgoing: false,
		descriptionHtml: "Некое описание<br /><b>задачи</b>"
	}),
	contentType: "application/json;charset=utf-8",
	type: "post"
});