УКЦ API v2.7

Документація до api-ovv-v2. База: https://api-ovv-v2.ukc.gov.ua/v1/

Аутентифікація

Кожен запит має передавати токен доступу. Рекомендований спосіб — заголовок Authorization: Bearer <client-token>. Також підтримується X-Api-Token.

Рекомендовано:
Authorization: Bearer YOUR_TOKEN

Для зворотної сумісності може бути увімкнений legacy-режим передачі токена через query-параметр ?token=... або path-формат /api/{token}/{method}. Токени керуються в БД api.clients.

СпосібСтатусПриклад
Authorization: Bearerрекомендованоcurl -H "Authorization: Bearer YOUR_TOKEN" ...
X-Api-TokenпідтримуєтьсяX-Api-Token: YOUR_TOKEN
?token=...legacy/v1/appeals?token=YOUR_TOKEN
/api/{token}/{method}legacy / опційно/api/YOUR_TOKEN/get_appeals
Debug: query-параметр ?debug=1 працює тільки якщо адміністратор явно увімкнув APP_ALLOW_QUERY_DEBUG. За замовчуванням debug через query вимкнений.

GET /v1/appeals — Нові звернення

GET /v1/appeals

Повертає перелік звернень, прив’язаних до вашого виконавця, за останні 60 днів. У блоці FILES повертаються абсолютні URL для скачування вкладень через /v1/files/....

У CRM-proxy режимі endpoint коректно розпаковує різні форми CRM-відповідей: прямий масив, envelope з data, envelope з result, а також wrapper-об’єкти з numeric keys.

ПараметрТипОписПриклад
debug0|1Необов’язковий режим налагодження, працює лише якщо увімкнено адміністратором1

Важливо щодо дат: поля START_DATE, END_DATE, start_date, end_date нормалізуються до legacy-формату DD-MON-YY, наприклад 19-MAY-26. Це прибирає різницю між відповідями тестового та production CRM.

Додаткові поля у відповіді:

ПолеОпис
PRIORITY_NAMEПріоритет, зокрема першочерговий розгляд
CUSTOMER_CATEGORYКатегорія заявника
CUSTOMER_SOCIAL_STATUSСоціальний стан
CUSTOMER_GENDERСтать

Фрагмент відповіді:

{
  "count": 2,
  "data": [{
    "INTERACTION_REQUEST_ID": "21245075",
    "DESTINATION_NAME": "Міністерство оборони України",
    "REQUEST_STATE_ID": "569",
    "START_DATE": "19-MAY-26",
    "END_DATE": "19-MAY-26",
    "SF_FULL_NAME": "Барилюк Павло Валерійович",
    "PRIORITY_NAME": "Першочерговий",
    "CUSTOMER_CATEGORY": "...",
    "CUSTOMER_SOCIAL_STATUS": "...",
    "CUSTOMER_GENDER": "...",
    "FILES": [
      "https://api-ovv-v2.ukc.gov.ua/v1/files/%D0%92%D1%96%D0%B4%D0%BF%D0%BE%D0%B2%D1%96%D0%B4%D1%8C.pdf?appeal_id=21245075"
    ]
  }]
}

POST /v1/appeals/{id}/accept — Прийняти звернення

POST /v1/appeals/21245075/accept

Переводить звернення вашого підрозділу зі статусу 569 у 568.

Після успішної операції в картці звернення в УКЦ додається коментар від UKC/api_ovv.

Відповідь:

{
  "success": true
}

POST /v1/appeals/batch-accept — Пакетне прийняття

POST /v1/appeals/batch-accept

Пакетно приймає звернення до розгляду. Перед виконанням appeal_ids нормалізуються, дедуплікуються і перевіряються.

Тіло запиту:

{
  "appeal_ids": ["21245075", "21245076", "21245077"]
}

Відповідь:

{
  "success": true,
  "updated": 3
}

POST /v1/appeals/{id}/complete — Прикріпити відповідь

POST /v1/appeals/21245075/complete

Зберігає файл відповіді. У CRM-proxy режимі використовується multipart upload у CRM API. У legacy Oracle fallback файл зберігається через PKG_FILE.p_save з src="form"; login для upload налаштовується через ORACLE_FILE_UPLOAD_LOGIN.

Поведінка параметра kind:

ПолеТипОпис
filemultipart/form-dataФайл відповіді: PDF, DOCX, ZIP, JPG тощо
kindstring, optionalintermediate | final | пусто

Після успішного збереження файлу додається коментар українською з описом дії. Автор: UKC/api_ovv.

Приклад відповіді:

