REST. SSO: Создание заявки на командировку
Метод предназначен для создания новой заявки на командировку в системе Кортеос через REST API DataService с использованием SSO.
Для работы с 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- уникальный идентификатор командировки в системе клиента. Он используется для связывания данных между системой Corteos и системой клиента, позволяя клиенту идентифицировать командировку по своему внутреннему идентификатору.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",
"CurrentRoute": {
"Origin": "Москва",
"Destination": "Санкт-Петербург",
"DepartureDate": "2026-05-20T09:00:00",
"ReturnDate": "2026-05-23T18:00:00"
},
"Persons": [
{
"LastName": "Иванов",
"FirstName": "Иван",
"MiddleName": "Иванович",
"LastNameLatin": "Ivanov",
"FirstNameLatin": "Ivan",
"MiddleNameLatin": "Ivanovich",
"Gender": "true",
"DateBirth": "2000-01-01",
"INN": "8789878987",
"KPP": "567656787",
"CountryAlpha2": "RU",
"Documents": [
{
"CountryCode": "RU",
"DocumentNumber": "2323222422",
"DocumentType": "NationalPassport",
"DateValid": "2044-12-09T00:00:00"
}
],
"Contacts": [
{
"ContactType": "MobilePhone",
"Value": "+7567876545"
},
{
"ContactType": "Email",
"Value": "SsoTest@test.ru"
}
],
"PersonalCodes": [
{
"DictionaryName": "Тест SSO",
"CodeValue": "1234",
"IsPrimaryKey": "false"
}
]
}
],
"BudgetCodes": [
{
"DictionaryName": "Тестовый бюджетный справочник SSO",
"CodeValue": "1",
"IsPrimaryKey": "false",
"SelectorState": "Enabled"
}
],
"AccountDetails": {
"id_Group": "8507",
"GroupSecurityKey": "хххххххх-хххх-хххх-хххх-хххххххххххх",
"Email": "хххххх@corteos.travel"
}
}Пример ответа
{
"result": {
"id_User": 147886,
"corteosId": "42fc283e-3c45-4052-91ea-ed05883a9971",
"creationDate": "02.04.2026",
"validUntil": "02.04.2026",
"isExpired": false,
"isAuthenticated": true,
"augmentationData": "<xml />",
"outerId": "тест1",
"currentRoute": {
"origin": "Москва",
"destination": "Санкт-Петербург",
"departureDate": "20.05.2026",
"returnDate": "23.05.2026"
},
"persons": [
{
"lastName": "Иванов",
"firstName": "Иван",
"middleName": "Иванович",
"lastNameLatin": "Ivanov",
"firstNameLatin": "Ivan",
"middleNameLatin": "Ivanovich",
"gender": true,
"dateBirth": "01.01.2000",
"inn": "8789878987",
"kpp": "567656787",
"countryAlpha2": "RU",
"documents": [
{
"countryCode": "RU",
"documentNumber": "2323222422",
"documentType": 1,
"dateValid": "09.12.2044"
}
],
"contacts": [
{
"contactType": 1,
"value": "+7567876545"
},
{
"contactType": 3,
"value": "SsoTest@test.ru"
}
],
"bonusCards": [],
"personalVisas": [],
"personalCodes": [
{
"dictionaryName": "Тест SSO",
"codeValue": "1234",
"isPrimaryKey": false
}
]
}
],
"budgetCodes": [
{
"selectorState": 1,
"dictionaryName": "Тестовый бюджетный справочник SSO",
"codeValue": "1",
"isPrimaryKey": false
}
],
"accountDetails": {
"id_Group": хххх,
"groupSecurityKey": "хххххххх-хххх-хххх-хххх-хххххххххххх",
"email": "ххххххх@corteos.travel",
"isLoggedIn": true
},
"hasAccountDetails": true,
"isLoggedIn": true
},
"statusCode": 200,
"info": {
"sessionId": "хххххххххххххххххххххххх",
"timing": {
"start": "2026-04-02T16:32:16.3238877+03:00",
"end": "2026-04-02T16:32:16.3551372+03:00",
"duration": 24.0
}
},
"errors": [],
"hasErrors": false,
"isDefaultStatusCode": true
}Пример SSO перехода
В ответе веб-сервиса нам следует обратить внимание на поле "corteosId" (4 строка).
Значение выглядит таким образом:
"corteosId": "42fc283e-3c45-4052-91ea-ed05883a9971"Данный идентификатор мы используем при SSO переходе на адрес:
https://yourdomain.ru/mods/ssoentrance/go?portalId=42fc283e-3c45-4052-91ea-ed05883a9971
yourdomain.ru- ваш домен.
При переходе по данной ссылке происходит создание командировки согласно переданным данным.