REST. SSO: Повторный вход в существующую заявку на командировку
Метод предназначен для повторного входа в уже созданную заявку на командировку через REST API.
Для работы с SSO (Single sign-on) необходимо активировать и настроить МОД "Интеграция с SSO" (ModSSOService).
Эндпоинт
POST https://corteosDomain/api/v2/set
corteosDomain- домен.
Для тестовой среды: test.sso.corteos.ru
Для продуктивной среды: prd.sso.corteos.ru
Авторизация
Авторизация не требуется. Метод использует данные из блока AccountDetails для идентификации договора и пользователя.
Описание
Метод предназначен для ситуаций, когда пользователю необходимо повторно попасть в ранее созданную заявку на командировку.
Ключевые особенности:
Проверяет существование заявки с переданным
OuterId,Если заявка найдена - возвращает действующий
corteosIdдля входа,Если заявка не найдена - произойдет создание новой заявки на командировку.
В запросе не обязательно передавать полные данные о маршруте, пассажирах и кодах. Достаточно указать:
OuterId— внешний идентификатор существующей заявки,AccountDetails— данные договора и email инициатора.
Командировка - это заявка на поездку, содержащая информацию о маршруте, пассажирах, бюджетных кодах и других параметрах, необходимых для оформления услуг (авиа, ж/д, отель и т.д.).
Командировка характеризуется следующими полями:
OuterId- уникальный идентификатор командировки в системе клиента.CorteosId- токен, возвращаемый системой для формирования ссылки перехода.CurrentRoute- маршрут поездки (откуда, куда, даты).Persons- массив данных о пассажирах (ФИО, документы, контакты, персональные коды).BudgetCodes- бюджетные коды командировки.AccountDetails- данные договора и email инициатора.
Структура запроса (JSON)
{
"OuterId": "string", // Уникальный идентификатор командировки в системе клиента
"CurrentRoute": { // Объект содержащий маршрут и даты поездки
"Origin": "string", // Город отправления
"Destination": "string", // Город назначения
"DepartureDate": "datetime", // Дата отправления
"ReturnDate": "datetime" // Дата возвращения
},
"Persons": [ // Массив данных пассажиров
{
"LastName": "string", // Фамилия пассажира
"FirstName": "string", // Имя пассажира
"MiddleName": "string", // Отчество пассажира
"LastNameLatin": "string", // Фамилия пассажира англ.
"FirstNameLatin": "string", // Имя пассажира англ.
"MiddleNameLatin": "string", // Отчество пассажира англ.
"Gender": "string", // Пол пассажира
"DateBirth": "YYYY-MM-DD", // Дата рождения пассажира
"INN": "string", // ИНН организации
"KPP": "string", // КПП организации
"CountryAlpha2": "string", // Код страны гражданства пассажира
"Documents": [ // Документы (массив)
{
"CountryCode": "string", // Код страны выдачи документа
"DocumentNumber": "string", // Номер документа
"DocumentType": "string", // Тип документа
"DateValid": "datetime" // Срок действия документа
}
],
"Contacts": [ // Контакты (массив)
{
"ContactType": "string", // Значение контакта
"Value": "string" // Тип контакта
}
],
"PersonalCodes": [ // Персональные коды (массив)
{
"DictionaryName": "string", // Название справочника кодов
"CodeValue": "string", // Значение кода
"IsPrimaryKey": "string" // Флаг первичного ключа
}
]
}
],
"BudgetCodes": [ // Бюджетные коды (массив)
{
"DictionaryName": "string", // Название справочника кодов
"CodeValue": "string", // Значение кода
"IsPrimaryKey": "string", // Флаг первичного ключа
"SelectorState": "string" // Состояние селектора
}
],
"AccountDetails": { // Данные договора и инициатора
"id_Group": "string", // ID группы
"GroupSecurityKey": "string", // Ключ безопасности договора
"Email": "string" // Email инициатора командировки
}
}Параметры запроса
Body параметры:
Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| string | Да | Уникальный идентификатор командировки в системе клиента. |
| object | Нет | Содержит маршрут и даты поездки. |
| string | Нет | Город отправления. |
| string | Нет | Город назначения. |
| datetime | Нет | Дата отправления. |
| datetime | Нет | Дата возвращения. |
| array | Нет | Массив данных пассажиров. |
| string | Нет | Фамилия пассажира. |
| string | Нет | Имя пассажира. |
| string | Нет | Отчество пассажира. |
| string | Нет | Фамилия пассажира на английском. |
| string | Нет | Имя пассажира на английском. |
| string | Нет | Отчество пассажира на английском. |
| string | Нет | Пол ( |
| date | Нет | Дата рождения персоны в формате: |
| string | Нет | ИНН организации. |
| string | Нет | КПП организации. |
| string | Нет | Код страны. |
| array | Нет | Массив документов. |
| string | Нет | Код страны выдачи документа. |
| string | Нет | Номер документа. |
| string | Нет | Тип документа. |
| string | Нет | Срок действия. |
| array | Нет | Массив контактов. |
| string | Нет | Значение контакта. |
| string | Нет | Тип контакта. |
| array | Нет | Массив персональных (структурных) кодов привязанных к персоне. |
| string | Нет | Название справочника кодов. |
| string | Нет | Значение кода. |
| string | Нет | Флаг первичного ключа ( |
| array | Нет | Массив бюджетных кодов. |
| string | Нет | Название справочника бюджетных кодов. |
| string | Нет | Значение бюджетного кода. |
| string | Нет | Флаг первичного ключа ( |
| string | Нет | Состояние селектора ( |
| object | Да | Данные договора и инициатора. |
| string | Да | Идентификатор (номер) группы договора в системе Кортеос. |
| string | Да | Ключ безопасности договора. |
| string | Да | Email инициатора командировки. |
id_GroupиGroupSecurityKey- указаны на вкладке "Общие" договора.
Email- указан на странице “Профиль” персоны.
Структура ответа (JSON)
Метод возвращает ответ в формате UniversalApiResponseV2.
{
"result": { // Основные данные ответ
"id_User": integer, // ID пользователя
"corteosId": "string", // Токен командировки для SSO перехода
"creationDate": "DD.MM.YYYY", // Дата создания токена corteosId
"validUntil": "DD.MM.YYYY", // Дата истечения срока действия токена
"isExpired": boolean, // Флаг просрочки токена (false-активен,true-истёк)
"isAuthenticated": boolean, // Флаг авторизации.Показывает, прошёл ли пользователь аутентификацию
"augmentationData": "string", // Дополнительные XML-данные
"outerId": "string", // Внешний идентификатор командировки, который был передан в запросе (ваш OuterId)
"currentRoute": { // Объект содержащий маршрут и дат
"origin": "string", // Город отправления
"destination": "string", // Город назначения
"departureDate": "DD.MM.YYYY", // Дата отправления
"returnDate": "DD.MM.YYYY" // Дата возвращения
},
"persons": [ // Массив данных пассажиров
{
"lastName": "string", // Фамилия пассажира
"firstName": "string", // Имя пассажира
"middleName": "string", // Отчество пассажира
"lastNameLatin": "string", // Фамилия пассажира англ.
"firstNameLatin": "string", // Имя пассажира англ.
"middleNameLatin": "string", // Отчество пассажира англ.
"gender": boolean, // Пол пассажира
"dateBirth": "DD.MM.YYYY", // Дата рождения пассажира
"inn": "string", // ИНН организации
"kpp": "string", // КПП организации
"countryAlpha2": "string", // Код страны гражданства пассажира
"documents": [ // Документы (массив)
{
"countryCode": "string", // Код страны выдачи документа
"documentNumber": "string", // Номер документа
"documentType": integer, // Тип документа
"dateValid": "DD.MM.YYYY" // Срок действия документа
}
],
"contacts": [ // Контакты (массив)
{
"contactType": integer, // Тип контакта
"value": "string" // Значение контакта
}
],
"bonusCards": [], // Бонусные карты (массив)
"personalVisas": [], // Визы (массив)
"personalCodes": [ // Персональные коды (массив)
{
"dictionaryName": "string", // Название справочника кодов
"codeValue": "string", // Значение кода
"isPrimaryKey": boolean // Флаг первичного ключа
}
]
}
],
"budgetCodes": [ // Бюджетные коды (массив)
{
"selectorState": integer, // Состояние селектора
"dictionaryName": "string", // Название справочника кодов
"codeValue": "string", // Значение кода
"isPrimaryKey": boolean // Флаг первичного ключа
}
],
"accountDetails": { // Данные договора и инициатора
"id_Group": integer, // ID группы
"groupSecurityKey": "string", // Ключ безопасности договора
"email": "string", // Email инициатора командировки
"isLoggedIn": boolean // Флаг (индикатор) авторизации пользователя
},
"hasAccountDetails": boolean, // Флаг наличия данных договора. Показывает, были ли переданы реквизиты AccountDetails в запросе.
"isLoggedIn": boolean // Флаг входа в систему. Указывает, выполнен ли вход для пользователя, связанного с командировкой.
},
"statusCode": integer, // Код ответа
"info": { // Служебная информация
"sessionId": "string", // ID сессии
"timing": { // Время обработки
"start": "ISO8601", // Время начала обработки запроса
"end": "ISO8601", // Время завершения обработки запроса
"duration": double // Длительность обработки запроса (мс)
}
},
"errors": [], // Ошибки (пусто при успехе)
"hasErrors": boolean, // Флаг наличия ошибок
"isDefaultStatusCode": boolean // Флаг стандартного статус
}SSO переход
В ответе веб-сервиса нам следует обратить внимание на поле "corteosId" (4 строка).
Срок жизни токена corteosId 10 минут.
Значение выглядит таким образом:
"corteosId": "хххххххх-хххх-хххх-хххх-хххххххххххх"Данный идентификатор мы используем при SSO переходе на адрес:
https://yourdomain.ru/mods/ssoentrance/go?portalId=corteosId
yourdomain.ru- ваш домен.
В процессе перехода по ссылке будет найдена существующая заявка или создана новая с указанным номером в запросе OuterId и пользователь попадёт на страницу существующей командировки или созданной.
Пример запроса
При отправке POST запроса на https://test.sso.corteos.ru/api/v2/set с телом:
{
"OuterId": "тест1",
"AccountDetails": {
"id_Group": "8507",
"GroupSecurityKey": "хххххххх-хххх-хххх-хххх-хххххххххххх",
"Email": "usr8507@corteos.travel"
}
}Пример ответа
{
"result": {
"id_User": 147886,
"corteosId": "1525108f-06de-4ae8-b5f8-4a902ee4974a",
"creationDate": "03.04.2026",
"validUntil": "03.04.2026",
"isExpired": false,
"isAuthenticated": true,
"augmentationData": "<xml />",
"outerId": "тест1",
"persons": [],
"budgetCodes": [],
"accountDetails": {
"id_Group": 8507,
"groupSecurityKey": "хххххххх-хххх-хххх-хххх-хххххххххххх",
"email": "usr8507@corteos.travel",
"isLoggedIn": true
},
"hasAccountDetails": true,
"isLoggedIn": true
},
"statusCode": 200,
"info": {
"sessionId": "ххххххххххххххххххххх",
"timing": {
"start": "2026-04-03T13:32:18.357325+03:00",
"end": "2026-04-03T13:32:18.3885698+03:00",
"duration": 19.0
}
},
"errors": [],
"hasErrors": false,
"isDefaultStatusCode": true
}Пример SSO перехода
В ответе веб-сервиса нам следует обратить внимание на поле "corteosId" (4 строка).
Значение выглядит таким образом:
"corteosId": "1525108f-06de-4ae8-b5f8-4a902ee4974a"Данный идентификатор мы используем при SSO переходе на адрес:
https://yourdomain.ru/mods/ssoentrance/go?portalId=1525108f-06de-4ae8-b5f8-4a902ee4974a
yourdomain.ru- ваш домен.
При переходе по данной ссылке происходит переход в ранее созданную заявку на командировку.