6. API
6.1. Создание сообщения
POST /api/new_min_report_data/
Создаёт сообщение с необязательными вложениями. Тело запроса передаётся в формате JSON.
6.1.1. Заголовки
Content-Type: application/jsonAuthorization: ApiKey <ключ>— API-ключ для интеграции.X-Environment-Mode— режим работы. Значениеtestвключает проверку без создания сообщения; если заголовок отсутствует или пуст, используетсяtest. Любое другое непустое значение создаёт сообщение, напримерproduction.
В тестовом режиме проверяются обязательные поля, дата, подразделение и
Base64-вложения. Ссылка file_url не загружается и не проверяется.
6.1.2. Поля запроса
date— обязательная дата сообщения в форматеYYYY-MM-DD.name— обязательное имя автора.text— обязательный текст сообщения.department— необязательный ID подразделения: целое число или строка из цифр. Если поле не задано, имеет другой формат или подразделение не найдено, используется подразделение с ID 1.file_url— необязательная ссылка на один файл.files— необязательный список файлов; каждый элемент содержит имяnameи Base64-содержимоеcontent.attachments— необязательный список файлов в формате клиента; каждый элемент содержит имяnameи Base64-содержимоеcontent_base64.
Имя файла должно быть непустым, не длиннее 250 символов, без пути и не может
быть равно . или ... Содержимое должно быть строкой стандартного
Base64; допускается префикс data:...;base64,. Если у элемента задано
поле encoding, его значение должно быть base64. Поля mime_type и
size можно передать для совместимости, но они не используются для
сохранения и не проверяются.
Можно одновременно передать file_url, files и attachments.
Содержимое Base64 заменяется на [redacted] в истории запросов.
6.1.3. Пример запроса
POST /api/new_min_report_data/ HTTP/1.1
Content-Type: application/json
Authorization: ApiKey <ключ>
X-Environment-Mode: production
{
"date": "2026-09-18",
"name": "Автор",
"text": "Описание сообщения",
"department": 1,
"file_url": "https://example.com/report.pdf",
"files": [
{"name": "report.txt", "content": "SGVsbG8="}
],
"attachments": [
{
"name": "attachment.txt",
"mime_type": "text/plain",
"size": 5,
"encoding": "base64",
"content_base64": "SGVsbG8="
}
]
}
Формат attachments соответствует формату вложений клиента, но остальные
поля клиентского документа автоматически не преобразуются: обязательные
date, name и text должны быть переданы в описанном выше виде.
6.1.4. Ответы
В рабочем режиме при успешном создании возвращается HTTP 200:
{"msg": "Report created id=123", "report_id": 123}
При ошибке загрузки файла по ссылке или сохранения вложения сообщение всё
равно создаётся, обработка остальных файлов продолжается, а HTTP 200 содержит
описание ошибки в msg вместе с report_id. Клиенту необходимо проверять
msg, если важно убедиться, что все файлы сохранены.
В тестовом режиме при успешной проверке возвращается HTTP 200 без
report_id:
{"msg": "Test mode: validation successful"}
Если обязательные поля отсутствуют, дата или Base64-вложения некорректны,
возвращается HTTP 400 с описанием ошибки в msg; сообщение не создаётся.
Если подходящее подразделение не найдено и подразделение с ID 1 отсутствует,
возвращается HTTP 500 с msg: Department id=1 not found in database.
6.2. Передача данных о полёте
POST /api/new_flight_data/
Создаёт запись о полёте в программе анализа полётной информации (FDM). Тело запроса передаётся в формате JSON.
6.2.1. Заголовки
Content-Type: application/jsonAuthorization: ApiKey <ключ>— API-ключ для интеграции.X-Environment-Mode— режим работы. Только значениеprodзаписывает данные в основную базу; при отсутствии или пустом значении используетсяtest. Любое значение, отличное отprod, выполняет только проверку данных.
Важно
В тестовом режиме полёты и записи справочников не создаются и не изменяются; тестовая база не требуется. Результат проверки не гарантирует успешного сохранения в рабочем режиме. История запросов сохраняется в основной базе для запросов с корректным ключом и распознанным JSON, но проверка существующего полёта не выполняется.
6.2.2. Поля запроса
id— идентификатор конкретной записи о полёте во внешней системе.dep_dateиarr_date— даты вылета и прибытия в форматеYYYY-MM-DD.flight— объект с полямиidиname: идентификатор номера рейса во внешней системе и номер рейса.flight.idидентифицирует номер рейса, а не конкретный полёт.route_fact— массив пунктов фактического маршрута в порядке следования. Каждый пункт содержитidаэропорта во внешней системе,nameи строки кодовcode1,code2,code3. Неиспользуемые коды передаются как пустые строки.pilot1иpilot2— номера первого и второго пилотов во внешней системе. Можно передавать целым числом или строкой, в том числе с буквами и ведущими нулями. Строковые значения сохраняются без изменения: например,"00123"и123обозначают разных пилотов.aircraft— объект с полямиidиname: идентификатор и обозначение воздушного судна во внешней системе.stewards— необязательный массив непустых строк с номерами бортпроводников, например["123", "456"]. Пробелы по краям удаляются; номер после удаления пробелов не должен превышать 250 символов.
Все поля, кроме stewards, обязательны. Идентификаторы id в примере
передаются числами. Номера пилотов используются для поиска или создания
пилотов в справочнике. Бортпроводники также создаются в справочнике при
отсутствии, но с самой записью FDM не связываются.
Идентификаторы передаются строкой или целым числом. Длина идентификаторов, имён и кодов не должна превышать 250 символов; такие же ограничения действуют для сформированных названия аэропорта с кодами и строки маршрута. Пустые номера пилотов допускаются. Для организации Smartavia номер рейса должен содержать не менее трёх последовательных цифр.
При обработке создаются отсутствующие ВС и аэропорты по их идентификаторам интеграции, а также рейс по его номеру. Названия ВС и аэропортов и маршрут рейса могут обновляться. Фактический маршрут записи формируется из названий пунктов, разделённых `` – ``.
6.2.3. Пример запроса
POST /api/new_flight_data/ HTTP/1.1
Content-Type: application/json
Authorization: ApiKey <ключ>
X-Environment-Mode: test
{
"id": 1001,
"dep_date": "2026-09-18",
"arr_date": "2026-09-18",
"flight": {"id": 42, "name": "AB-123"},
"route_fact": [
{"id": 1, "name": "Аэропорт отправления", "code1": "", "code2": "AAA", "code3": ""},
{"id": 2, "name": "Аэропорт назначения", "code1": "", "code2": "BBB", "code3": ""}
],
"pilot1": "00123",
"pilot2": 456,
"aircraft": {"id": 12, "name": "RA-12345"},
"stewards": ["789", "790"]
}
6.2.4. Ответы
В тестовом режиме при успешной проверке возвращается HTTP 200:
{"msg": "Test mode: validation successful", "mode": "test"}
При успешной обработке в режиме prod возвращается HTTP 200 с полями
msg и mode. В msg перечисляются созданные записи справочников;
если создавать записи не потребовалось, строка может быть пустой.
Если полёт с таким id уже найден в основной базе, повторная запись не
создаётся; возвращается HTTP 200 с одним полем msg:
{"msg": "Запись с integration_id=1001 уже существует. "}
Проверка дубликатов выполняется только в режиме prod. При ошибке
проверяемых полей возвращается HTTP 400 с описанием в msg; при неверном
ключе — HTTP 401 с {"msg": "Invalid Key"}.