Интеграция с системой управления заявками (Enroll)
Общая схема движения заявки
Код будущего (набор август 2025 года)
Методы API
ВАЖНО: в любом запросе необходимо указывать код платформы. Код платформы - это транскрибированное (на латинице, без пробелов) короткое название организации, которое присылали в запросе на доступ. Это не id организации в CAT!!! Платформа привязывается к каждому курсу по списку, который отправляется в запросе на доступ. Если курса не было в списке, по нему невозможно получить информацию через api.
/api/v2/ticket_application/
Получение списка заявок по платформе и курсу (курс указывается опционально). По каждой заявке в списке возвращается unti_id, id заявки,
статус. Запрос должен содержать хедер "Authorization: Token ***" с токеном администратора платформы.
Пример get запроса
GET /api/v2/ticket_application/
Параметры get запроса
* platform_id - код платформы, отправленный в запросе на доступ, обязательный параметр, * course_id - id курса на Платформе У2035 (из адресной строки курса в Каталоге) * unti_id - идентификатор пользователя (обязательно, если не указан course_id) Возможные комбинации фильтров: platform_id + course_id + unti_id platform_id + course_id platform_id + course_id.
Пример ответа
{
"id": 825024, / id заявки на курс /
"unit_id": "1280859", / UntiID пользователя /
"status": "approved", / статус заявки на курс /
"future_code_module_id": null, / ID модуля /
"future_code_module_num": null, / номер модуля /
"transfert_status": "activated", / статус трансферта /
"admission_order_number": null, / номер приказа о зачислении /
"admission_order_date": null, / дата приказа о зачислении /
"expulsion_order_date": null, / дата приказа об отчислении /
"course_id": 27211, / ID курса /
"flow_id": 5827, / ID потока /
"flow_num": 4, / номер потока /
"pgu_id": null, / номер заявления в ЕПГУ /
"pgu_dt": null, / дата подачи заявления в ЕПГУ /
"okato: null, / ОКАТО пользователя /
"algorithm_grade":null, / уровень знания алгоритмов /
"language_grade": null, / уровень знания языка /
"motivation_grade": null, / уровень мотивации /
"end_dt": null, / дата прохождения ВИ /
"untill_dt": null, / дата автоотклонения /
"difficulty_level": "intermediate" / уровень сложности /
"exit_exam_status": null, / статус прохождения испытания, допустимые значения: start (зашел на страницу итогового испытания), InProcess (приступил к итоговому испытанию), Success (успешное прохождение итогового испытания), UnSuccess (неуспешное прохождение итогового испытания) / UnSuccess (неуспешное прохождение итогового испытания) /
"exit_motivation_grade": null, / уровень мотивации по итогу обучения /
"exit_algorithm_grade": null, / уровень знания алгоритмов по итогу обучения /
"exit_language_grade": null, / уровень знания языка программирования по итогу обучения /
"is_timeout": null, / было ли завершено испытание, допустимые значения: true - испытание завершено принудительно по таймеру,
false - испытание завершено самостоятельно слушателем /
"exit_end_dt": null, / дата прохождения испытания по итогу обучения /
"certificate_url: "", / ссылка на скачивание сертификата
"certificate_number": "" / номер выданного сертификата
* 400 если не хватает параметров в запросе или они не верны
* 401 если запрос не авторизован
* 403 если пользователь не является администратором указанной платформы
Ссылка на сваггер:
https://cat.2035.university/api/docs/#api-v2-ticket_application-list
/api/v5/course/enroll/
Получение статуса заявки на курс по платформе, unti_id и id курса. В ответе приходит статус заявки.
Возможные значения статусов:
- review (На рассмотрении),
- approved (Одобрена),
- declined (Отклонена),
- expelled (Отчислен),
- accepted (Зачислен),
- transfer (Переведен).
Если нет заявки - возвращается статус null.
В запросе нужно указывать ИЛИ course_id - id курса на Платформе У2035 ИЛИ external_course_id - идентификатор курса на платформе провайдера.
Удобнее указывать course_id, как в других методах.
Запрос должен содержать хедер "Authorization: Token ***" с токеном администратора платформы.
Обратите внимание, что заполнение полей в additional_info зависит от того, кем была подана заявка. Если заявку подавал родитель, то в delegate_*
лежат данные ребенка, а в first_name, surname, middle_name, email - данные родителя. Если заявку подавал ребенок самостоятельно, delegate_*
пустые, а в first_name, surname, middle_name, email - данные самого ребенка.
Также состав полей в ответе зависит от наличия защищенного канала.
Пример get запроса
GET /api/v5/course/enroll/
Параметры get запроса
* platform_id - код платформы, отправленный в запросе на доступ, обязательный параметр, * unti_id - id пользователя, обязательный параметр, * course_id - id курса на Платформе У2035 (из адресной строки курса в Каталоге), обязательный параметр.
Пример ответа
*{
"application_id": 123456, / id заявки на курс /"application_status": "review", / статус заявки на курс /
"application_status": null, / статус трансферта /
"admission_number": null, / номер приказа о зачислении /
"admission_order_date": null, / дата приказа о зачислении /
"expulsion_order_date": null, / дата приказа об отчислении/
"course_id": 19353, / ID курса /
"future_code_module_id": null, / ID модуля /
"future_code_module_number": null, / номер модуля /
"flow_id": null, / ID потока /
"pgu_id": 764472654, / номер заявления в ЕПГУ /
"pgu_dt": "2022-06-22T21:00:00Z", / дата подачи заявления в ЕПГУ /
"additional_info": null, / персональные данные учеников не передается >> смотреть на FTP
"algorithm_grade": null, / уровень знания алгоритмов /
"language_grade": null, / уровень знания языка /
"motivation_grade": null, / уровень мотивации /
"end_dt": null, / дата прохождения ВИ /
"untill_dt": null, / дата автоотклонения /
"difficulty_level": "intermediate" / уровень сложности /
"exit_exam_status": null, / статус прохождения испытания, допустимые значения: start (зашел на страницу итогового испытания), InProcess (приступил к итоговому испытанию), Success (успешное прохождение итогового испытания), UnSuccess (неуспешное прохождение итогового испытания) /
"exit_motivation_grade": null, / уровень мотивации по итогу обучения /
"exit_algorithm_grade": null, / уровень знания алгоритмов по итогу обучения /
"exit_language_grade": null, / уровень знания языка программирования по итогу обучения /
"is_timeout": null, / было ли завершено испытание, допустимые значения: true - испытание завершено принудительно по таймеру,
false - испытание завершено самостоятельно слушателем /
"exit_end_dt": null, / дата прохождения испытания по итогу обучения /
"certificate_url: "", / ссылка на скачивание сертификата
"certificate_number": "" / номер выданного сертификата
}
* 400 если не хватает параметров в запросе или они не верны
* 401 если запрос не авторизован
* 403 если пользователь не является администратором указанной платформы
* 404 если не найден пользователь/курс
Ссылка на сваггер: https://cat.2035.university/api/docs/#api-v5-course-enroll-list
/api/v6/course/enroll/update/
Изменение статуса заявки на курс по платформе, unti_id, id курса или идентификатору заявки, или изменение уровня сложности по платформе и идентификатору заявки.
Для разных статусов надо передавать разный набор параметров. Отдельный набор параметров используется также для передачи уровня сложности.
Запрос должен содержать хедер "Authorization: Token ***" с токеном администратора платформы.
Пример post запроса
POST /api/v6/course/enroll/update/{
"platform_id": "platform",
"application_id": 1,
"unti_id": 1
"course_id": 1,
"status": "declined",
"difficulty_level": "intermediate"
}
Общие параметры post запроса
* platform_id - код платформы, отправленный в запросе на доступ, обязательный параметр, * unti_id - unti_id пользователя, обязательный параметр, * course_id - id курса на Платформе У2035 (из адресной строки курса в Каталоге), обязательный параметр, * application_id - идентификатор заявки, обязательный параметр, * status - str, обязательный параметр. Возможные значения: (approved (Одобрена), declined (Отклонена), expelled (Отчислен), accepted (Зачислен), transfer (Переведен), finished (Окончил обучение).
Дополнительные параметры для простановки статуса approved
* flow - id потока, обязательный параметр, * enter_exam_date - дата в формате "%Y-%m-%d", обязательный параметр (актуально для проекта КБ 1 волны)
Дополнительные параметры для простановки статуса declined
* reason_choice - str, код причины отчисления, обязательный параметр
Возможные варианты: by_recipient (Отклонено в связи с обращением заявителя/получателя поддержки), not_support_recipient (Заявитель не является получателем поддержки), other (Иное).
Изменение уровня сложности, возможно только если заявка в статусе approved
* platform_id - идентификатор платформы, обязательный параметр, * application_id - идентификатор заявки, обязательный параметр, * difficulty_level - str, уровень сложности, возможные значения: intermediate (начальный), elementary (базовый), advanced (продвинутый), профессиональный (professional).
Дополнительные параметры для простановки статуса expelled
* expulsion_date - дата отчисления в формате "%Y-%m-%d", обязательный параметр,
* expulsion_order_number - str, тип и номер распорядительного акта об отчислении, обязательный параметр
* expulsion_order_date - дата распорядительного акта об отчислении в формате "%Y-%m-%d", обязательный параметр
* reason_choice - str, код причины отчисления, обязательный параметр
Возможные варианты:
reason_expelled_legitimate_user_application (По желанию заявителя)
reason_expelled_legitimate_blocked (В связи с блоком на ЕПГУ)
reason_expelled_legitimate_illness (Заболевание, амбулаторное, стационарное, санаторное лечение)
reason_expelled_legitimate_accomodation (Изменение места жительства)
reason_expelled_legitimate_family (Особые семейные обстоятельства)
reason_expelled_legitimate_war (Особые условия нахождения Получателя услуги)
reason_expelled_legitimate_army (Невозможность завершения обучения)
reason_expelled_legitimate_provider_error (Ошибочно зачислен Провайдером)
reason_expelled_legitimate_other (Другое - уважительная)
reason_expelled_not_legitimate_absence (Непосещаемость)
reason_expelled_not_legitimate_exam_failed (Неуспешная сдача промежуточной аттестации)
reason_expelled_not_legitimate_no_document (Отсутствие справки)
reason_expelled_not_legitimate_no_contract (Незаключение договора)
reason_expelled_not_legitimate_other (Другое - неуважительная)
Дополнительные параметры для простановки статуса accepted
Теперь можно при переводе в accepted указывать уровень сложности и не передавать его отдельно.
* accept_date - дата в формате "%Y-%m-%d", дата зачисления на образовательную программу, обязательный параметр * admission_order_date - дата в формате "%Y-%m-%d", дата распорядительного акта о зачислении, обязательный параметр * admission_order_number - str, тип и номер распорядительного акта о зачислении, обязательный параметр * difficulty_level - str, уровень сложности; возможные значения: intermediate (начальный), elementary (базовый), advanced (продвинутый), профессиональный (professional).
Изменение уровня сложности, возможно только если заявка в статусе approved
* platform_id - идентификатор платформы, обязательный параметр, * application_id - идентификатор заявки, обязательный параметр, * difficulty_level - str, уровень сложности, возможные значения: intermediate (начальный), elementary (базовый), advanced (продвинутый), профессиональный (professional).
Пример ответа
* 200 {"success": true} * 400 если переданы некорректные параметры или нельзя изменить статус * 401 если запрос не авторизован * 403 если пользователь не является администратором указанной платформы * 404 если не найден пользователь/курс/заявка
При простановке уровня сложности:
1. при первичной простановке уровня сложности будет - {“success”: true}
2. если мы ещё раз дошлем такой же уровень сложности то будет - {"status": "application is already have difficulty_level - intermediate"}
Ссылка на сваггер: https://cat.2035.university/api/docs/#api-v6-course-enroll-update-create
Обратите внимание, что POST запрос должен содержать параметры в теле запроса, а не в параметрах, например:
curl --location --request POST 'https://cat.2035.university/api/v6/course/enroll/update/' \
--header 'Authorization: Token ХХХХХ' \
--header 'Content-Type: application/json' \
--data-raw '
{
"unti_id": 1111111,
"course_id": 21111111,
"status": "declined",
"platform_id": "autotest"
}'
/api/v1/course-change-request/
Получение списка курсов, на которые можно переводить
Перевод с курса на курс
Получить список доступных ид курсов. Запрос должен содержать хедер "Authorization: Token ***" с токеном пользователя, имеющего доступ для редактирования курса
Пример get запроса
GET /api/v1/course-change-request/?application_id=1&unti_id=222&course_id=123
Параметры GET запроса
* application_id - id заявки, обязательный параметр * unti_id - unti_id пользователя, передается вместе с course_id * course_id - id курса, передается вместе с unti_id
Пример ответа
* 200 {"available_course_ids": [1,2,3]}
* 400 Не переданы unti_id + course_id или application_id
* 401 запрос не авторизован
* 403 у пользователя нет доступа к курсу
* 404 курс не найден
Перевод заявки на курс
Пример post запроса
POST /api/v1/course-change-request/
Тело запроса
{
"course_id": 111,
"application_id": 2222,
}
Параметры POST запроса
* course_id - id курса в каталоге (int) или uuid, обязательный параметр * application_id - id заявки, обязательный параметр
Пример ответа
* 200 {"success": True, "id": 123} - заявка
* 400 не передан обязательный параметр или такой набор тегов нельзя добавить из-за нарушения иерархии
* 401 запрос не авторизован
* 403 у пользователя нет доступа к курсу
* 404 Заявка не найдена
Ссылки на сваггеры:
https://cat.2035.university/api/docs/#api-v1-course-change-request-list
https://cat.2035.university/api/docs/#api-v1-course-change-request-create
/api/v6/course/enroll/specify/
Уточнение данных по реквизитам приказа
Пример post запроса
POST /api/v6/course/enroll/specify/
"application_id": 1,
"platform_id": "platform",
"accept_date": 2023-01-01,
"admission_order_date": 2023-01-01,
"admission_order_number": 1325345
Общие параметры POST запроса (заявка должна быть в статусе accepted и должен быть хотя бы один параметр)
* application_id - идентификатор заявки, обязательный параметр * platform_id - идентификатор платформы, обязательный параметр * accept_date - дата в формате "%Y-%m-%d", дата зачисления слушателя, необязательный параметр * admission_order_date - дата в формате "%Y-%m-%d", дата приказа о зачислении, необязательный параметр * admission_order_number - str, номер приказа о зачислении, необязательный параметр
Пример ответа
* 200 {"success": true}
* 400 если переданы некорректные параметры
* 401 если запрос не авторизован
* 403 если пользователь не является администратором указанной платформы
* 404 если не найден пользователь/курс/заявка
Ссылка на сваггер:
прод https://cat.2035.university/api/docs/#api-v6-course-enroll-specify-creat
Тестирование
Тестирование производится на продуктовой среде на тестовых заявках, созданных отдельно для каждого провайдера.
URL API Enroll для теста https://cat.2035.university/.
Пример урла для теста: https://cat.2035.university/api/v5/course/enroll/.
Подготовка к тестированию
Для того, чтобы интегрироваться в части управления заявками, необходимо:
Получить токен на https://dev.2035.university
Написать заявку на тестовый доступ к API управления заявками на почту apps@2035.university. Для запроса доступа необходимо с корпоративного адреса отправить письмо на apps@2035.university, тема письма - Доступы в API Enroll на проект «Код будущего 2025» организации _Полное_название_организации_»,
в теле письма должно быть:
-
- Проект: Код будущего 2025;
- Полное название организации;
- Контур: тестовый;
- Ответственное за интеграцию лицо:
- ФИО
- телефон.
- почта ответственного (почта должна совпадать с почтой в аккаунте leader ID и этот пользователь должен был получить токен на https://dev.2035.university);
- транскрибированное (на латинице, без пробелов) короткое название организации (код платформы);
- ссылка на главную страницу организации (не на ЛК организации в У2035, а на официальный сайт ОО).
В течение 3 дней будет выдан доступ, в письме вы получите номер курса для тестирования и id заявок для тестирования.
С этого момента можно приступать к тестированию функционала.
1. С первой заявкой проводится первый этап тестирования - тестирование зачисления.
В первый этап входит следующий набор действий:
1) Получить статус заявки, используя /api/v2/ticket_application/ или /api/v5/ticket_application/. Статус заявки approved, трансферт Активирован.
2) Зачислить пользователя, используя /api/v6/course/enroll/update/ (установить статус accepted). Статус заявки accepted, трансферт Активирован.
Дополнительные параметры для простановки статуса accepted
* accept_date - дата в формате "%Y-%m-%d", дата зачисления на образовательную программу, обязательный параметр * admission_order_date - дата в формате "%Y-%m-%d", дата распорядительного акта о зачислении, обязательный параметр * admission_order_number - str, тип и номер распорядительного акта о зачислении, обязательный параметр * difficulty_level - str, уровень сложности; возможные значения: intermediate (начальный), elementary (базовый), advanced (продвинутый), профессиональный (professional).
Обратите внимание, что дата зачисления на образовательную программу должна быть:
- больше или равна дате начала освоения образовательной программы
- больше или равна дате распорядительного акта
После прохождения этого этапа испытаний можно написать заявку на доступ в продуктовый контур.
2. Второй этап тестирования - тестирование отчисления - проходит с той же заявкой, которая была зачислена на первом этапе.
Во второй этап входит следующий набор действий:
1) Получить статус заявки, используя /api/v2/ticket_application/ или /api/v5/ticket_application/. Статус заявки accepted, трансферт Активирован.
2) Отчислить заявку, используя /api/v6/course/enroll/update/ (установить статус expelled).
Дополнительные параметры для простановки статуса expelled
* expulsion_date - дата отчисления в формате "%Y-%m-%d", обязательный параметр, * expulsion_order_number - str, тип и номер распорядительного акта об отчислении, обязательный параметр * expulsion_order_date - дата распорядительного акта об отчислении в формате "%Y-%m-%d", обязательный параметр * reason_choice - str, код причины отчисления, обязательный параметр
Возможные варианты:
reason_expelled_legitimate_user_application (По желанию заявителя)
reason_expelled_legitimate_blocked (В связи с блоком на ЕПГУ)
reason_expelled_legitimate_illness (Заболевание, амбулаторное, стационарное, санаторное лечение)
reason_expelled_legitimate_accomodation (Изменение места жительства)
reason_expelled_legitimate_family (Особые семейные обстоятельства)
reason_expelled_legitimate_war (Особые условия нахождения Получателя услуги)
reason_expelled_legitimate_army (Невозможность завершения обучения)
reason_expelled_legitimate_provider_error (Ошибочно зачислен Провайдером)
reason_expelled_legitimate_other (Другое - уважительная)
reason_expelled_not_legitimate_absence (Непосещаемость)
reason_expelled_not_legitimate_exam_failed (Неуспешная сдача промежуточной аттестации)
reason_expelled_not_legitimate_no_document (Отсутствие справки)
reason_expelled_not_legitimate_no_contract (Незаключение договора)
reason_expelled_not_legitimate_other (Другое - неуважительная)
Обратите внимание, что дата отчисления должна быть:
- больше Даты зачисления
- меньше или равна Дате окончания освоения Образовательной программы
Дата распорядительного акта об отчислении должна быть:
- меньше или равна Дате отчисления
- меньше или равна Дате окончания освоения Образовательной программы
На этом завершается второй этап тестирования.
3. Для второй заявки проводится третий этап тестирования - тестирование отклонения
Во второй этап входит следующий набор действий:
1) Получить статус заявки, используя /api/v2/ticket_application/ или /api/v5/ticket_application/. Статус заявки approved, трансферт Активирован.
2) Отклонить заявку, используя /api/v6/course/enroll/update/ (установить статус declined).
Дополнительные параметры для простановки статуса declined
* reason_choice - str, код причины отчисления, обязательный параметр
Возможные варианты: application_deadline (Получатель услуги не воспользовался возможностью прохождения Вступительного испытания (истечение срока заявки)), enter_exam_fail (Вступительные испытания пройдены неуспешно), by_recipient (Отклонено в связи с обращением заявителя/получателя поддержки), not_support_recipient (Заявитель не является получателем поддержки), no_places (Отсутствие свободного места на площадке Провайдера), provider_transfer (Перевод от Провайдера), other (Иное).
На этом завершается третий этап тестирования.
4. С третьей заявкой проводится четвертый этап тестирования - тестирование завершения обучения на 1,2,3 модулях
В четвертый этап входит следующий набор действий:
1) Получить статус заявки, используя /api/v2/ticket_application/ или /api/v5/ticket_application/. Статус заявки approved, трансферт Активирован.
2) Зачислить пользователя, используя /api/v6/course/enroll/update/ (установить статус accepted). Статус заявки accepted, трансферт Активирован.
3) Завершить обучение пользователя, используя /api/v6/course/enroll/update/ (установить статус finished). Статус заявки finished, трансферт Активирован.
4) После завершения обучения на 1 модуле для пользователя будет автоматически создана заявка на 2 модуль, после ее зачисления и завершения - на 3 модуль. Ее также нужно зачислить и завершить.
Для того, чтобы узнать id заявок на последующие модули, получите unti_id пользователя из заявки 1 модуля, далее по нему получите все заявки на курс /api/v2/ticket_application/
Трансферты будут активироваться ежедневно до 10:00 по московскому времени в будние дни. Если трансферт "Активирован условно" дождитесь следующего дня. Если статус не меняется длительное время, обратитесь к технической поддержке apps@2035.university.
Дополнительные параметры для простановки статуса finished
date_succes_midterm_assessment - дата в формате "%Y-%m-%d", Дата успешного прохождения Промежуточной аттестации date_confirm_midterm_assessment - дата в формате "%Y-%m-%d", Дата документа, подтверждающего результат прохождения Промежуточной аттестации type_name_document_confirm_midterm_assessment - строка, Тип и номер документа, подтверждающего результат прохождения Промежуточной аттестации adress - строка, Адрес (обязательный параметр в случае офлайн курса)
Обратите внимание, что поле Адрес должен точно совпадать с одним из адресов, размещенных вами на платформе для соответствующего курса. Вводить нужно значение из столбца C (Adress) загружаемой таблицы.
Для тестирования все курсы имеют формат офлайн, адрес - "Москва"
Дата успешного прохождения Промежуточной аттестации должна быть:
На 1 модуле
- Не менее, чем через 21 день с Даты зачисления
- Если заявка была создана в результате перевода с курса на курс, то больше Даты зачисления (без расчета 21 дня)
На 2 модуле
- Не менее, чем через 21 день с Даты успешного прохождения Промежуточной аттестации по модулю 1
- Больше Даты документа, подтверждающего результат прохождения Промежуточной аттестации по 1 модулю
На 3 модуле
- Не менее, чем через 21 день с Даты успешного прохождения Промежуточной аттестации по модулю 2
- Больше Даты документа, подтверждающего результат прохождения Промежуточной аттестации по 2 модулю
Дата документа, подтверждающего результат прохождения Промежуточной аттестации должна быть:
- Больше или равна Дате успешного прохождения Промежуточной аттестации за соответствующий модуль
На этом завершается четвертый этап тестирования.
Завершение заявки на 4 модуле будет доступно позже и иметь другие поля для заполнения.
Обратите внимание, что после отклонения заявки ее статус больше изменить нельзя!
Продуктовый контур
Доступ выдается только к опубликованным курсам.
Для перехода в продуктовый контур необходимо:
- Написать заявку на доступ к продуктовому API управления заявками на почту apps@2035.university, тема письма - Доступы к API Enroll на проект «Код будущего 2025» организации _Полное_название_организации_»,
в теле письма должно быть:- Проект: Код будущего 2025;
- Полное название организации;
- Контур: промышленный;
- Ответственное за интеграцию лицо:
- ФИО
- телефон.
- почта ответственного (почта должна совпадать с почтой в аккаунте leader ID и этот пользователь должен был получить токен на https://dev.2035.university)
- транскрибированное (на латинице, без пробелов) короткое название организации (код платформы);
- ссылка на главную страницу организации (не на ЛК организации в У2035, а на официальный сайт ОО).
- Доступ в продуктовый контур выдается в течение 3 рабочих дней только к опубликованным курсам.
Эндпойнты для тестового и продуктового контура совпадают.
URL API Enroll для продуктового контура: https://cat.2035.university/.
Пример урла для продуктового контура: https://cat.2035.university/api/v5/course/enroll/.
Ограничения в продуктовом контуре
Ограничение по работе с заявками: не более 1 запроса в секунду.
Работа с заявками в продуктовом контуре
URL API Enroll для продакшена https://cat.2035.university/.
ID потока можно увидеть на странице Потоки в разделе Управление курсами в ЛК в Каталоге.
Обратите внимание, что после отклонения заявки ее статус больше изменить нельзя!