{
  "success": true,
  "message": "Відповідь прикріплено, статус \"Розглянуто\"",
  "appeal_id": "21245075",
  "file_id": 14801760,
  "file_name": "reply.pdf",
  "download_url": "https://api-ovv-v2.ukc.gov.ua/v1/files/reply.pdf?appeal_id=21245075",
  "src": "form"
}

GET /v1/files/{filename} — Скачати файл

GET /v1/files/<filename>?appeal_id=<id>

Параметр appeal_id рекомендований — звужує пошук, пришвидшує віддачу і допомагає уникати 504 Gateway Timeout.

Назва файлу проходить валідацію: заборонені traversal-послідовності, control chars та некоректні значення.

Приклад:

https://api-ovv-v2.ukc.gov.ua/v1/files/%D0%92%D1%96%D0%B4%D0%BF%D0%BE%D0%B2%D1%96%D0%B4%D1%8C.pdf?appeal_id=21245075

GET /v1/appeals/{id}/card-pdf — Скачати картку звернення

GET /v1/appeals/<id>/card-pdf

Повертає друковану картку звернення у форматі PDF окремим методом. Цей файл не додається у загальний масив FILES endpoint-у GET /v1/appeals.

CRM-proxy та Oracle fallback

З 19.05.2026 runtime усіх основних OVV endpoint-ів може працювати через crm-api із JWT. Публічний контракт api-ovv-v2 для клієнтів збережено.

EndpointCRM-proxyПримітка
GET /v1/appealsтакПовертає count + data, нормалізує FILES і дати.
POST /v1/appeals/{id}/acceptтакЗберігає legacy-відповідь {"success": true}.
POST /v1/appeals/batch-acceptтакПідтримує JSON body з appeal_ids.
POST /v1/appeals/{id}/completeтакMultipart upload, повернення публічного download_url.
GET /v1/appeals/{id}/card-pdfтакBinary download через CRM, fallback лише за визначених умов.
GET /v1/files/{filename}такBinary download support.

Безпека та обробка помилок

Сумісність зі старим API

Підтримуються legacy-запити у вигляді /api/{token}/{method}, якщо цей режим увімкнений у конфігурації:

Legacy get_appeals також використовує актуальну нормалізацію CRM payload і дат.

Приклади cURL

# 1) Отримати нові звернення
curl -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api-ovv-v2.ukc.gov.ua/v1/appeals" -o appeals.json

# 2) Прийняти одне звернення
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api-ovv-v2.ukc.gov.ua/v1/appeals/21245075/accept"

# 3) Пакетне прийняття
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  "https://api-ovv-v2.ukc.gov.ua/v1/appeals/batch-accept" \
  -d '{"appeal_ids":["21245075","21245076"]}'

# 4) Прикріпити проміжну відповідь
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api-ovv-v2.ukc.gov.ua/v1/appeals/21245075/complete" \
  -F "file=@/path/reply.pdf;type=application/pdf" \
  -F "kind=intermediate"

# 5) Прикріпити остаточну відповідь, переводить статус у 570
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api-ovv-v2.ukc.gov.ua/v1/appeals/21245075/complete" \
  -F "file=@/path/reply.pdf;type=application/pdf" \
  -F "kind=final"

# 6) Завантажити файл, рекомендовано з appeal_id
curl -L -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api-ovv-v2.ukc.gov.ua/v1/files/reply.pdf?appeal_id=21245075" -o reply.pdf

# 7) Завантажити картку звернення у PDF
curl -L -H "Authorization: Bearer YOUR_TOKEN" \
  "https://api-ovv-v2.ukc.gov.ua/v1/appeals/21245075/card-pdf" -o card.pdf

Коментарі в CRM

При зміні статусу або прикріпленні файлу через API у картці звернення автоматично створюється коментар через PKG_INTERACTION_COMMENT.p_add_comment. Автор: UKC/api_ovv.

МетодЩо фіксується в коментарі
accept / batch-acceptПрийняття до розгляду: статус 569568.
complete + kind=intermediateПроміжна відповідь, файл, атрибут 525; статус не змінюється.
complete + kind=finalОстаточна відповідь, файл, атрибут 407; статус → 570.
complete без kindФайл прикріплено; статус не змінюється.

Приклад коментаря:

API ОВВ: Прикріплено остаточну відповідь (файл).
Файл: «reply.pdf» (ід. 14801760).
Зміна статусу: → 570 (Розглянуто).

Якщо запис коментаря не вдався, основна операція не відкочується — помилка фіксується в серверному логі.

Стани звернень