├── .gitignore ├── README.md └── specs ├── open_personal_api.json ├── open_provider_api.json └── chast.json /.gitignore: -------------------------------------------------------------------------------- 1 | /.staff 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Monobank API community docs 2 | 3 | logo 4 | 5 | Більшість інформації у поточному репозиторії буде відноситись саме до Monobank open API. 6 | 7 | Щодо інших API див. інформацію [нижче](#інші-api-створені-командою-mono). 8 | 9 | > Інформація структурована силами community користувачів Monobank API на основі 10 | > практичного досвіду використання або зворотнього зв'язку представників Monobank у 11 | > Telegram чаті community (посилання на чат доступне на сторінці документації до API) 12 | 13 | ## API 14 | 15 | Monobank Open API - API що доступне публічно (без аутентифікації), або клієнтам банку за токеном аутентифікації, 16 | або провайдерам послуг. 17 | 18 | Дане API це особиста ініціатива частини із розробників Mono. Підтримується у вільний час і надається як є. 19 | 20 | Під "підтримується у вільний час" мається на увазі, що над проектом Open API працюють співробітники monobank, але для нього немає "спринтів", "ПМ", "плану розвитку", "показників" і всього того, що є у інших напрямках. 21 | Тобто допрацювання робляться або за власною ініціативою, або за пропозицією ззовні (але з нижчим пріоритетом відносно розвитку інших напрямків). 22 | 23 | За багатьма причинами (в тому числі - безпековими) Open API надає можливість використання лише "Read-only" операції. 24 | Можливостей формування тих чи інших транзакцій або змінювання даних клієнту немає. 25 | 26 | Тільки розробник може надати _абсолютно точну та вичерпну_ інформацію по даному API. 27 | 28 | ### Загальний (персональний) API 29 | 30 | Посилання на документацію API: https://api.monobank.ua/docs/ (або: https://monobank.ua/api-docs/monobank) 31 | 32 | > Див. також OpenAPI specification [open_personal_api.json](specs/open_personal_api.json) 33 | 34 | ### Корпоративний API для провайдерів послуг 35 | 36 | Посилання на документацію API: https://api.monobank.ua/docs/corporate.html (або: https://monobank.ua/api-docs/providers) 37 | 38 | "Production" доступ до API надається ЛИШЕ після підтвердження заявки відправленої через API: 39 | https://api.monobank.ua/docs/corporate.html#tag/Avtorizaciya-ta-nalashtuvannya-kompaniyi/paths/~1personal~1auth~1registration/post 40 | 41 | > Загальна схема взаємодії з API є досить схожою до схеми взаємодії з персональним API, 42 | > тож до моменту отримання підтвердження заявки на використання API для провайдерів - 43 | > для тестування можна використовувати персональний API 44 | 45 | Алгоритм підпису запитів до API ("X-Sign" HTTP header): https://gist.github.com/Sominemo/64845669d6326f2f73d356f025656bdb#signing-the-request 46 | 47 | > Див. також OpenAPI specification [open_provider_api.json](specs/open_provider_api.json) 48 | 49 | ## Telegram API community 50 | 51 | У Telegram створено чат для спільноти користувачів Monobank Open API для наступного: 52 | - надання зворотного зв'язку щодо користування API; 53 | - взаємодопомога користувачів щодо питань використання API; 54 | 55 | Для збереження балансу корисної інформації у чаті та економії часу інших учасників чату, вважається хорошим тоном: 56 | - не використовувати чат як фріланс біржу; 57 | - не використовувати чат як "кружок програмістів"; 58 | - обговорювати теми близькі саме до питань користування Monobank Open API; 59 | - поважати час інших та ознайомлюватись з інформацією наданою тут, у закріплених повідомленнях чату, документації. 60 | 61 | > Посилання на чат доступне на сторінці документації до API. 62 | 63 | ## Незадокументовані особливості API 64 | 65 | ### 1. Обмеження максимальної кількості платежів повернутих на один запит до API 66 | 67 | Endpoint виписки транзакцій ([docs](https://api.monobank.ua/docs/#tag/Kliyentski-personalni-dani/paths/~1personal~1statement~1{account}~1{from}~1{to}/get)) за одне звернення повертає не більше 500 транзакцій відсортованих з кінця періоду 68 | (тобто від часу `to` до `from`). 69 | 70 | > Можлива причина введеного обмеження на кількість результатів та відсутність інструментів пагінації з offset - https://use-the-index-luke.com/sql/partial-results/fetch-next-page 71 | 72 | Рекомендації: 73 | - Якщо кількість транзакцій = 500 - необхідно виконати додатковий запит змінивши (зменшивши) час `to` до часу останнього платежу, з відповіді. 74 | - Якщо знову кількість транзакцій = 500 - необхідно виконувати запити до того часу поки кількість транзакцій не буде < 500. 75 | - Відповідно якщо кількість транзакцій < 500 - всі платежі за вказаний період було отримано успішно. 76 | 77 | ## Часті питання 78 | 79 | ### 1. Як отримати OpenAPI specification щодо API? 80 | 81 | Маючи OpenAPI specification (https://www.openapis.org/) ви можете використати code generator для вашої мови програмування, 82 | відслідковувати зміни у API порівнюючи схему що ви використали (і зберегли) "місяць тому" і поточну, тощо. 83 | 84 | > **Note**: за відсутності API changelogs в якості експерименту мейнтейнерами community 85 | > документації час від часу (вручну) синхронізується OpenAPI specification в директорію [specs](specs/). 86 | > Наприклад [specs/open_personal_api.json](specs/open_personal_api.json) 87 | 88 | Не дивлячись на те, що явного способу скачати OpenAPI specification у документації Monobank не надається - проте технічна можливість дізнатись її - присутня. 89 | 90 | Для OpenAPI - це відкрити документацію за допомогою браузеру і виконати у консолі наступний JS код: 91 | ```js 92 | const openApiSchema = __redoc_state.spec.data; 93 | const jsonSchema = JSON.stringify(openApiSchema, null, 2); 94 | console.log(jsonSchema); 95 | ``` 96 | 97 | У результаті - у консолі буде виведено OpenAPI specification JSON string - який ви можете скопіювати собі у файл, у онлайн редактор https://editor.swagger.io, тощо 98 | 99 | > Для інших API інформація щодо можливості дізнатись OpenAPI specification уточнюється у релевантних розділах нижче. 100 | 101 | ### 2. Чи можна отримати теги створені користувачем до платежів з виписки? 102 | 103 | Ні. Коли це буде доступно - невідомо. 104 | 105 | ## Troubleshooting 106 | 107 | ### 1. Помилка при зверненні до API - 403 status code з HTML у тілі відповіді 108 | 109 | Якщо при роботі з API Ви отримуєте помилку 403 - скоріше за все вас заблокував AWS 110 | (що "захищає" API від атак зловмисників). 111 | 112 | Нажаль, ні розробники (представники банку), ні community не можуть допомогти з розблокуванням. 113 | 114 | Тіло відповіді може виглядати наступним чином: 115 | ``` 116 | 117 | 118 | 403 Forbidden 119 | 120 | 121 | 122 |
123 |

403 Forbidden

124 |
125 | 126 | 127 | ``` 128 | 129 | ## Інші API створені командою mono 130 | 131 | Monobank має не тільки open API, але й інші: 132 | 1. Інтернет-еквайринг 133 | 2. Покупка частинами 134 | 3. Expirenza by mono (shaketopay) 135 | 4. API для роботи з рахунками юридичних осіб 136 | 5. Open Banking 137 | 6. mono checkout (застаріло) 138 | 139 | Також перелік API сервісів є присутнім з швидким переходом до документації перелічених сервісів можна побачити за даною адресою https://monobank.ua/api-docs 140 | 141 | Щодо даних сервісів Вам можуть надати консультацію співробітники Monobank, до яких Ви можете звернутись 142 | за каналами комунікації що надані на лендінг сторінках сервісів. 143 | 144 | ### 1. Інтернет-еквайринг (acquiring) 145 | 146 | Посилання на лендінг сторінку сервісу "Plata by mono": https://monobank.ua/plata-by-mono 147 | 148 | Посилання на документацію API: https://api.monobank.ua/docs/acquiring.html (або https://monobank.ua/api-docs/acquiring) 149 | 150 | #### Known integrations 151 | 152 | Monobank надає інформацію щодо існуючих інтеграцій (як офіційних, що підтримуються співробітниками Monobank, так і розроблених їх партнерами) - https://monobank.ua/plata-by-mono/integrations 153 | 154 | За посиланням вище можна знайти також інструкції щодо встановлення інтеграцій до відомих платформ (CMS, конструктори вебсайтів, чат-боти тощо). 155 | 156 | #### OpenAPI specification 157 | 158 | > Див. також [acquiring.json](specs/acquiring.json) 159 | 160 | Аналогічно до способу отримання специфікації для Monobank open API (див. вище FAQ). 161 | 162 | ### 2. Покупка частинами 163 | 164 | Посилання на лендінг сторінку сервісу: https://monobank.ua/chast/vendors 165 | 166 | Посилання на документацію API: https://u2-demo-ext.mono.st4g3.com/docs/index.html (або https://monobank.ua/api-docs/chast) 167 | 168 | #### OpenAPI specification 169 | 170 | > Див. також [chast.json](specs/chast.json) 171 | 172 | На момент написання цього розділу - при відкритті документації у консолі браузеру - Network - був запит на `https://u2-demo-ext.mono.st4g3.com/v2/api-docs`, де поверталась OpenAPI specification. 173 | 174 | Отримати за домопогою `curl`: 175 | ```bash 176 | curl 'https://u2-demo-ext.mono.st4g3.com/v2/api-docs' -H 'accept: application/json' 177 | ``` 178 | 179 | ### 3. Expirenza by mono (shaketopay) 180 | 181 | Посилання на лендінг сторінку сервісу: https://shaketopay.com.ua 182 | 183 | Посилання на документацію API: https://docs.expirenza.com/api 184 | 185 | OpenAPI specification не може бути представленим, оскільки вся взаємодія йде через WebSocket. 186 | 187 | ### 4. API для роботи з рахунками юридичних осіб 188 | 189 | Посилання на документацію API: https://corp-api.monobank.ua 190 | 191 | > Див. також [legal_entity.json](specs/legal_entity.json) 192 | 193 | ### 5. Open Banking 194 | 195 | Що це: https://bank.gov.ua/ua/payments/open-banking 196 | 197 | Посилання на документацію API: https://ob.mono.bank 198 | 199 | OpenAPI specification є доступним до скачування з UI сторінки і не відстежується у поточному репозиторії. 200 | 201 | ### 6. mono checkout (застаріло) 202 | 203 | **ВАЖЛИВО**: даний сервіс наразі не є доступним для нових клієнтів і наразі знаходиться в процесі закриття. 204 | 205 | > Посилання на лендінг сторінку сервісу "mono checkout": https://checkout.mono.bank 206 | > 207 | > Посилання на документацію API варто шукати на сторінці лендінгу (на момент написання цього тексту - це було посилання на Google Docs). 208 | > 209 | > Є "особлива" окрема документація щодо верифікації callback від банку на предмет "довіреності" - https://docs.google.com/document/d/1t6UZhPn3UHHBmD1BJn22Z9bk5YGzVvUWwa-lnrv6Lj0/view. 210 | > Допоки посилання на таку частину документації відсутнє у основній документації до сервісу - посилання буде жити тут. 211 | -------------------------------------------------------------------------------- /specs/open_personal_api.json: -------------------------------------------------------------------------------- 1 | { 2 | "openapi": "3.0.3", 3 | "servers": [ 4 | { 5 | "url": "https://api.monobank.ua" 6 | } 7 | ], 8 | "info": { 9 | "title": "Monobank open API", 10 | "version": "v2303", 11 | "description": "API для отримання інформації про виписки та стан особистого рахунку та рахунків ФОП. Для надання доступу потрібно пройти авторизацію у особистому кабінеті [https://api.monobank.ua/](https://api.monobank.ua/index.html) та отримати токен для персонального використання.\n\nЯкщо у вас є запитання щодо роботи API, запрошуємо до ком'юніті у [Telegram-групі](REDACTED_TGLINK).\nAPI недоступне для клієнтів до 16 років, дані за дитячими рахунками доступні з батьківського акаунту.\nЯкщо у вас є сервіс і ви хочете централізовано приєднатися до API для надання послуг клієнтам, потрібно підключитися до [API для провайдерів послуг](/docs/corporate.html), що має більше можливостей. Якщо дані клієнтів не будуть надходити на ваші сервери або ви робите сервіс для своєї родини, використання корпоративного API необов'язкове. Розробка бібліотек або програм, які будуть використовувати клієнти особисто (дані клієнта не будуть проходити черeз вузли розробника), також не потребують використання корпоративного API.\n\nЦе надасть змогу клієнтам monobank авторизуватись у вашому сервісі (наприклад, у фінансовому менеджері) для надання інформації про стан рахунку або виписки.\n\nУ разі виявлення експлуатації цього API в якості корпоративного, банк залишає за собою право накласти санкції на компанію.", 12 | "x-logo": { 13 | "url": "logo.png", 14 | "altText": "logo" 15 | } 16 | }, 17 | "paths": { 18 | "/bank/currency": { 19 | "get": { 20 | "tags": [ 21 | "Публічні дані" 22 | ], 23 | "summary": "Отримання курсів валют", 24 | "description": "Отримати базовий перелік курсів валют monobank. Інформація кешується та оновлюється не частіше 1 разу на 5 хвилин.", 25 | "responses": { 26 | "200": { 27 | "description": "Інформація про курс валют", 28 | "content": { 29 | "application/json": { 30 | "schema": { 31 | "$ref": "#/components/schemas/CurrencyInfo" 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | }, 39 | "/personal/client-info": { 40 | "get": { 41 | "tags": [ 42 | "Клієнтські персональні дані" 43 | ], 44 | "summary": "Інформація про клієнта", 45 | "description": "Отримання інформації про клієнта та переліку його рахунків і банок. Обмеження на використання функції не частіше ніж 1 раз у 60 секунд.", 46 | "parameters": [ 47 | { 48 | "name": "X-Token", 49 | "in": "header", 50 | "schema": { 51 | "type": "string" 52 | }, 53 | "required": true, 54 | "example": "u3AulkpZFI1lIuGsik6vuPsVWqN7GoWs6o_MO2sdf301", 55 | "description": "Token для особистого доступу до API" 56 | } 57 | ], 58 | "responses": { 59 | "200": { 60 | "description": "Statement list", 61 | "content": { 62 | "application/json": { 63 | "schema": { 64 | "$ref": "#/components/schemas/UserInfo" 65 | } 66 | } 67 | } 68 | } 69 | } 70 | } 71 | }, 72 | "/personal/webhook": { 73 | "post": { 74 | "tags": [ 75 | "Клієнтські персональні дані" 76 | ], 77 | "summary": "Встановлення WebHook", 78 | "description": "Встановлення URL користувача:\n- Для підтвердження коректності наданої адреси, на неї надсилається GET-запит. Сервер має відповісти строго HTTP статус-кодом 200, і ніяким іншим. Якщо валідацію пройдено, на задану адресу починають надсилатися POST запити з подіями.\n- Події надсилаються у наступному вигляді: POST запит на задану адресу у форматі `{type:\"StatementItem\", data:{account:\"...\", statementItem:{#StatementItem}}}`. Якщо сервіс користувача не відповість протягом 5с на команду, сервіс повторить спробу ще через 60 та 600 секунд. Якщо на третю спробу відповідь отримана не буде, функція буде вимкнута. Відповідь сервера має строго містити HTTP статус-код 200.", 79 | "requestBody": { 80 | "required": true, 81 | "content": { 82 | "application/json": { 83 | "schema": { 84 | "$ref": "#/components/schemas/SetWebHook" 85 | } 86 | } 87 | } 88 | }, 89 | "parameters": [ 90 | { 91 | "name": "X-Token", 92 | "in": "header", 93 | "schema": { 94 | "type": "string" 95 | }, 96 | "required": true, 97 | "description": "Token для особистого доступу до API" 98 | } 99 | ], 100 | "responses": { 101 | "200": { 102 | "description": "ok" 103 | } 104 | } 105 | } 106 | }, 107 | "/personal/statement/{account}/{from}/{to}": { 108 | "get": { 109 | "tags": [ 110 | "Клієнтські персональні дані" 111 | ], 112 | "summary": "Виписка", 113 | "description": "Отримання виписки за час від {from} до {to} часу в секундах в форматі Unix time. Максимальний час, за який можливо отримати виписку — 31 доба + 1 година (2682000 секунд).\n\nОбмеження на використання функції — не частіше ніж 1 раз на 60 секунд.\n\nПовертає 500 транзакцій з кінця, тобто від часу to до from. Якщо кількість транзакцій = 500, потрібно зробити ще один запит, зменшивши час to до часу останнього платежу, з відповіді. Якщо знову кількість транзакцій = 500, то виконуєте запити до того часу, поки кількість транзакцій не буде < 500. Відповідно, якщо кількість транзакцій < 500, то вже отримано всі платежі за вказаний період.", 114 | "parameters": [ 115 | { 116 | "name": "X-Token", 117 | "in": "header", 118 | "schema": { 119 | "type": "string" 120 | }, 121 | "required": true, 122 | "description": "Token для особистого доступу до API" 123 | }, 124 | { 125 | "name": "account", 126 | "in": "path", 127 | "schema": { 128 | "type": "string" 129 | }, 130 | "required": true, 131 | "description": "Ідентифікатор рахунку або банки з переліків Statement list або 0 - дефолтний рахунок." 132 | }, 133 | { 134 | "name": "from", 135 | "in": "path", 136 | "schema": { 137 | "type": "string" 138 | }, 139 | "required": true, 140 | "example": "1546304461", 141 | "description": "Початок часу виписки." 142 | }, 143 | { 144 | "name": "to", 145 | "in": "path", 146 | "schema": { 147 | "type": "string" 148 | }, 149 | "required": false, 150 | "example": "1546306461", 151 | "description": "Останній час виписки (якщо відсутній, буде використовуватись поточний час)." 152 | } 153 | ], 154 | "responses": { 155 | "200": { 156 | "description": "Statement list", 157 | "content": { 158 | "application/json": { 159 | "schema": { 160 | "$ref": "#/components/schemas/StatementItems" 161 | } 162 | } 163 | } 164 | } 165 | } 166 | } 167 | } 168 | }, 169 | "components": { 170 | "schemas": { 171 | "SetWebHook": { 172 | "type": "object", 173 | "description": "URL для надсиляння подій по зміні балансу рахунків фізичних осіб, ФОП та банок", 174 | "properties": { 175 | "webHookUrl": { 176 | "example": "https://example.com/some_random_data_for_security", 177 | "type": "string" 178 | } 179 | } 180 | }, 181 | "UserInfo": { 182 | "type": "object", 183 | "description": "Опис клієнта та його рахунків і банок.", 184 | "properties": { 185 | "clientId": { 186 | "description": "Ідентифікатор клієнта (збігається з id для send.monobank.ua)", 187 | "type": "string", 188 | "example": "3MSaMMtczs" 189 | }, 190 | "name": { 191 | "description": "Ім'я клієнта", 192 | "type": "string", 193 | "example": "Мазепа Іван" 194 | }, 195 | "webHookUrl": { 196 | "description": "URL для надсиляння подій по зміні балансу рахунку", 197 | "type": "string", 198 | "example": "https://example.com/some_random_data_for_security" 199 | }, 200 | "permissions": { 201 | "description": "Перелік прав, які які надає сервіс (1 літера на 1 permission).", 202 | "type": "string", 203 | "example": "psfj" 204 | }, 205 | "accounts": { 206 | "type": "array", 207 | "description": "Перелік доступних рахунків", 208 | "items": { 209 | "type": "object", 210 | "properties": { 211 | "id": { 212 | "type": "string", 213 | "description": "Ідентифікатор рахунку", 214 | "example": "kKGVoZuHWzqVoZuH" 215 | }, 216 | "sendId": { 217 | "type": "string", 218 | "description": "Ідентифікатор для сервісу https://send.monobank.ua/{sendId}", 219 | "example": "uHWzqVoZuH" 220 | }, 221 | "balance": { 222 | "type": "number", 223 | "format": "int64", 224 | "description": "Баланс рахунку в мінімальних одиницях валюти (копійках, центах)", 225 | "example": 10000000 226 | }, 227 | "creditLimit": { 228 | "type": "number", 229 | "format": "int64", 230 | "description": "Кредитний ліміт", 231 | "example": 10000000 232 | }, 233 | "type": { 234 | "type": "string", 235 | "description": "Тип рахунку", 236 | "enum": [ 237 | "black", 238 | "white", 239 | "platinum", 240 | "iron", 241 | "fop", 242 | "yellow", 243 | "eAid" 244 | ], 245 | "example": "black" 246 | }, 247 | "currencyCode": { 248 | "type": "number", 249 | "format": "int32", 250 | "description": "Код валюти рахунку відповідно ISO 4217", 251 | "example": 980 252 | }, 253 | "cashbackType": { 254 | "type": "string", 255 | "description": "Тип кешбеку який нараховується на рахунок", 256 | "enum": [ 257 | "None", 258 | "UAH", 259 | "Miles" 260 | ], 261 | "example": "UAH" 262 | }, 263 | "maskedPan": { 264 | "type": "array", 265 | "description": "Перелік замаскованних номерів карт (більше одного може бути у преміальних карт)", 266 | "example": [ 267 | "537541******1234" 268 | ] 269 | }, 270 | "iban": { 271 | "type": "string", 272 | "description": "IBAN рахунку", 273 | "example": "UA733220010000026201234567890" 274 | } 275 | } 276 | } 277 | }, 278 | "jars": { 279 | "type": "array", 280 | "description": "Перелік банок", 281 | "items": { 282 | "type": "object", 283 | "properties": { 284 | "id": { 285 | "type": "string", 286 | "description": "Ідентифікатор банки", 287 | "example": "kKGVoZuHWzqVoZuH" 288 | }, 289 | "sendId": { 290 | "type": "string", 291 | "description": "Ідентифікатор для сервісу https://send.monobank.ua/{sendId}", 292 | "example": "uHWzqVoZuH" 293 | }, 294 | "title": { 295 | "type": "string", 296 | "description": "Назва банки", 297 | "example": "На тепловізор" 298 | }, 299 | "description": { 300 | "type": "string", 301 | "description": "Опис банки", 302 | "example": "На тепловізор" 303 | }, 304 | "currencyCode": { 305 | "type": "number", 306 | "format": "int32", 307 | "example": 980, 308 | "description": "Код валюти банки відповідно ISO 4217" 309 | }, 310 | "balance": { 311 | "type": "number", 312 | "format": "int64", 313 | "description": "Баланс банки в мінімальних одиницях валюти (копійках, центах)", 314 | "example": 1000000 315 | }, 316 | "goal": { 317 | "type": "number", 318 | "format": "int64", 319 | "description": "Цільова сума для накопичення в банці в мінімальних одиницях валюти (копійках, центах)", 320 | "example": 10000000 321 | } 322 | } 323 | } 324 | } 325 | } 326 | }, 327 | "StatementItems": { 328 | "type": "array", 329 | "description": "Перелік транзакцій за вказанний час", 330 | "items": { 331 | "type": "object", 332 | "properties": { 333 | "id": { 334 | "type": "string", 335 | "example": "ZuHWzqkKGVo=", 336 | "description": "Унікальний id транзакції" 337 | }, 338 | "time": { 339 | "type": "number", 340 | "format": "int64", 341 | "example": 1554466347, 342 | "description": "Час транзакції в секундах в форматі Unix time" 343 | }, 344 | "description": { 345 | "type": "string", 346 | "example": "Покупка щастя", 347 | "description": "Опис транзакцій" 348 | }, 349 | "mcc": { 350 | "type": "number", 351 | "format": "int32", 352 | "example": 7997, 353 | "description": "Код типу транзакції (Merchant Category Code), відповідно ISO 18245" 354 | }, 355 | "originalMcc": { 356 | "type": "number", 357 | "format": "int32", 358 | "example": 7997, 359 | "description": "Оригінальний код типу транзакції (Merchant Category Code), відповідно ISO 18245" 360 | }, 361 | "hold": { 362 | "type": "boolean", 363 | "example": false, 364 | "description": "Статус блокування суми (детальніше у [wiki](https://en.wikipedia.org/wiki/Authorization_hold))" 365 | }, 366 | "amount": { 367 | "type": "number", 368 | "format": "int64", 369 | "example": -95000, 370 | "description": "Сума у валюті рахунку в мінімальних одиницях валюти (копійках, центах)" 371 | }, 372 | "operationAmount": { 373 | "type": "number", 374 | "format": "int64", 375 | "example": -95000, 376 | "description": "Сума у валюті транзакції в мінімальних одиницях валюти (копійках, центах)" 377 | }, 378 | "currencyCode": { 379 | "type": "number", 380 | "format": "int32", 381 | "example": 980, 382 | "description": "Код валюти рахунку відповідно ISO 4217" 383 | }, 384 | "commissionRate": { 385 | "type": "number", 386 | "format": "int64", 387 | "example": 0, 388 | "description": "Розмір комісії в мінімальних одиницях валюти (копійках, центах)" 389 | }, 390 | "cashbackAmount": { 391 | "type": "number", 392 | "format": "int64", 393 | "example": 19000, 394 | "description": "Розмір кешбеку в мінімальних одиницях валюти (копійках, центах)" 395 | }, 396 | "balance": { 397 | "type": "number", 398 | "format": "int64", 399 | "example": 10050000, 400 | "description": "Баланс рахунку в мінімальних одиницях валюти (копійках, центах)" 401 | }, 402 | "comment": { 403 | "type": "string", 404 | "example": "За каву", 405 | "description": "Коментар до переказу, уведений користувачем. Якщо не вказаний, поле буде відсутнім" 406 | }, 407 | "receiptId": { 408 | "type": "string", 409 | "example": "XXXX-XXXX-XXXX-XXXX", 410 | "description": "Номер квитанції для check.gov.ua. Поле може бути відсутнім" 411 | }, 412 | "invoiceId": { 413 | "type": "string", 414 | "example": "2103.в.27", 415 | "description": "Номер квитанції ФОПа, приходить у випадку якщо це операція із зарахуванням коштів" 416 | }, 417 | "counterEdrpou": { 418 | "type": "string", 419 | "example": "3096889974", 420 | "description": "ЄДРПОУ контрагента, присутній лише для елементів виписки рахунків ФОП" 421 | }, 422 | "counterIban": { 423 | "type": "string", 424 | "example": "UA898999980000355639201001404", 425 | "description": "IBAN контрагента, присутній лише для елементів виписки рахунків ФОП" 426 | }, 427 | "counterName": { 428 | "type": "string", 429 | "example": "ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ «ВОРОНА»", 430 | "description": "Найменування контрагента" 431 | } 432 | } 433 | } 434 | }, 435 | "CurrencyInfo": { 436 | "type": "array", 437 | "description": "Перелік курсів. Кожна валютна пара може мати одне і більше полів з rateSell, rateBuy, rateCross.", 438 | "items": { 439 | "type": "object", 440 | "properties": { 441 | "currencyCodeA": { 442 | "type": "number", 443 | "format": "int32", 444 | "example": 840, 445 | "description": "Код валюти рахунку відповідно ISO 4217" 446 | }, 447 | "currencyCodeB": { 448 | "type": "number", 449 | "format": "int32", 450 | "example": 980, 451 | "description": "Код валюти рахунку відповідно ISO 4217" 452 | }, 453 | "date": { 454 | "type": "number", 455 | "format": "int64", 456 | "example": 1552392228, 457 | "description": "Час курсу в секундах в форматі Unix time" 458 | }, 459 | "rateSell": { 460 | "type": "number", 461 | "format": "float", 462 | "example": 27 463 | }, 464 | "rateBuy": { 465 | "type": "number", 466 | "format": "float", 467 | "example": 27.2 468 | }, 469 | "rateCross": { 470 | "type": "number", 471 | "format": "float", 472 | "example": 27.1 473 | } 474 | } 475 | } 476 | }, 477 | "Error": { 478 | "type": "object", 479 | "properties": { 480 | "errorDescription": { 481 | "type": "string", 482 | "description": "Текст помилки для кінцевого користувача, для автоматичного оброблення потрібно аналізувати HTTP код відповіді (200, 404, 429 та інші)" 483 | } 484 | } 485 | } 486 | } 487 | }, 488 | "tags": [ 489 | { 490 | "name": "Публічні дані", 491 | "description": "Загальна інформація що надається без авторизації." 492 | }, 493 | { 494 | "name": "Клієнтські персональні дані", 495 | "description": "Інформація, що надається тільки за наявстю token-а доступу, який клієнт може отримати в особистому кабінеті [https://api.monobank.ua/](https://api.monobank.ua/index.html)" 496 | } 497 | ] 498 | } -------------------------------------------------------------------------------- /specs/open_provider_api.json: -------------------------------------------------------------------------------- 1 | { 2 | "openapi": "3.0.3", 3 | "servers": [ 4 | { 5 | "url": "https://api.monobank.ua" 6 | } 7 | ], 8 | "info": { 9 | "title": "Monobank open API for providers", 10 | "version": "v2303", 11 | "description": "API для отримання інформації про стан рахунків клієнтів та виписок по ним, а також загальної інформації про банк для розробників інших сервісів.\n\nAPI дозволяє ідентифікувати користувача банку та надати токен для отримання інформація по окремому клієнту.\nДля отримання доступу необхідно створити заявку на авторизацію. Цей процес необхідний для забезпечення безпеки клієнтських даних.\n\nТільки після надання компанії доступів до API клієнт матиме змогу авторизуватися за допомогою свого токена monobank у сервісі цієї компанії.\n\nЯкщо у вас є запитання щодо роботи API, запрошуємо до ком'юніті у [Telegram-каналі](REDACTED_TGLINK)\nAPI недоступне для клієнтів до 16 років, дані за дитячими рахунами доступні з батьківського акаунту.", 12 | "x-logo": { 13 | "url": "logo.png", 14 | "altText": "logo" 15 | } 16 | }, 17 | "paths": { 18 | "/bank/currency": { 19 | "get": { 20 | "tags": [ 21 | "Публічні дані" 22 | ], 23 | "summary": "Отримання курсів валют", 24 | "description": "Отримати базовий перелік курсів валют monobank. Інформація кешується та оновлюється не частіше 1 разу на 5 хвилин.", 25 | "responses": { 26 | "200": { 27 | "description": "Інформація про курс валют", 28 | "content": { 29 | "application/json": { 30 | "schema": { 31 | "$ref": "#/components/schemas/CurrencyInfo" 32 | } 33 | } 34 | } 35 | }, 36 | "429": { 37 | "description": "Too many requests", 38 | "content": { 39 | "application/json": { 40 | "schema": { 41 | "$ref": "#/components/schemas/Error" 42 | } 43 | } 44 | } 45 | } 46 | } 47 | } 48 | }, 49 | "/personal/auth/registration": { 50 | "post": { 51 | "tags": [ 52 | "Авторизація та налаштування компанії" 53 | ], 54 | "summary": "Створення заявки", 55 | "description": "Створення заявки на авторизацію компанії банком", 56 | "parameters": [ 57 | { 58 | "name": "X-Time", 59 | "in": "header", 60 | "required": true, 61 | "description": "Поточний час у секундах (UTC)", 62 | "schema": { 63 | "type": "string", 64 | "example": 1554466347 65 | } 66 | }, 67 | { 68 | "name": "X-Sign", 69 | "in": "header", 70 | "required": true, 71 | "description": "Sign (X-Time | URL)", 72 | "schema": { 73 | "type": "string", 74 | "example": "K3cBBrlCJkei0/7zlP0L60zsNZgUFeC36r8ERmGvU/sxXspcy9G5B/Qq79AvzEakRKlNk1WcvkOgBcWf3DOyDQ==" 75 | } 76 | } 77 | ], 78 | "requestBody": { 79 | "required": true, 80 | "content": { 81 | "application/json": { 82 | "schema": { 83 | "$ref": "#/components/schemas/RegistrationKeyRequest" 84 | } 85 | } 86 | } 87 | }, 88 | "responses": { 89 | "200": { 90 | "description": "Результат створення заявки", 91 | "content": { 92 | "application/json": { 93 | "schema": { 94 | "$ref": "#/components/schemas/RegistrationKeyResponse" 95 | } 96 | } 97 | } 98 | }, 99 | "400": { 100 | "description": "Invalid request parameters", 101 | "content": { 102 | "application/json": { 103 | "schema": { 104 | "$ref": "#/components/schemas/Error" 105 | } 106 | } 107 | } 108 | }, 109 | "403": { 110 | "description": "Forbidden", 111 | "content": { 112 | "application/json": { 113 | "schema": { 114 | "$ref": "#/components/schemas/Error" 115 | } 116 | } 117 | } 118 | }, 119 | "429": { 120 | "description": "Too many requests", 121 | "content": { 122 | "application/json": { 123 | "schema": { 124 | "$ref": "#/components/schemas/Error" 125 | } 126 | } 127 | } 128 | } 129 | } 130 | } 131 | }, 132 | "/personal/auth/registration/status": { 133 | "post": { 134 | "tags": [ 135 | "Авторизація та налаштування компанії" 136 | ], 137 | "summary": "Статус заявки", 138 | "description": "Отримання статусу заявки на авторизацію компанії банком", 139 | "parameters": [ 140 | { 141 | "name": "X-Time", 142 | "in": "header", 143 | "required": true, 144 | "description": "Поточний час у секундах (UTC)", 145 | "schema": { 146 | "type": "string", 147 | "example": 1554466347 148 | } 149 | }, 150 | { 151 | "name": "X-Sign", 152 | "in": "header", 153 | "required": true, 154 | "description": "Sign (X-Time | URL)", 155 | "schema": { 156 | "type": "string", 157 | "example": "K3cBBrlCJkei0/7zlP0L60zsNZgUFeC36r8ERmGvU/sxXspcy9G5B/Qq79AvzEakRKlNk1WcvkOgBcWf3DOyDQ==" 158 | } 159 | } 160 | ], 161 | "requestBody": { 162 | "required": true, 163 | "content": { 164 | "application/json": { 165 | "schema": { 166 | "$ref": "#/components/schemas/RegistrationStatusRequest" 167 | } 168 | } 169 | } 170 | }, 171 | "responses": { 172 | "200": { 173 | "description": "Статус заявки на авторизацію компанії", 174 | "content": { 175 | "application/json": { 176 | "schema": { 177 | "$ref": "#/components/schemas/RegistrationStatusResponse" 178 | } 179 | } 180 | } 181 | }, 182 | "400": { 183 | "description": "Invalid request parameters", 184 | "content": { 185 | "application/json": { 186 | "schema": { 187 | "$ref": "#/components/schemas/Error" 188 | } 189 | } 190 | } 191 | }, 192 | "403": { 193 | "description": "Forbidden", 194 | "content": { 195 | "application/json": { 196 | "schema": { 197 | "$ref": "#/components/schemas/Error" 198 | } 199 | } 200 | } 201 | }, 202 | "429": { 203 | "description": "Too many requests", 204 | "content": { 205 | "application/json": { 206 | "schema": { 207 | "$ref": "#/components/schemas/Error" 208 | } 209 | } 210 | } 211 | } 212 | } 213 | } 214 | }, 215 | "/personal/corp/webhook": { 216 | "post": { 217 | "tags": [ 218 | "Авторизація та налаштування компанії" 219 | ], 220 | "summary": "Встановлення вебхуку", 221 | "description": "Встановлення вебхуку для отримання оновлень щодо платежів клієнтів", 222 | "parameters": [ 223 | { 224 | "name": "X-Key-Id", 225 | "in": "header", 226 | "required": true, 227 | "description": "ID ключа сервісу", 228 | "schema": { 229 | "type": "string", 230 | "example": "28a75537175a018645e6f8b14be7681791e701e0" 231 | } 232 | }, 233 | { 234 | "name": "X-Request-Id", 235 | "in": "header", 236 | "required": true, 237 | "description": "Request id", 238 | "schema": { 239 | "type": "string", 240 | "example": "uLkwh3NzFAfEkj7urj5C7AU_" 241 | } 242 | }, 243 | { 244 | "name": "X-Time", 245 | "in": "header", 246 | "required": true, 247 | "description": "Поточний час у секундах (UTC)", 248 | "schema": { 249 | "type": "string", 250 | "example": 1554466347 251 | } 252 | }, 253 | { 254 | "name": "X-Sign", 255 | "in": "header", 256 | "required": true, 257 | "description": "Sign (X-Time | URL)", 258 | "schema": { 259 | "type": "string", 260 | "example": "K3cBBrlCJkei0/7zlP0L60zsNZgUFeC36r8ERmGvU/sxXspcy9G5B/Qq79AvzEakRKlNk1WcvkOgBcWf3DOyDQ==" 261 | } 262 | } 263 | ], 264 | "requestBody": { 265 | "required": true, 266 | "content": { 267 | "application/json": { 268 | "schema": { 269 | "$ref": "#/components/schemas/SetWebhookRequest" 270 | } 271 | } 272 | } 273 | }, 274 | "responses": { 275 | "200": { 276 | "description": "Вебхук успішно встановлено або видалено", 277 | "content": { 278 | "application/json": { 279 | "schema": { 280 | "$ref": "#/components/schemas/EmptyResponse" 281 | } 282 | } 283 | } 284 | }, 285 | "400": { 286 | "description": "Invalid request parameters", 287 | "content": { 288 | "application/json": { 289 | "schema": { 290 | "$ref": "#/components/schemas/Error" 291 | } 292 | } 293 | } 294 | }, 295 | "403": { 296 | "description": "Forbidden", 297 | "content": { 298 | "application/json": { 299 | "schema": { 300 | "$ref": "#/components/schemas/Error" 301 | } 302 | } 303 | } 304 | }, 305 | "429": { 306 | "description": "Too many requests", 307 | "content": { 308 | "application/json": { 309 | "schema": { 310 | "$ref": "#/components/schemas/Error" 311 | } 312 | } 313 | } 314 | } 315 | } 316 | } 317 | }, 318 | "/personal/corp/settings": { 319 | "get": { 320 | "tags": [ 321 | "Авторизація та налаштування компанії" 322 | ], 323 | "summary": "Інформація про компанію", 324 | "description": "Дані компанії", 325 | "parameters": [ 326 | { 327 | "name": "X-Key-Id", 328 | "in": "header", 329 | "required": true, 330 | "description": "ID ключа сервісу", 331 | "schema": { 332 | "type": "string", 333 | "example": "28a75537175a018645e6f8b14be7681791e701e0" 334 | } 335 | }, 336 | { 337 | "name": "X-Request-Id", 338 | "in": "header", 339 | "required": true, 340 | "description": "Request id", 341 | "schema": { 342 | "type": "string", 343 | "example": "uLkwh3NzFAfEkj7urj5C7AU_" 344 | } 345 | }, 346 | { 347 | "name": "X-Time", 348 | "in": "header", 349 | "required": true, 350 | "description": "Поточний час у секундах (UTC)", 351 | "schema": { 352 | "type": "string", 353 | "example": 1554466347 354 | } 355 | }, 356 | { 357 | "name": "X-Sign", 358 | "in": "header", 359 | "required": true, 360 | "description": "Sign (X-Time | URL)", 361 | "schema": { 362 | "type": "string", 363 | "example": "K3cBBrlCJkei0/7zlP0L60zsNZgUFeC36r8ERmGvU/sxXspcy9G5B/Qq79AvzEakRKlNk1WcvkOgBcWf3DOyDQ==" 364 | } 365 | } 366 | ], 367 | "responses": { 368 | "200": { 369 | "description": "Дані компанії", 370 | "content": { 371 | "application/json": { 372 | "schema": { 373 | "$ref": "#/components/schemas/SettingsResponse" 374 | } 375 | } 376 | } 377 | }, 378 | "400": { 379 | "description": "Invalid request parameters", 380 | "content": { 381 | "application/json": { 382 | "schema": { 383 | "$ref": "#/components/schemas/Error" 384 | } 385 | } 386 | } 387 | }, 388 | "403": { 389 | "description": "Forbidden", 390 | "content": { 391 | "application/json": { 392 | "schema": { 393 | "$ref": "#/components/schemas/Error" 394 | } 395 | } 396 | } 397 | }, 398 | "429": { 399 | "description": "Too many requests", 400 | "content": { 401 | "application/json": { 402 | "schema": { 403 | "$ref": "#/components/schemas/Error" 404 | } 405 | } 406 | } 407 | } 408 | } 409 | } 410 | }, 411 | "/personal/auth/request": { 412 | "post": { 413 | "tags": [ 414 | "Клієнтські персональні дані" 415 | ], 416 | "summary": "Ініціалізія доступу", 417 | "description": "Створення запиту на доступ до клієнтських даних", 418 | "parameters": [ 419 | { 420 | "name": "X-Key-Id", 421 | "in": "header", 422 | "required": true, 423 | "description": "ID ключа сервісу", 424 | "schema": { 425 | "type": "string", 426 | "example": "28a75537175a018645e6f8b14be7681791e701e0" 427 | } 428 | }, 429 | { 430 | "name": "X-Time", 431 | "in": "header", 432 | "required": true, 433 | "description": "Поточний час у секундах (UTC)", 434 | "schema": { 435 | "type": "string", 436 | "example": 1554466347 437 | } 438 | }, 439 | { 440 | "name": "X-Sign", 441 | "in": "header", 442 | "required": true, 443 | "description": "Sign (X-Time | URL)", 444 | "schema": { 445 | "type": "string", 446 | "example": "K3cBBrlCJkei0/7zlP0L60zsNZgUFeC36r8ERmGvU/sxXspcy9G5B/Qq79AvzEakRKlNk1WcvkOgBcWf3DOyDQ==" 447 | } 448 | }, 449 | { 450 | "name": "X-Callback", 451 | "in": "header", 452 | "required": false, 453 | "description": "URL колбека, який буде запрошено сервісом, коли клієнт підтвердить надання доступу (GET запит з хедером X-Request-Id)", 454 | "schema": { 455 | "type": "string", 456 | "example": "https://example.com/some_random_data_for_security" 457 | } 458 | } 459 | ], 460 | "responses": { 461 | "200": { 462 | "description": "Інформація про новий запит", 463 | "content": { 464 | "application/json": { 465 | "schema": { 466 | "$ref": "#/components/schemas/TokenRequest" 467 | } 468 | } 469 | } 470 | }, 471 | "400": { 472 | "description": "Invalid request parameters", 473 | "content": { 474 | "application/json": { 475 | "schema": { 476 | "$ref": "#/components/schemas/Error" 477 | } 478 | } 479 | } 480 | }, 481 | "403": { 482 | "description": "Forbidden", 483 | "content": { 484 | "application/json": { 485 | "schema": { 486 | "$ref": "#/components/schemas/Error" 487 | } 488 | } 489 | } 490 | }, 491 | "429": { 492 | "description": "Too many requests", 493 | "content": { 494 | "application/json": { 495 | "schema": { 496 | "$ref": "#/components/schemas/Error" 497 | } 498 | } 499 | } 500 | } 501 | } 502 | }, 503 | "get": { 504 | "tags": [ 505 | "Клієнтські персональні дані" 506 | ], 507 | "summary": "Перевірка доступу", 508 | "description": "Перевірка статусу запиту на доступ до клієнтських даних", 509 | "parameters": [ 510 | { 511 | "name": "X-Key-Id", 512 | "in": "header", 513 | "required": true, 514 | "description": "ID ключа сервісу", 515 | "schema": { 516 | "type": "string", 517 | "example": "28a75537175a018645e6f8b14be7681791e701e0" 518 | } 519 | }, 520 | { 521 | "name": "X-Time", 522 | "in": "header", 523 | "required": true, 524 | "description": "Поточний час у секундах (UTC)", 525 | "schema": { 526 | "type": "string", 527 | "example": 1554466347 528 | } 529 | }, 530 | { 531 | "name": "X-Request-Id", 532 | "in": "header", 533 | "required": true, 534 | "description": "Request id", 535 | "schema": { 536 | "type": "string", 537 | "example": "uLkwh3NzFAfEkj7urj5C7AU_" 538 | } 539 | }, 540 | { 541 | "name": "X-Sign", 542 | "in": "header", 543 | "required": true, 544 | "description": "Sign (X-Time | X-Request-Id | URL)", 545 | "schema": { 546 | "type": "string", 547 | "example": "K3cBBrlCJkei0/7zlP0L60zsNZgUFeC36r8ERmGvU/sxXspcy9G5B/Qq79AvzEakRKlNk1WcvkOgBcWf3DOyDQ==" 548 | } 549 | } 550 | ], 551 | "responses": { 552 | "200": { 553 | "description": "Access granted", 554 | "content": { 555 | "application/json": { 556 | "schema": { 557 | "type": "object", 558 | "example": {} 559 | } 560 | } 561 | } 562 | }, 563 | "400": { 564 | "description": "Invalid request parameters", 565 | "content": { 566 | "application/json": { 567 | "schema": { 568 | "$ref": "#/components/schemas/Error" 569 | } 570 | } 571 | } 572 | }, 573 | "401": { 574 | "description": "Request is unauthorized yet", 575 | "content": { 576 | "application/json": { 577 | "schema": { 578 | "$ref": "#/components/schemas/Error" 579 | } 580 | } 581 | } 582 | }, 583 | "403": { 584 | "description": "Forbidden", 585 | "content": { 586 | "application/json": { 587 | "schema": { 588 | "$ref": "#/components/schemas/Error" 589 | } 590 | } 591 | } 592 | }, 593 | "404": { 594 | "description": "Request is not exist", 595 | "content": { 596 | "application/json": { 597 | "schema": { 598 | "$ref": "#/components/schemas/Error" 599 | } 600 | } 601 | } 602 | }, 603 | "429": { 604 | "description": "Too many requests", 605 | "content": { 606 | "application/json": { 607 | "schema": { 608 | "$ref": "#/components/schemas/Error" 609 | } 610 | } 611 | } 612 | } 613 | } 614 | } 615 | }, 616 | "/personal/client-info": { 617 | "get": { 618 | "tags": [ 619 | "Клієнтські персональні дані" 620 | ], 621 | "summary": "Інформація про клієнта", 622 | "description": "Отримання інформації про клієнта та переліку його рахунків", 623 | "parameters": [ 624 | { 625 | "name": "X-Key-Id", 626 | "in": "header", 627 | "required": true, 628 | "description": "ID ключа сервісу", 629 | "schema": { 630 | "type": "string", 631 | "example": "28a75537175a018645e6f8b14be7681791e701e0" 632 | } 633 | }, 634 | { 635 | "name": "X-Time", 636 | "in": "header", 637 | "required": true, 638 | "description": "Поточний час у секундах (UTC)", 639 | "schema": { 640 | "type": "string", 641 | "example": 1554466347 642 | } 643 | }, 644 | { 645 | "name": "X-Request-Id", 646 | "in": "header", 647 | "required": true, 648 | "description": "Request id", 649 | "schema": { 650 | "type": "string", 651 | "example": "uLkwh3NzFAfEkj7urj5C7AU_" 652 | } 653 | }, 654 | { 655 | "name": "X-Sign", 656 | "in": "header", 657 | "required": true, 658 | "description": "Sign (X-Time | X-Request-Id | URL)", 659 | "schema": { 660 | "type": "string", 661 | "example": "K3cBBrlCJkei0/7zlP0L60zsNZgUFeC36r8ERmGvU/sxXspcy9G5B/Qq79AvzEakRKlNk1WcvkOgBcWf3DOyDQ==" 662 | } 663 | } 664 | ], 665 | "responses": { 666 | "200": { 667 | "description": "Statement list", 668 | "content": { 669 | "application/json": { 670 | "schema": { 671 | "$ref": "#/components/schemas/UserInfo" 672 | } 673 | } 674 | } 675 | }, 676 | "400": { 677 | "description": "Invalid request parameters", 678 | "content": { 679 | "application/json": { 680 | "schema": { 681 | "$ref": "#/components/schemas/Error" 682 | } 683 | } 684 | } 685 | }, 686 | "401": { 687 | "description": "Request is unauthorized yet", 688 | "content": { 689 | "application/json": { 690 | "schema": { 691 | "$ref": "#/components/schemas/Error" 692 | } 693 | } 694 | } 695 | }, 696 | "403": { 697 | "description": "Forbidden", 698 | "content": { 699 | "application/json": { 700 | "schema": { 701 | "$ref": "#/components/schemas/Error" 702 | } 703 | } 704 | } 705 | }, 706 | "404": { 707 | "description": "Data is not exist", 708 | "content": { 709 | "application/json": { 710 | "schema": { 711 | "$ref": "#/components/schemas/Error" 712 | } 713 | } 714 | } 715 | }, 716 | "429": { 717 | "description": "Too many requests", 718 | "content": { 719 | "application/json": { 720 | "schema": { 721 | "$ref": "#/components/schemas/Error" 722 | } 723 | } 724 | } 725 | } 726 | } 727 | } 728 | }, 729 | "/personal/statement/{account}/{from}/{to}": { 730 | "get": { 731 | "tags": [ 732 | "Клієнтські персональні дані" 733 | ], 734 | "summary": "Виписка", 735 | "description": "Отримання виписки за час від {from} до {to} часу в секундах в форматі Unix time. Максимальний час, за який можливо отримати виписку — 31 доба + 1 година (2682000 секунд).\n\nОбмеження на використання функції — не частіше ніж 1 раз на 60 секунд.\n\nПовертає 500 транзакцій з кінця, тобто від часу to до from. Якщо кількість транзакцій = 500, потрібно зробити ще один запит, зменшивши час to до часу останнього платежу, з відповіді. Якщо знову кількість транзакцій = 500, то виконуєте запити до того часу, поки кількість транзакцій не буде < 500. Відповідно, якщо кількість транзакцій < 500, то вже отримано всі платежі за вказаний період.", 736 | "parameters": [ 737 | { 738 | "name": "X-Key-Id", 739 | "in": "header", 740 | "required": true, 741 | "description": "ID ключа сервісу", 742 | "schema": { 743 | "type": "string", 744 | "example": "28a75537175a018645e6f8b14be7681791e701e0" 745 | } 746 | }, 747 | { 748 | "name": "X-Time", 749 | "in": "header", 750 | "required": true, 751 | "description": "Поточний час у секундах (UTC)", 752 | "schema": { 753 | "type": "string", 754 | "example": 1554466347 755 | } 756 | }, 757 | { 758 | "name": "X-Request-Id", 759 | "in": "header", 760 | "required": true, 761 | "description": "Request id", 762 | "schema": { 763 | "type": "string", 764 | "example": "uLkwh3NzFAfEkj7urj5C7AU_" 765 | } 766 | }, 767 | { 768 | "name": "X-Sign", 769 | "in": "header", 770 | "required": true, 771 | "description": "Sign (X-Time | X-Request-Id | URL)", 772 | "schema": { 773 | "type": "string", 774 | "example": "K3cBBrlCJkei0/7zlP0L60zsNZgUFeC36r8ERmGvU/sxXspcy9G5B/Qq79AvzEakRKlNk1WcvkOgBcWf3DOyDQ==" 775 | } 776 | }, 777 | { 778 | "name": "account", 779 | "in": "path", 780 | "required": true, 781 | "description": "Account id (client card id), 0 - default UAH", 782 | "schema": { 783 | "type": "string", 784 | "example": 0 785 | } 786 | }, 787 | { 788 | "name": "from", 789 | "description": "Statement start time", 790 | "in": "path", 791 | "required": true, 792 | "schema": { 793 | "type": "string", 794 | "example": 1546304461 795 | } 796 | }, 797 | { 798 | "name": "to", 799 | "description": "Statement end time (if not exist, will be using current time)", 800 | "in": "path", 801 | "required": false, 802 | "schema": { 803 | "type": "string", 804 | "example": 1546306461 805 | } 806 | } 807 | ], 808 | "responses": { 809 | "200": { 810 | "description": "Statement list", 811 | "content": { 812 | "application/json": { 813 | "schema": { 814 | "$ref": "#/components/schemas/StatementItems" 815 | } 816 | } 817 | } 818 | }, 819 | "400": { 820 | "description": "Invalid request parameters", 821 | "content": { 822 | "application/json": { 823 | "schema": { 824 | "$ref": "#/components/schemas/Error" 825 | } 826 | } 827 | } 828 | }, 829 | "401": { 830 | "description": "Request is unauthorized yet", 831 | "content": { 832 | "application/json": { 833 | "schema": { 834 | "$ref": "#/components/schemas/Error" 835 | } 836 | } 837 | } 838 | }, 839 | "403": { 840 | "description": "Forbidden", 841 | "content": { 842 | "application/json": { 843 | "schema": { 844 | "$ref": "#/components/schemas/Error" 845 | } 846 | } 847 | } 848 | }, 849 | "404": { 850 | "description": "Data is not exist", 851 | "content": { 852 | "application/json": { 853 | "schema": { 854 | "$ref": "#/components/schemas/Error" 855 | } 856 | } 857 | } 858 | }, 859 | "429": { 860 | "description": "Too many requests", 861 | "content": { 862 | "application/json": { 863 | "schema": { 864 | "$ref": "#/components/schemas/Error" 865 | } 866 | } 867 | } 868 | } 869 | } 870 | } 871 | } 872 | }, 873 | "components": { 874 | "schemas": { 875 | "TokenRequest": { 876 | "type": "object", 877 | "description": null, 878 | "properties": { 879 | "tokenRequestId": { 880 | "description": "ID токена доступу", 881 | "type": "string", 882 | "example": "uLkwh3NzFAfEkj7urj5C7AU_" 883 | }, 884 | "acceptUrl": { 885 | "description": "URL який потрібно відобразити клієнту у вигляді QR або редиректнути на сторінку, якщо клієнт використовує смартфон/планшет", 886 | "type": "string", 887 | "example": "https://mbnk.app/auth/uLkwh3NzFAfEkj7urj5C7AU_" 888 | } 889 | } 890 | }, 891 | "UserInfo": { 892 | "type": "object", 893 | "description": "Опис клієнта та його рахунків. Якщо клієнт не надав права читати його персональні данні, повернеться тільки перелік рахунків.", 894 | "properties": { 895 | "clientId": { 896 | "description": "Ідентифікатор клієнта (зівпадає з id для send.monobank.ua)", 897 | "type": "string", 898 | "example": "3MSaMMtczs" 899 | }, 900 | "name": { 901 | "description": "Ім'я клієнта", 902 | "type": "string", 903 | "example": "Мазепа Іван" 904 | }, 905 | "webHookUrl": { 906 | "description": "URL для надсиляння подій по зміні балансу рахунку", 907 | "type": "string", 908 | "example": "https://mysomesite.copm/some_random_data_for_security" 909 | }, 910 | "permissions": { 911 | "description": "Перелік прав, які які надає сервіс (1 літера на 1 permission).", 912 | "type": "string", 913 | "example": "psf" 914 | }, 915 | "accounts": { 916 | "type": "array", 917 | "description": "Перелік доступних рахунків", 918 | "items": { 919 | "type": "object", 920 | "properties": { 921 | "id": { 922 | "type": "string", 923 | "description": "Ідентифікатор рахунку", 924 | "example": "kKGVoZuHWzqVoZuH" 925 | }, 926 | "sendId": { 927 | "type": "string", 928 | "description": "Ідентифікатор для сервісу https://send.monobank.ua/{sendId}", 929 | "example": "uHWzqVoZuH" 930 | }, 931 | "balance": { 932 | "type": "number", 933 | "format": "int64", 934 | "description": "Баланс рахунку в мінімальних одиницях валюти (копійках, центах)", 935 | "example": 10000000 936 | }, 937 | "creditLimit": { 938 | "type": "number", 939 | "format": "int64", 940 | "description": "Кредитний ліміт", 941 | "example": 10000000 942 | }, 943 | "type": { 944 | "type": "string", 945 | "description": "Тип рахунку", 946 | "enum": [ 947 | "black", 948 | "white", 949 | "platinum", 950 | "iron", 951 | "fop", 952 | "yellow", 953 | "eAid" 954 | ], 955 | "example": "black" 956 | }, 957 | "currencyCode": { 958 | "type": "number", 959 | "format": "int32", 960 | "description": "Код валюти рахунку відповідно ISO 4217", 961 | "example": 980 962 | }, 963 | "cashbackType": { 964 | "type": "string", 965 | "description": "Тип кешбеку який нараховується на рахунок", 966 | "enum": [ 967 | "None", 968 | "UAH", 969 | "Miles" 970 | ], 971 | "example": "UAH" 972 | }, 973 | "maskedPan": { 974 | "type": "array", 975 | "description": "Перелік замаскованних номерів карт (більше одного може бути у преміальних карт)", 976 | "example": [ 977 | "537541******1234" 978 | ] 979 | }, 980 | "iban": { 981 | "type": "string", 982 | "description": "IBAN рахунку", 983 | "example": "UA733220010000026201234567890" 984 | } 985 | } 986 | } 987 | } 988 | } 989 | }, 990 | "StatementItems": { 991 | "type": "array", 992 | "description": "Перелік транзакцій за вказанний час", 993 | "items": { 994 | "type": "object", 995 | "properties": { 996 | "id": { 997 | "type": "string", 998 | "example": "ZuHWzqkKGVo=", 999 | "description": "Унікальний id транзакції" 1000 | }, 1001 | "time": { 1002 | "type": "number", 1003 | "format": "int64", 1004 | "example": 1554466347, 1005 | "description": "Час транзакції в секундах в форматі Unix time" 1006 | }, 1007 | "description": { 1008 | "type": "string", 1009 | "example": "Покупка щастя", 1010 | "description": "Опис транзакцій" 1011 | }, 1012 | "mcc": { 1013 | "type": "number", 1014 | "format": "int32", 1015 | "example": 7997, 1016 | "description": "Код типу транзакції (Merchant Category Code), відповідно ISO 18245" 1017 | }, 1018 | "originalMcc": { 1019 | "type": "number", 1020 | "format": "int32", 1021 | "example": 7997, 1022 | "description": "Оригінальний код типу транзакції (Merchant Category Code), відповідно ISO 18245" 1023 | }, 1024 | "hold": { 1025 | "type": "boolean", 1026 | "example": false, 1027 | "description": "Статус блокування суми (детальніше у [wiki](https://en.wikipedia.org/wiki/Authorization_hold))" 1028 | }, 1029 | "amount": { 1030 | "type": "number", 1031 | "format": "int64", 1032 | "example": -95000, 1033 | "description": "Сума у валюті рахунку в мінімальних одиницях валюти (копійках, центах)" 1034 | }, 1035 | "operationAmount": { 1036 | "type": "number", 1037 | "format": "int64", 1038 | "example": -95000, 1039 | "description": "Сума у валюті транзакції в мінімальних одиницях валюти (копійках, центах)" 1040 | }, 1041 | "currencyCode": { 1042 | "type": "number", 1043 | "format": "int32", 1044 | "example": 980, 1045 | "description": "Код валюти рахунку відповідно ISO 4217" 1046 | }, 1047 | "commissionRate": { 1048 | "type": "number", 1049 | "format": "int64", 1050 | "example": 0, 1051 | "description": "Розмір комісії в мінімальних одиницях валюти (копійках, центах)" 1052 | }, 1053 | "cashbackAmount": { 1054 | "type": "number", 1055 | "format": "int64", 1056 | "example": 19000, 1057 | "description": "Розмір кешбеку в мінімальних одиницях валюти (копійках, центах)" 1058 | }, 1059 | "balance": { 1060 | "type": "number", 1061 | "format": "int64", 1062 | "example": 10050000, 1063 | "description": "Баланс рахунку в мінімальних одиницях валюти (копійках, центах)" 1064 | }, 1065 | "comment": { 1066 | "type": "string", 1067 | "example": "За каву", 1068 | "description": "Коментар до переказу, уведений користувачем. Якщо не вказаний, поле буде відсутнім" 1069 | }, 1070 | "receiptId": { 1071 | "type": "string", 1072 | "example": "XXXX-XXXX-XXXX-XXXX", 1073 | "description": "Номер квитанции для check.gov.ua. Поле може бути відсутнім" 1074 | }, 1075 | "counterEdrpou": { 1076 | "type": "string", 1077 | "example": "3096889974", 1078 | "description": "ЄДРПОУ контрагента, присутній лише для елементів виписки рахунків ФОП" 1079 | }, 1080 | "counterIban": { 1081 | "type": "string", 1082 | "example": "UA898999980000355639201001404", 1083 | "description": "IBAN контрагента, присутній лише для елементів виписки рахунків ФОП" 1084 | }, 1085 | "counterName": { 1086 | "type": "string", 1087 | "example": "ТОВАРИСТВО З ОБМЕЖЕНОЮ ВІДПОВІДАЛЬНІСТЮ «ВОРОНА»", 1088 | "description": "Найменування контрагента" 1089 | } 1090 | } 1091 | } 1092 | }, 1093 | "CurrencyInfo": { 1094 | "type": "array", 1095 | "description": "Перелік курсів. Кожна валютна пара може мати одне і більше полів з rateSell, rateBuy, rateCross.", 1096 | "items": { 1097 | "type": "object", 1098 | "properties": { 1099 | "currencyCodeA": { 1100 | "type": "number", 1101 | "format": "int32", 1102 | "example": 840 1103 | }, 1104 | "currencyCodeB": { 1105 | "type": "number", 1106 | "format": "int32", 1107 | "example": 980 1108 | }, 1109 | "date": { 1110 | "type": "number", 1111 | "format": "int64", 1112 | "example": 1552392228 1113 | }, 1114 | "rateSell": { 1115 | "type": "number", 1116 | "format": "float", 1117 | "example": 27 1118 | }, 1119 | "rateBuy": { 1120 | "type": "number", 1121 | "format": "float", 1122 | "example": 27.2 1123 | }, 1124 | "rateCross": { 1125 | "type": "number", 1126 | "format": "float", 1127 | "example": 27.1 1128 | } 1129 | } 1130 | } 1131 | }, 1132 | "RegistrationKeyRequest": { 1133 | "type": "object", 1134 | "required": [ 1135 | "pubkey", 1136 | "name", 1137 | "description", 1138 | "contactPerson", 1139 | "phone", 1140 | "email", 1141 | "logo" 1142 | ], 1143 | "properties": { 1144 | "pubkey": { 1145 | "type": "string", 1146 | "description": "Файл PEM із відкритим ключем secp256k1 у форматі base64", 1147 | "example": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZZd0VBWUhLb1pJemow..." 1148 | }, 1149 | "name": { 1150 | "type": "string", 1151 | "description": "Назва компанії", 1152 | "example": "ТОВ \"Ворона\"" 1153 | }, 1154 | "description": { 1155 | "type": "string", 1156 | "description": "Опис послуг компанії та мета використання апі", 1157 | "example": "Ми робимо найрозумніший PFM з усіх можливих і нам потрібен доступ до виписка користувача, щоб створювати красиву статистику" 1158 | }, 1159 | "contactPerson": { 1160 | "type": "string", 1161 | "description": "Контактна особа", 1162 | "example": "Роман Шевченко" 1163 | }, 1164 | "phone": { 1165 | "type": "string", 1166 | "description": "Телефон контактної особи", 1167 | "example": "380671234567" 1168 | }, 1169 | "email": { 1170 | "type": "string", 1171 | "description": "Email контактної особи", 1172 | "example": "etс@example.com" 1173 | }, 1174 | "logo": { 1175 | "type": "string", 1176 | "description": "Файл із зображенням логотипу компанії у форматі base64", 1177 | "example": "iVBORw0KGgoAAAANSUhEUgAAAUAAAACECAYAAADhnvK8AAAapElEQVR42..." 1178 | } 1179 | } 1180 | }, 1181 | "RegistrationKeyResponse": { 1182 | "type": "object", 1183 | "properties": { 1184 | "status": { 1185 | "type": "string", 1186 | "description": "Статус отримання заявки", 1187 | "example": "New" 1188 | } 1189 | } 1190 | }, 1191 | "RegistrationStatusRequest": { 1192 | "type": "object", 1193 | "required": [ 1194 | "pubkey" 1195 | ], 1196 | "properties": { 1197 | "pubkey": { 1198 | "type": "string", 1199 | "description": "Файл PEM із відкритим ключом secp256k1 у форматі base64", 1200 | "example": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZZd0VBWUhLb1pJemow..." 1201 | } 1202 | } 1203 | }, 1204 | "RegistrationStatusResponse": { 1205 | "type": "object", 1206 | "required": [ 1207 | "status", 1208 | "keyId" 1209 | ], 1210 | "properties": { 1211 | "status": { 1212 | "type": "string", 1213 | "description": "Статус заявки (New | Declined | Approved)", 1214 | "example": "Approved" 1215 | }, 1216 | "keyId": { 1217 | "type": "string", 1218 | "description": "ID ключа сервісу" 1219 | } 1220 | } 1221 | }, 1222 | "SettingsResponse": { 1223 | "type": "object", 1224 | "required": [ 1225 | "id", 1226 | "pubkey", 1227 | "name", 1228 | "permission", 1229 | "logo" 1230 | ], 1231 | "properties": { 1232 | "pubkey": { 1233 | "type": "string", 1234 | "description": "Файл PEM із відкритим ключем secp256k1 у форматі base64", 1235 | "example": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZZd0VBWUhLb1pJemow..." 1236 | }, 1237 | "name": { 1238 | "type": "string", 1239 | "description": "Назва компанії", 1240 | "example": "Компанія" 1241 | }, 1242 | "permission": { 1243 | "description": "Перелік прав, які які надає сервіс (1 літера на 1 permission).", 1244 | "type": "string", 1245 | "example": "psf" 1246 | }, 1247 | "logo": { 1248 | "type": "string", 1249 | "description": "Файл із зображенням логотипу компанії у форматі base64", 1250 | "example": "iVBORw0KGgoAAAANSUhEUgAAAUAAAACECAYAAADhnvK8AAAapElEQVR42..." 1251 | }, 1252 | "webhook": { 1253 | "type": "string", 1254 | "description": "Адреса для CallBack (POST) – на цю адресу будуть надісилатись дані по транзакціям", 1255 | "example": "https://example.com/mono/corp/webhook/maybesomegibberishuniquestringbutnotnecessarily" 1256 | } 1257 | } 1258 | }, 1259 | "SetWebhookRequest": { 1260 | "type": "object", 1261 | "properties": { 1262 | "webHookUrl": { 1263 | "type": "string", 1264 | "description": "Адреса для CallBack (POST) – на цю адресу буде надіслано дані по транзакціям. Під час виклику апі буде виконано тестовий POST-запит за цією адресою. Якщо на нього не буде відповіді 200 ОК, виклик апі завершиться помилкою.", 1265 | "example": "https://example.com/mono/corp/webhook/maybesomegibberishuniquestringbutnotnecessarily" 1266 | } 1267 | } 1268 | }, 1269 | "EmptyResponse": { 1270 | "type": "object" 1271 | }, 1272 | "Error": { 1273 | "type": "object", 1274 | "properties": { 1275 | "errorDescription": { 1276 | "type": "string", 1277 | "description": "Опис помилки" 1278 | } 1279 | } 1280 | } 1281 | } 1282 | }, 1283 | "tags": [ 1284 | { 1285 | "name": "Публічні дані", 1286 | "description": "Загальна інформація, що надається без авторизації." 1287 | }, 1288 | { 1289 | "name": "Авторизація та налаштування компанії", 1290 | "description": "Доступ до клієнтських персональних даних надається тільки авторизованим банком компаніям. Для отримання доступу необхідно створити заявку на авторизацію, а також надати інформацію про сервіс." 1291 | }, 1292 | { 1293 | "name": "Клієнтські персональні дані", 1294 | "description": "Інформація, що надається тільки за згодою клієнта та тільки авторизованим банком компаніям." 1295 | } 1296 | ] 1297 | } -------------------------------------------------------------------------------- /specs/chast.json: -------------------------------------------------------------------------------- 1 | { 2 | "openapi": "3.0.0", 3 | "servers": [ 4 | { 5 | "url": "/" 6 | } 7 | ], 8 | "info": { 9 | "description": "# АПІ здійснення угоди з Покупки Частинами\nСхема взаємодії під час оплати в магазині:\n* Клієнт вибирає товар, який хоче придбати\n* Продавець формує кошик платежів клієнта\n* Касир оформлює Покупку Частинами для Клієнта\n* Магазин надсилає запит до банку, використовуючи сервіс [Подання заявки на оплату частинами](/api-docs/chast/servisy/robota-z-zaiavkamy/post--api--order--create)\n* Банк приймає заявку на створення платежу за програмою Покупка Частинами\n* Банк ухвалює рішення на оформлення розстрочки протягом 20 секунд і надсилає в мобільний застосунок Push клієнту з інформацією про розстрочку за програмою Покупка Частинами для підтвердження\n* Клієнт ознайомлюється з умовами розстрочки та підтверджує відкриття\n* Банк надсилає Магазину [відповідь(Callback)](/api-docs/chast/servisy/robota-z-zaiavkamy/post--api--order--state) з результатом оформлення клієнтом Покупки Частинами\n* Касир друкує чек\n* Магазин завершує замовлення\n* Магазин інформує банк про результат завершення операції\n * [Проведено видачу товару клієнтові](/api-docs/chast/servisy/robota-z-zaiavkamy/post--api--order--confirm)\n * [Товар клієнтові не видано](/api-docs/chast/servisy/robota-z-zaiavkamy/post--api--order--reject)\n\n## Поширені запитання\n\n * Коли магазин передає товар клієнтові?\n * Після набуття статусу WAITING_FOR_STORE_CONFIRM\n \n\n * Чи є готові модулі сервісу Покупка Частинами?\n * Так, ми знаємо про кілька готових модулів, але звертаємо увагу, що модулі розроблені сторонніми розробниками та не підтримуються Банком.\n Встановлення та використання на ваш страх та ризик. [opencard](https://opencartforum.com/files/file/6556-modul-platyozhnoy-sistemy-monobank-monobank-universal-bank/)\n

Авторизація (підпис запитів / відповідей)

Усі запити та відповіді до АПІ мають бути підписані.\nПідпис передається в `header` параметрі `signature`\nФормула підпису:\n\n```\nencodeBase64(\n HmacSHA256(\n getBytesUTF-8(\n request_body\n )\n )\n)\n```\n\n* encodeBase64 — функція перетворення бінарних даних у Base64 формат [wiki](https://ru.wikipedia.org/wiki/Base64),\n* HmacSHA256 — функція обчислення хешу підпису даних [wiki](https://ru.wikipedia.org/wiki/HMAC),\n* getBytesUTF-8 — функція переведення рядка в бінарний вигляд (у кодуванні UTF-8) [wiki](https://ru.wikipedia.org/wiki/UTF-8),\n* request_body — тіло запиту (або відповіді)\n\nПриклад підпису мовою `java`:\n\n```java\n\nimport javax.crypto.Mac;\nimport javax.crypto.spec.SecretKeySpec;\nimport javax.xml.bind.DatatypeConverter;\n\nclass Main {\n public static void main(String[] args) throws Exception {\n String key = \"the shared secret key here\";\n String message = \"the message to hash here\";\n \n Mac hasher = Mac.getInstance(\"HmacSHA256\");\n hasher.init(new SecretKeySpec(key.getBytes(), \"HmacSHA256\"));\n \n byte[] hash = hasher.doFinal(message.getBytes());\n \n // to base64\n DatatypeConverter.printBase64Binary(hash);\n }\n}\n```\n\nПриклад підпису на `bash`\n\n```bash\n\nreadonly PRIVATE_KEY='the shared secret key here'\nreadonly REQUEST='the message to hash here'\nSIGNATURE=$(echo -n \"$REQUEST\" | openssl dgst -sha256 -hmac \"$PRIVATE_KEY\" -binary | base64)\n\necho \"$SIGNATURE\"\n```\n\nПриклад підпису на `php`\n\n```php\n\n\n```\n\nПовний приклад мовою java виклику сервісу:\n\n```java\n\nimport javax.crypto.Mac;\nimport javax.crypto.spec.SecretKeySpec;\nimport java.io.*;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\nimport java.nio.charset.StandardCharsets;\nimport java.security.InvalidKeyException;\nimport java.security.NoSuchAlgorithmException;\nimport java.util.Base64;\n\npublic class Main {\n\n private static final String STORE_ID = \"test_store_with_confirm\";\n private static final String STORE_SECRET = \"secret_98765432--123-123\";\n\n public static void main(String[] args) throws Exception {\n new Main().signAndMakeRequest();\n }\n\n private void signAndMakeRequest() throws Exception {\n final String request = \"{\\\"phone\\\": \\\"+380000000001\\\"}\";\n String sign = signRequest(request);\n\n final String serviceUrl = \"https://u2-demo-ext.mono.st4g3.com/api/client/validate\";\n URL url = new URL(serviceUrl);\n HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();\n try {\n urlConnection.addRequestProperty(\"store-id\", STORE_ID);\n urlConnection.addRequestProperty(\"signature\", sign);\n urlConnection.addRequestProperty(\"Content-Type\", \"application/json\");\n urlConnection.addRequestProperty(\"Accept\", \"application/json\");\n urlConnection.setDoOutput(true);\n try (OutputStream outputStream = urlConnection.getOutputStream()) {\n outputStream.write(request.getBytes(StandardCharsets.UTF_8));\n }\n\n int responseCode = urlConnection.getResponseCode();\n String responseBody = readResponseBody(urlConnection);\n System.out.println(\"Service response code: \" + responseCode + \". Response body: \" + responseBody);\n } finally {\n urlConnection.disconnect();\n }\n }\n\n private String signRequest(String request) throws NoSuchAlgorithmException, InvalidKeyException {\n final String ALGORITHM = \"HmacSHA256\";\n Mac mac = Mac.getInstance(ALGORITHM);\n mac.init(new SecretKeySpec(STORE_SECRET.getBytes(StandardCharsets.UTF_8), ALGORITHM));\n byte[] hash = mac.doFinal(request.getBytes(StandardCharsets.UTF_8));\n Base64.Encoder encoder = Base64.getEncoder();\n byte[] base64Hash = encoder.encode(hash);\n return new String(base64Hash, StandardCharsets.UTF_8);\n }\n\n private String readResponseBody(HttpURLConnection urlConnection) throws IOException {\n try (InputStream inputStream = urlConnection.getInputStream();\n InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);\n StringWriter sw = new StringWriter()) {\n\n char[] buffer = new char[256];\n int n = 0;\n while (-1 != (n = reader.read(buffer))) {\n sw.write(buffer, 0, n);\n }\n return sw.toString();\n }\n }\n}\n```\n\n## Тестова платформа\nТестова платформа містить тільки 1 магазин і віддає тільки заздалегідь підготовлені ситуації.\nstore-id: `test_store_with_confirm`\nключ: `secret_98765432--123-123`\nlink: https://u2-demo-ext.mono.st4g3.com\n\nМожливі ситуації:\n * Успішне підтвердження заявки. Для цієї ситуації потрібно передати номер телефону клієнта, що закінчується на 1.\n У цьому випадку через 5 секунд буде кинуто callback про успішне затвердження заявки.\n * Заявка, що очікує підтвердження від клієнта. Для цієї ситуації необхідно передати номер телефону клієнта, що закінчується на 2.\n * Помилка підтвердження заявки через недостатній ліміт у клієнта.\n Для цієї ситуації потрібно передати номер телефону клієнта, що закінчується на 3.\n У цьому випадку через 5 секунд буде кинуто callback про відхилення заявки.\n * Заявка підтверджена клієнтом та очікує на підтвердження від магазину (тільки для магазину з двотактовим підтвердженням).\n Для цієї ситуації необхідно передати номер телефону клієнта, що закінчується на 4.\n \n \n## Предпрод\nТестування на передпроді включає в себе взаємодію API та мобільного застосунку монобанк.\nРекомендується після налаштування запитів на пісочниці.\n\nДля тестування на передпроді використовуйте:\n\nstore-id: `COMFY` \nключ: `sign_key` \nlink: https://u2-ext.mono.st4g3.com\n\nУвага: умови для заявки:\n\nномер телефону покупця +380951000001\nкількість частин - 10 \nперед тестуванням попередити REDACTED_NAME_SURNAME у телеграмі\n\n\n## Production\nБойове посилання: https://u2.monobank.com.ua\n\nВикористовуйте після успішного проходження тесту та отримання бойових ключів.\n\n\nКонтактні дані менеджерів і фахівців:\n\nменеджер проєкту: REDACTED_NAME_SURNAME\n\nemail: REDACTED_EMAIL\n\nоперативний контакт в telegram REDACTED_PHONE\n", 10 | "version": "1.0.0", 11 | "title": "Покупка частями (Monobank)" 12 | }, 13 | "tags": [ 14 | { 15 | "name": "Робота з заявками", 16 | "description": "Основні сервіси АПІ Покупки Частинами" 17 | }, 18 | { 19 | "name": "сервіси для роботи фінансових брокерів", 20 | "description": "Financial Broker Facade Controller" 21 | } 22 | ], 23 | "paths": { 24 | "/api/client/validate": { 25 | "post": { 26 | "tags": [ 27 | "Робота з заявками" 28 | ], 29 | "summary": "Валідація клієнта.", 30 | "description": "З 15.09.2020 підтримка цього сервісу припиняється! Необхідно перейти на [новий метод](/api-docs/chast/servisy/robota-z-zaiavkamy/post--api--v2--client--validate).", 31 | "operationId": "validateClientUsingPOST", 32 | "parameters": [ 33 | { 34 | "name": "signature", 35 | "in": "header", 36 | "description": "[Підпис запиту](/api-docs/chast#auth)", 37 | "required": true, 38 | "schema": { 39 | "type": "string" 40 | } 41 | }, 42 | { 43 | "name": "store-id", 44 | "in": "header", 45 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 46 | "required": true, 47 | "allowEmptyValue": false, 48 | "schema": { 49 | "type": "string" 50 | } 51 | } 52 | ], 53 | "responses": { 54 | "200": { 55 | "description": "Успішна відповідь сервісу", 56 | "content": { 57 | "application/json;charset=UTF-8": { 58 | "schema": { 59 | "$ref": "#/components/schemas/ValidateClientResponse" 60 | } 61 | } 62 | } 63 | }, 64 | "400": { 65 | "description": "Помилка у запиті", 66 | "content": { 67 | "application/json;charset=UTF-8": { 68 | "schema": { 69 | "$ref": "#/components/schemas/ExceptionResponse" 70 | } 71 | } 72 | } 73 | }, 74 | "401": { 75 | "description": "Підпис не передано або не валідний", 76 | "content": { 77 | "application/json;charset=UTF-8": { 78 | "schema": { 79 | "$ref": "#/components/schemas/ExceptionResponse" 80 | } 81 | } 82 | } 83 | }, 84 | "500": { 85 | "description": "Внутрішня помилка сервісу", 86 | "content": { 87 | "application/json;charset=UTF-8": { 88 | "schema": { 89 | "$ref": "#/components/schemas/ExceptionResponse" 90 | } 91 | } 92 | } 93 | } 94 | }, 95 | "deprecated": true, 96 | "requestBody": { 97 | "$ref": "#/components/requestBodies/ValidateClientRequest" 98 | } 99 | } 100 | }, 101 | "/api/fin/broker/check/installment/availability": { 102 | "post": { 103 | "tags": [ 104 | "сервіси для роботи фінансових брокерів" 105 | ], 106 | "summary": "Сервіс перевірки доступності клієнтові ПЧ на цей товар", 107 | "operationId": "checkInstallmentAvailabilityUsingPOST", 108 | "parameters": [ 109 | { 110 | "name": "broker-id", 111 | "in": "header", 112 | "description": "Ідентифікатор брокера", 113 | "required": true, 114 | "schema": { 115 | "type": "string" 116 | } 117 | }, 118 | { 119 | "name": "signature", 120 | "in": "header", 121 | "description": "[Підпис запиту](/api-docs/chast#auth)", 122 | "required": true, 123 | "schema": { 124 | "type": "string" 125 | } 126 | } 127 | ], 128 | "responses": { 129 | "200": { 130 | "description": "Успішна відповідь сервісу", 131 | "content": { 132 | "application/json": { 133 | "schema": { 134 | "$ref": "#/components/schemas/InstallmentAvailabilityResponse" 135 | } 136 | } 137 | } 138 | }, 139 | "400": { 140 | "description": "Помилка у запиті", 141 | "content": { 142 | "application/json": { 143 | "schema": { 144 | "$ref": "#/components/schemas/ExceptionResponse" 145 | } 146 | } 147 | } 148 | }, 149 | "401": { 150 | "description": "Підпис не передано або не валідний", 151 | "content": { 152 | "application/json": { 153 | "schema": { 154 | "$ref": "#/components/schemas/ExceptionResponse" 155 | } 156 | } 157 | } 158 | }, 159 | "500": { 160 | "description": "Внутрішня помилка сервісу", 161 | "content": { 162 | "application/json": { 163 | "schema": { 164 | "$ref": "#/components/schemas/ExceptionResponse" 165 | } 166 | } 167 | } 168 | } 169 | }, 170 | "requestBody": { 171 | "content": { 172 | "application/json": { 173 | "schema": { 174 | "$ref": "#/components/schemas/InstallmentAvailabilityRequest" 175 | } 176 | } 177 | }, 178 | "description": "request", 179 | "required": true 180 | } 181 | } 182 | }, 183 | "/api/order/check/paid": { 184 | "post": { 185 | "tags": [ 186 | "Робота з заявками" 187 | ], 188 | "summary": "Отримання ознаки того, що заявка повністю оплачена", 189 | "operationId": "checkInstallmentIsPaidUsingPOST", 190 | "parameters": [ 191 | { 192 | "name": "signature", 193 | "in": "header", 194 | "description": "[Підпис запиту](/api-docs/chast#auth)", 195 | "required": true, 196 | "schema": { 197 | "type": "string" 198 | } 199 | }, 200 | { 201 | "name": "store-id", 202 | "in": "header", 203 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 204 | "required": true, 205 | "allowEmptyValue": false, 206 | "schema": { 207 | "type": "string" 208 | } 209 | } 210 | ], 211 | "responses": { 212 | "200": { 213 | "description": "Успішна відповідь сервісу", 214 | "content": { 215 | "application/json;charset=UTF-8": { 216 | "schema": { 217 | "$ref": "#/components/schemas/CheckInstallmentsResponse" 218 | } 219 | } 220 | } 221 | }, 222 | "400": { 223 | "description": "Помилка у запиті", 224 | "content": { 225 | "application/json;charset=UTF-8": { 226 | "schema": { 227 | "$ref": "#/components/schemas/ExceptionResponse" 228 | } 229 | } 230 | } 231 | }, 232 | "401": { 233 | "description": "Підпис не передано або не валідний", 234 | "content": { 235 | "application/json;charset=UTF-8": { 236 | "schema": { 237 | "$ref": "#/components/schemas/ExceptionResponse" 238 | } 239 | } 240 | } 241 | }, 242 | "500": { 243 | "description": "Внутрішня помилка сервісу", 244 | "content": { 245 | "application/json;charset=UTF-8": { 246 | "schema": { 247 | "$ref": "#/components/schemas/ExceptionResponse" 248 | } 249 | } 250 | } 251 | } 252 | }, 253 | "requestBody": { 254 | "$ref": "#/components/requestBodies/RequestWithOrderIdentifier" 255 | } 256 | } 257 | }, 258 | "/api/order/confirm": { 259 | "post": { 260 | "tags": [ 261 | "Робота з заявками" 262 | ], 263 | "summary": "Підтвердження видачі товару клієнтові", 264 | "operationId": "confirmUsingPOST", 265 | "parameters": [ 266 | { 267 | "name": "signature", 268 | "in": "header", 269 | "description": "[Підпис запиту](/api-docs/chast#auth)", 270 | "required": true, 271 | "schema": { 272 | "type": "string" 273 | } 274 | }, 275 | { 276 | "name": "store-id", 277 | "in": "header", 278 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 279 | "required": true, 280 | "allowEmptyValue": false, 281 | "schema": { 282 | "type": "string" 283 | } 284 | } 285 | ], 286 | "responses": { 287 | "200": { 288 | "description": "Успішна відповідь сервісу", 289 | "content": { 290 | "application/json;charset=UTF-8": { 291 | "schema": { 292 | "$ref": "#/components/schemas/OrderStateInfo" 293 | } 294 | } 295 | } 296 | }, 297 | "400": { 298 | "description": "Помилка у запиті", 299 | "content": { 300 | "application/json;charset=UTF-8": { 301 | "schema": { 302 | "$ref": "#/components/schemas/ExceptionResponse" 303 | } 304 | } 305 | } 306 | }, 307 | "401": { 308 | "description": "Підпис не передано або не валідний", 309 | "content": { 310 | "application/json;charset=UTF-8": { 311 | "schema": { 312 | "$ref": "#/components/schemas/ExceptionResponse" 313 | } 314 | } 315 | } 316 | }, 317 | "500": { 318 | "description": "Внутрішня помилка сервісу", 319 | "content": { 320 | "application/json;charset=UTF-8": { 321 | "schema": { 322 | "$ref": "#/components/schemas/ExceptionResponse" 323 | } 324 | } 325 | } 326 | } 327 | }, 328 | "requestBody": { 329 | "content": { 330 | "application/json": { 331 | "schema": { 332 | "$ref": "#/components/schemas/RequestWithOrderIdentifier" 333 | } 334 | } 335 | }, 336 | "description": "request", 337 | "required": true 338 | } 339 | } 340 | }, 341 | "/api/order/create": { 342 | "post": { 343 | "tags": [ 344 | "Робота з заявками" 345 | ], 346 | "summary": "Подання заявки на оформлення Покупки Частинами", 347 | "operationId": "createOrderUsingPOST", 348 | "parameters": [ 349 | { 350 | "name": "signature", 351 | "in": "header", 352 | "description": "[Підпис запиту](/api-docs/chast#auth)", 353 | "required": true, 354 | "schema": { 355 | "type": "string" 356 | } 357 | }, 358 | { 359 | "name": "store-id", 360 | "in": "header", 361 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 362 | "required": true, 363 | "allowEmptyValue": false, 364 | "schema": { 365 | "type": "string" 366 | } 367 | } 368 | ], 369 | "responses": { 370 | "201": { 371 | "description": "Заявка принята в обработку", 372 | "content": { 373 | "application/json": { 374 | "schema": { 375 | "$ref": "#/components/schemas/CreateOrderResponse" 376 | } 377 | } 378 | } 379 | }, 380 | "400": { 381 | "description": "Помилка у запиті", 382 | "content": { 383 | "application/json": { 384 | "schema": { 385 | "$ref": "#/components/schemas/ExceptionResponse" 386 | } 387 | } 388 | } 389 | }, 390 | "401": { 391 | "description": "Підпис не передано або не валідний", 392 | "content": { 393 | "application/json": { 394 | "schema": { 395 | "$ref": "#/components/schemas/ExceptionResponse" 396 | } 397 | } 398 | } 399 | }, 400 | "409": { 401 | "description": "Дубликат заявки", 402 | "content": { 403 | "application/json": { 404 | "schema": { 405 | "$ref": "#/components/schemas/CreateOrderResponse" 406 | } 407 | } 408 | } 409 | }, 410 | "500": { 411 | "description": "Внутрішня помилка сервісу", 412 | "content": { 413 | "application/json": { 414 | "schema": { 415 | "$ref": "#/components/schemas/ExceptionResponse" 416 | } 417 | } 418 | } 419 | } 420 | }, 421 | "requestBody": { 422 | "content": { 423 | "application/json;charset=UTF-8": { 424 | "schema": { 425 | "$ref": "#/components/schemas/CreateOrderRequest" 426 | } 427 | } 428 | }, 429 | "description": "request", 430 | "required": true 431 | } 432 | } 433 | }, 434 | "/api/order/data": { 435 | "post": { 436 | "tags": [ 437 | "Робота з заявками" 438 | ], 439 | "summary": "Отримання інформації про заявку. Актуальний метод", 440 | "description": "Необов'язковий метод.
\nЦей метод застосовується для отримання детальної інформації про створену заявку ПЧ та про проведені повернення.
\nІнформація про повернення: буде передано дату та суму повернення за даною заявкою. Якщо таких повернень більше одного, то буде переданий масив даних з датою і сумою кожного повернення", 441 | "operationId": "getOrderShortDataUsingPOST", 442 | "parameters": [ 443 | { 444 | "name": "signature", 445 | "in": "header", 446 | "description": "[Підпис запиту](/api-docs/chast#auth)", 447 | "required": true, 448 | "schema": { 449 | "type": "string" 450 | } 451 | }, 452 | { 453 | "name": "store-id", 454 | "in": "header", 455 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 456 | "required": true, 457 | "allowEmptyValue": false, 458 | "schema": { 459 | "type": "string" 460 | } 461 | } 462 | ], 463 | "responses": { 464 | "200": { 465 | "description": "Успішна відповідь сервісу", 466 | "content": { 467 | "application/json;charset=UTF-8": { 468 | "schema": { 469 | "$ref": "#/components/schemas/OrderShortInfo" 470 | } 471 | } 472 | } 473 | }, 474 | "400": { 475 | "description": "Помилка у запиті", 476 | "content": { 477 | "application/json;charset=UTF-8": { 478 | "schema": { 479 | "$ref": "#/components/schemas/ExceptionResponse" 480 | } 481 | } 482 | } 483 | }, 484 | "401": { 485 | "description": "Підпис не передано або не валідний", 486 | "content": { 487 | "application/json;charset=UTF-8": { 488 | "schema": { 489 | "$ref": "#/components/schemas/ExceptionResponse" 490 | } 491 | } 492 | } 493 | }, 494 | "500": { 495 | "description": "Внутрішня помилка сервісу", 496 | "content": { 497 | "application/json;charset=UTF-8": { 498 | "schema": { 499 | "$ref": "#/components/schemas/ExceptionResponse" 500 | } 501 | } 502 | } 503 | } 504 | }, 505 | "requestBody": { 506 | "$ref": "#/components/requestBodies/RequestWithOrderIdentifier" 507 | } 508 | } 509 | }, 510 | "/api/order/data/for/guarantee/letter": { 511 | "post": { 512 | "tags": [ 513 | "Робота з заявками" 514 | ], 515 | "summary": "Отримання даних для гарантійного листа", 516 | "description": "Приклад гарантійного листа:
\n\n```java\n\n\n
\n \"180702CM023453\"\n 2018-07-02T12:05:10\n \"Монобанк\"\n \"11111111\"\n
\n \n \n \"Іванов\"\n \"Василій\"\n \"Петрович\"\n \"0\"\n \"АК\"\n \"548967\"\n \"Дніпровським РВ ДМУ УМВС у Дніпропетровській\n області\"\n \"2000-05-12\"\n \"1234567890\"\n \n \n \"СФGIT-0000000134\"\n \"2018-07-02\"\n \"3500.00\"\n \n \n \"36962487\"\n \"ТОВ \\\"Рога и копыта\\\"\"\n \"305299\"\n \"\\\"IBOX\\\"\"\n \"26000000000\"\n \n \n \"КД-0001\"\n \"20.07.2018\"\n \"3500.00\"\n \"БР\"\n \"7\"\n \"0.00\"\n \"21133352\"\n \"ПАТ \\\"УНІВЕРСАЛ БАНК\\\"\"\n \"Петренко І.В.\"\n \n 12E0F76458C6D1E4\n 1199A0F5E7C4A212\n \n
\n```\n\n\nЕлектронний цифровий підпис накладається на рядок, що складається шляхом конкатенації значень таких атрибутів відповіді:
\n`\"customer\".\"last_name\"`
\n`\"customer\".\"first_name\"`
\n`\"customer\".\"middle_name\"`
\n`\"customer\".\"doc_series\"`
\n`\"customer\".\"doc_number\"`
\n`\"customer\".\"doc_issued\"`
\n`\"customer\".\"doc_date_of_issue\"`
\n`\"customer\".\"inn\"`
\n`\"invoice\".\"invoice_number\"`
\n`\"invoice\".\"invoice_date\"`
\n`\"invoice\".\"invoice_amount\"`
\n`\"payment_destination\".\"dest_id\"`
\n`\"payment_destination\".\"dest_name\"`
\n`\"payment_destination\".\"dest_mfo\"`
\n`\"payment_destination\".\"dest_bank_name\"`
\n`\"payment_destination\".\"dest_acc_number\"`
\n`\"header\".\"answer_datetime\"`
\n`\"bank\".\"agreement\"`
\n`\"bank\".\"agreement_date\"`
\n`\"bank\".\"credit_amount\"`
\n`\"bank\".\"customer_pay_amount\"`
\n`\"bank\".\"bank_id\"`
\n`\"bank\".\"bank_name\"`
\n`\"bank\".\"bank_executive\"`
\n\nЗначення атрибутів мають бути перераховані саме у зазначеному порядку, без пробілів чи інших роздільників.\nЯкщо значення параметра відсутнє — замість нього підставляється порожній рядок", 517 | "operationId": "getOrderDataUsingPOST", 518 | "parameters": [ 519 | { 520 | "name": "signature", 521 | "in": "header", 522 | "description": "[Підпис запиту](/api-docs/chast#auth)", 523 | "required": true, 524 | "schema": { 525 | "type": "string" 526 | } 527 | }, 528 | { 529 | "name": "store-id", 530 | "in": "header", 531 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 532 | "required": true, 533 | "allowEmptyValue": false, 534 | "schema": { 535 | "type": "string" 536 | } 537 | } 538 | ], 539 | "responses": { 540 | "200": { 541 | "description": "Успішна відповідь сервісу", 542 | "content": { 543 | "application/xml": { 544 | "schema": { 545 | "$ref": "#/components/schemas/OrderData" 546 | } 547 | }, 548 | "application/json;charset=UTF-8": { 549 | "schema": { 550 | "$ref": "#/components/schemas/OrderData" 551 | } 552 | } 553 | } 554 | }, 555 | "400": { 556 | "description": "Помилка у запиті", 557 | "content": { 558 | "application/xml": { 559 | "schema": { 560 | "$ref": "#/components/schemas/ExceptionResponse" 561 | } 562 | }, 563 | "application/json;charset=UTF-8": { 564 | "schema": { 565 | "$ref": "#/components/schemas/ExceptionResponse" 566 | } 567 | } 568 | } 569 | }, 570 | "401": { 571 | "description": "Підпис не передано або не валідний", 572 | "content": { 573 | "application/xml": { 574 | "schema": { 575 | "$ref": "#/components/schemas/ExceptionResponse" 576 | } 577 | }, 578 | "application/json;charset=UTF-8": { 579 | "schema": { 580 | "$ref": "#/components/schemas/ExceptionResponse" 581 | } 582 | } 583 | } 584 | }, 585 | "500": { 586 | "description": "Внутрішня помилка сервісу", 587 | "content": { 588 | "application/xml": { 589 | "schema": { 590 | "$ref": "#/components/schemas/ExceptionResponse" 591 | } 592 | }, 593 | "application/json;charset=UTF-8": { 594 | "schema": { 595 | "$ref": "#/components/schemas/ExceptionResponse" 596 | } 597 | } 598 | } 599 | } 600 | }, 601 | "requestBody": { 602 | "$ref": "#/components/requestBodies/OrderDataRequest" 603 | } 604 | } 605 | }, 606 | "/api/order/guarantee/letter": { 607 | "post": { 608 | "tags": [ 609 | "Робота з заявками" 610 | ], 611 | "summary": "Отримання гарантійного листа (PDF)", 612 | "operationId": "getOrderContractUsingPOST", 613 | "parameters": [ 614 | { 615 | "name": "signature", 616 | "in": "header", 617 | "description": "[Підпис запиту](/api-docs/chast#auth)", 618 | "required": true, 619 | "schema": { 620 | "type": "string" 621 | } 622 | }, 623 | { 624 | "name": "store-id", 625 | "in": "header", 626 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 627 | "required": true, 628 | "allowEmptyValue": false, 629 | "schema": { 630 | "type": "string" 631 | } 632 | } 633 | ], 634 | "responses": { 635 | "200": { 636 | "description": "Успішна відповідь сервісу", 637 | "content": { 638 | "application/pdf": { 639 | "schema": { 640 | "type": "string", 641 | "format": "byte" 642 | } 643 | } 644 | } 645 | }, 646 | "400": { 647 | "description": "Помилка у запиті", 648 | "content": { 649 | "application/pdf": { 650 | "schema": { 651 | "$ref": "#/components/schemas/ExceptionResponse" 652 | } 653 | } 654 | } 655 | }, 656 | "401": { 657 | "description": "Підпис не передано або не валідний", 658 | "content": { 659 | "application/pdf": { 660 | "schema": { 661 | "$ref": "#/components/schemas/ExceptionResponse" 662 | } 663 | } 664 | } 665 | }, 666 | "500": { 667 | "description": "Внутрішня помилка сервісу", 668 | "content": { 669 | "application/pdf": { 670 | "schema": { 671 | "$ref": "#/components/schemas/ExceptionResponse" 672 | } 673 | } 674 | } 675 | } 676 | }, 677 | "requestBody": { 678 | "$ref": "#/components/requestBodies/OrderDataRequest" 679 | } 680 | } 681 | }, 682 | "/api/order/info": { 683 | "post": { 684 | "tags": [ 685 | "Робота з заявками" 686 | ], 687 | "summary": "Отримання інформації про заявку. Цей метод застарів. Прохання перейти на новий (/api/order/data)", 688 | "operationId": "getOrderShortInfoUsingPOST", 689 | "parameters": [ 690 | { 691 | "name": "signature", 692 | "in": "header", 693 | "description": "[Підпис запиту](/api-docs/chast#auth)", 694 | "required": true, 695 | "schema": { 696 | "type": "string" 697 | } 698 | }, 699 | { 700 | "name": "store-id", 701 | "in": "header", 702 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 703 | "required": true, 704 | "allowEmptyValue": false, 705 | "schema": { 706 | "type": "string" 707 | } 708 | } 709 | ], 710 | "responses": { 711 | "200": { 712 | "description": "Успішна відповідь сервісу", 713 | "content": { 714 | "application/json;charset=UTF-8": { 715 | "schema": { 716 | "$ref": "#/components/schemas/OrderShortInfo" 717 | } 718 | } 719 | } 720 | }, 721 | "400": { 722 | "description": "Помилка у запиті", 723 | "content": { 724 | "application/json;charset=UTF-8": { 725 | "schema": { 726 | "$ref": "#/components/schemas/ExceptionResponse" 727 | } 728 | } 729 | } 730 | }, 731 | "401": { 732 | "description": "Підпис не передано або не валідний", 733 | "content": { 734 | "application/json;charset=UTF-8": { 735 | "schema": { 736 | "$ref": "#/components/schemas/ExceptionResponse" 737 | } 738 | } 739 | } 740 | }, 741 | "500": { 742 | "description": "Внутрішня помилка сервісу", 743 | "content": { 744 | "application/json;charset=UTF-8": { 745 | "schema": { 746 | "$ref": "#/components/schemas/ExceptionResponse" 747 | } 748 | } 749 | } 750 | } 751 | }, 752 | "requestBody": { 753 | "$ref": "#/components/requestBodies/RequestWithOrderIdentifier" 754 | } 755 | } 756 | }, 757 | "/api/order/reject": { 758 | "post": { 759 | "tags": [ 760 | "Робота з заявками" 761 | ], 762 | "summary": "Скасування заявки (Товар клієнтові не видано)", 763 | "operationId": "rejectUsingPOST", 764 | "parameters": [ 765 | { 766 | "name": "signature", 767 | "in": "header", 768 | "description": "[Підпис запиту](/api-docs/chast#auth)", 769 | "required": true, 770 | "schema": { 771 | "type": "string" 772 | } 773 | }, 774 | { 775 | "name": "store-id", 776 | "in": "header", 777 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 778 | "required": true, 779 | "allowEmptyValue": false, 780 | "schema": { 781 | "type": "string" 782 | } 783 | } 784 | ], 785 | "responses": { 786 | "200": { 787 | "description": "Успішна відповідь сервісу", 788 | "content": { 789 | "application/json;charset=UTF-8": { 790 | "schema": { 791 | "$ref": "#/components/schemas/OrderStateInfo" 792 | } 793 | } 794 | } 795 | }, 796 | "400": { 797 | "description": "Помилка у запиті", 798 | "content": { 799 | "application/json;charset=UTF-8": { 800 | "schema": { 801 | "$ref": "#/components/schemas/ExceptionResponse" 802 | } 803 | } 804 | } 805 | }, 806 | "401": { 807 | "description": "Підпис не передано або не валідний", 808 | "content": { 809 | "application/json;charset=UTF-8": { 810 | "schema": { 811 | "$ref": "#/components/schemas/ExceptionResponse" 812 | } 813 | } 814 | } 815 | }, 816 | "500": { 817 | "description": "Внутрішня помилка сервісу", 818 | "content": { 819 | "application/json;charset=UTF-8": { 820 | "schema": { 821 | "$ref": "#/components/schemas/ExceptionResponse" 822 | } 823 | } 824 | } 825 | } 826 | }, 827 | "requestBody": { 828 | "$ref": "#/components/requestBodies/RequestWithOrderIdentifier" 829 | } 830 | } 831 | }, 832 | "/api/order/return": { 833 | "post": { 834 | "tags": [ 835 | "Робота з заявками" 836 | ], 837 | "summary": "Повернення товару за заявкою (повне або часткове)", 838 | "operationId": "returnOrderUsingPOST", 839 | "parameters": [ 840 | { 841 | "name": "signature", 842 | "in": "header", 843 | "description": "[Підпис запиту](/api-docs/chast#auth)", 844 | "required": true, 845 | "schema": { 846 | "type": "string" 847 | } 848 | }, 849 | { 850 | "name": "store-id", 851 | "in": "header", 852 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 853 | "required": true, 854 | "allowEmptyValue": false, 855 | "schema": { 856 | "type": "string" 857 | } 858 | } 859 | ], 860 | "responses": { 861 | "200": { 862 | "description": "Успішна відповідь сервісу", 863 | "content": { 864 | "application/json;charset=UTF-8": { 865 | "schema": { 866 | "$ref": "#/components/schemas/ReturnResponse" 867 | } 868 | } 869 | } 870 | }, 871 | "400": { 872 | "description": "Помилка у запиті", 873 | "content": { 874 | "application/json;charset=UTF-8": { 875 | "schema": { 876 | "$ref": "#/components/schemas/ExceptionResponse" 877 | } 878 | } 879 | } 880 | }, 881 | "401": { 882 | "description": "Підпис не передано або не валідний", 883 | "content": { 884 | "application/json;charset=UTF-8": { 885 | "schema": { 886 | "$ref": "#/components/schemas/ExceptionResponse" 887 | } 888 | } 889 | } 890 | }, 891 | "500": { 892 | "description": "Внутрішня помилка сервісу", 893 | "content": { 894 | "application/json;charset=UTF-8": { 895 | "schema": { 896 | "$ref": "#/components/schemas/ExceptionResponse" 897 | } 898 | } 899 | } 900 | } 901 | }, 902 | "requestBody": { 903 | "content": { 904 | "application/json;charset=UTF-8": { 905 | "schema": { 906 | "$ref": "#/components/schemas/ReturnRequest" 907 | } 908 | } 909 | }, 910 | "description": "request", 911 | "required": true 912 | } 913 | } 914 | }, 915 | "/api/order/state": { 916 | "post": { 917 | "tags": [ 918 | "Робота з заявками" 919 | ], 920 | "summary": "Отримання стану раніше створеної заявки на оформлення Покупки Частинами (Callback)", 921 | "description": "Як це працює
\n* Магазин надсилає запит на створення заявки на оформлення Покупки Частинами з передачею параметра result_callback
\n* Після опрацювання операції Монобанком на сервер магазину буде надіслано запит POST що містить результат опрацювання запиту. Формат запиту буде аналогічний відповіді[сервісу перевірки станів](/api-docs/chast/servisy/robota-z-zaiavkamy/post--api--order--state)
\n* Для перевірки справжності запиту із сервера Монобанку необхідно:
\n * сформувати signature на боці вашого сервера, використовуючи отриманий від Монобанку запит.
\n * отримане значення signature необхідно порівняти з отриманою з Callback від Монобанку
\n * якщо signature ідентичні, то Ви отримали справжню відповідь від сервера Монобанку (не змінений третьою особою/без втручання третіх осіб) і можна продовжувати виконувати операцію, відповідно до отриманого статусу платежу. Для отримання поточного статусу транзакції до отримання фінального Callback, використовуйте API [сервісу перевірки станів](/api-docs/chast/servisy/robota-z-zaiavkamy/post--api--order--state), який можна виконувати в будь-який момент.\n\nСтатус | Суб-статус | Пояснення\n------------ | ------------- | -------------\nSUCCESS | ACTIVE | заявка успішна, товар передано клієнтові, гроші надіслано магазину. Фінальний статус за заявкою\nSUCCESS | DONE | заявка успішна, товар передано клієнтові, гроші надіслано магазину, ПЧ погашено клієнтом.\nSUCCESS | RETURNED | магазином прийнято повернення товару, гроші перераховано клієнтові\nIN_PROCESS | WAITING_FOR_CLIENT | очікування підтвердження від клієнта кредитного договору у застосунку монобанк\nIN_PROCESS | WAITING_FOR_STORE_CONFIRM | кредитна угода ПЧ підтверджена клієнтом. Важливо! Ключовий статус після отримання якого необхідно передати товар клієнтові\nFAIL | CLIENT_NOT_FOUND | Клієнта не знайдено. Варіанти: не є клієнтом монобанку; зазначено не фінансовий номер\nFAIL | EXCEEDED_SUM_LIMIT | Клієнт перевищив допустимий ліміт на ПЧ. Ліміт можна подивитися у застосунку монобанк у меню Розстрочка.\nFAIL | EXISTS_OTHER_OPEN_ORDER | У клієнта є інша відкрита заявка на ПЧ. Рішення: скасувати відкриту заявку у застосунку клієнтом чи магазином методом reject; почекати 15 хв, заявка перейде у статус CLIENT_PUSH_TIMEOUT\nFAIL | FAIL | Внутрішня помилка на боці Банку. Рекомендуємо повторити подання заявки через 5 хв.\nFAIL | NOT_ENOUGH_MONEY_FOR_INIT_DEBIT | Недостатньо коштів для першого списання. Рішення: поповнити картку монобанку на суму першого платежу\nFAIL | REJECTED_BY_CLIENT | Клієнт відмовився від здійснення купівлі\nFAIL | RESTRICTED_BY_RISKS | Потрібно звернутися до банку для отримання причини відмови у ПЧ\nFAIL | CLIENT_PUSH_TIMEOUT | Клієнт не ухвалив рішення щодо кредитного договору ПЧ у застосунку монобанку. Кредитний договір активний 15 хв. Рішення: зв'язатися з клієнтом; повторити заявку\nFAIL | REJECTED_BY_STORE | Магазин відмовився від продажу\n", 922 | "operationId": "getOrderStateUsingPOST", 923 | "parameters": [ 924 | { 925 | "name": "signature", 926 | "in": "header", 927 | "description": "[Підпис запиту](/api-docs/chast#auth)", 928 | "required": true, 929 | "schema": { 930 | "type": "string" 931 | } 932 | }, 933 | { 934 | "name": "store-id", 935 | "in": "header", 936 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 937 | "required": true, 938 | "allowEmptyValue": false, 939 | "schema": { 940 | "type": "string" 941 | } 942 | } 943 | ], 944 | "responses": { 945 | "200": { 946 | "description": "Успішна відповідь сервісу", 947 | "content": { 948 | "application/json;charset=UTF-8": { 949 | "schema": { 950 | "$ref": "#/components/schemas/OrderStateInfo" 951 | } 952 | } 953 | } 954 | }, 955 | "400": { 956 | "description": "Помилка у запиті", 957 | "content": { 958 | "application/json;charset=UTF-8": { 959 | "schema": { 960 | "$ref": "#/components/schemas/ExceptionResponse" 961 | } 962 | } 963 | } 964 | }, 965 | "401": { 966 | "description": "Підпис не передано або не валідний", 967 | "content": { 968 | "application/json;charset=UTF-8": { 969 | "schema": { 970 | "$ref": "#/components/schemas/ExceptionResponse" 971 | } 972 | } 973 | } 974 | }, 975 | "500": { 976 | "description": "Внутрішня помилка сервісу", 977 | "content": { 978 | "application/json;charset=UTF-8": { 979 | "schema": { 980 | "$ref": "#/components/schemas/ExceptionResponse" 981 | } 982 | } 983 | } 984 | } 985 | }, 986 | "requestBody": { 987 | "$ref": "#/components/requestBodies/RequestWithOrderIdentifier" 988 | } 989 | } 990 | }, 991 | "/api/store/report": { 992 | "post": { 993 | "tags": [ 994 | "Робота з заявками" 995 | ], 996 | "summary": "Отримання звіту", 997 | "operationId": "getDailyReportUsingPOST", 998 | "parameters": [ 999 | { 1000 | "name": "signature", 1001 | "in": "header", 1002 | "description": "[Підпис запиту](/api-docs/chast#auth)", 1003 | "required": true, 1004 | "schema": { 1005 | "type": "string" 1006 | } 1007 | }, 1008 | { 1009 | "name": "store-id", 1010 | "in": "header", 1011 | "description": "store-id", 1012 | "required": true, 1013 | "schema": { 1014 | "type": "string" 1015 | } 1016 | } 1017 | ], 1018 | "responses": { 1019 | "200": { 1020 | "description": "Успішна відповідь сервісу", 1021 | "content": { 1022 | "application/json;charset=UTF-8": { 1023 | "schema": { 1024 | "$ref": "#/components/schemas/DailyReportResponse" 1025 | } 1026 | } 1027 | } 1028 | }, 1029 | "400": { 1030 | "description": "Помилка у запиті", 1031 | "content": { 1032 | "application/json;charset=UTF-8": { 1033 | "schema": { 1034 | "$ref": "#/components/schemas/ExceptionResponse" 1035 | } 1036 | } 1037 | } 1038 | }, 1039 | "401": { 1040 | "description": "Підпис не передано або не валідний", 1041 | "content": { 1042 | "application/json;charset=UTF-8": { 1043 | "schema": { 1044 | "$ref": "#/components/schemas/ExceptionResponse" 1045 | } 1046 | } 1047 | } 1048 | }, 1049 | "500": { 1050 | "description": "Внутрішня помилка сервісу", 1051 | "content": { 1052 | "application/json;charset=UTF-8": { 1053 | "schema": { 1054 | "$ref": "#/components/schemas/ExceptionResponse" 1055 | } 1056 | } 1057 | } 1058 | } 1059 | }, 1060 | "requestBody": { 1061 | "content": { 1062 | "application/json": { 1063 | "schema": { 1064 | "$ref": "#/components/schemas/DailyReportRequest" 1065 | } 1066 | } 1067 | }, 1068 | "description": "request", 1069 | "required": true 1070 | } 1071 | } 1072 | }, 1073 | "/api/v2/client/validate": { 1074 | "post": { 1075 | "tags": [ 1076 | "Робота з заявками" 1077 | ], 1078 | "summary": "Валідація клієнта (версія 2)", 1079 | "operationId": "validateClientV2UsingPOST", 1080 | "parameters": [ 1081 | { 1082 | "name": "signature", 1083 | "in": "header", 1084 | "description": "[Підпис запиту](/api-docs/chast#auth)", 1085 | "required": true, 1086 | "schema": { 1087 | "type": "string" 1088 | } 1089 | }, 1090 | { 1091 | "name": "store-id", 1092 | "in": "header", 1093 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 1094 | "required": true, 1095 | "allowEmptyValue": false, 1096 | "schema": { 1097 | "type": "string" 1098 | } 1099 | } 1100 | ], 1101 | "responses": { 1102 | "200": { 1103 | "description": "Успішна відповідь сервісу", 1104 | "content": { 1105 | "application/json;charset=UTF-8": { 1106 | "schema": { 1107 | "$ref": "#/components/schemas/ValidateClientSimpleResponse" 1108 | } 1109 | } 1110 | } 1111 | }, 1112 | "400": { 1113 | "description": "Помилка у запиті", 1114 | "content": { 1115 | "application/json;charset=UTF-8": { 1116 | "schema": { 1117 | "$ref": "#/components/schemas/ExceptionResponse" 1118 | } 1119 | } 1120 | } 1121 | }, 1122 | "401": { 1123 | "description": "Підпис не передано або не валідний", 1124 | "content": { 1125 | "application/json;charset=UTF-8": { 1126 | "schema": { 1127 | "$ref": "#/components/schemas/ExceptionResponse" 1128 | } 1129 | } 1130 | } 1131 | }, 1132 | "500": { 1133 | "description": "Внутрішня помилка сервісу", 1134 | "content": { 1135 | "application/json;charset=UTF-8": { 1136 | "schema": { 1137 | "$ref": "#/components/schemas/ExceptionResponse" 1138 | } 1139 | } 1140 | } 1141 | } 1142 | }, 1143 | "requestBody": { 1144 | "$ref": "#/components/requestBodies/ValidateClientRequest" 1145 | } 1146 | } 1147 | }, 1148 | "/api/v2/order/data/for/guarantee/letter": { 1149 | "post": { 1150 | "tags": [ 1151 | "Робота з заявками" 1152 | ], 1153 | "summary": "Отримання даних для гарантійного листа", 1154 | "description": "Приклад гарантійного листа:
\n\n```java\n\n\n
\n \"180702CM023453\"\n 2018-07-02T12:05:10\n \"Монобанк\"\n \"11111111\"\n
\n \n \n \"Іванов\"\n \"Василій\"\n \"Петрович\"\n \"0\"\n \"АК\"\n \"548967\"\n \"Дніпровським РВ ДМУ УМВС у Дніпропетровській\n області\"\n \"2000-05-12\"\n \"1234567890\"\n \n \n \"СФGIT-0000000134\"\n \"2018-07-02\"\n \"3500.00\"\n \n \n \"36962487\"\n \"ТОВ \\\"Рога и копыта\\\"\"\n \"305299\"\n \"\\\"IBOX\\\"\"\n \"26000000000\"\n \n \n \"КД-0001\"\n \"20.07.2018\"\n \"3500.00\"\n \"БР\"\n \"7\"\n \"0.00\"\n \"21133352\"\n \"ПАТ \\\"УНІВЕРСАЛ БАНК\\\"\"\n \"Петренко І.В.\"\n \n 12E0F76458C6D1E4\n 1199A0F5E7C4A212\n \n
\n```\n\n\nЕлектронний цифровий підпис накладається на рядок, який складається шляхом конкатенації значень наступних атрибутів відповіді:
\n`\"customer\".\"last_name\"`
\n`\"customer\".\"first_name\"`
\n`\"customer\".\"middle_name\"`
\n`\"customer\".\"doc_series\"`
\n`\"customer\".\"doc_number\"`
\n`\"customer\".\"doc_issued\"`
\n`\"customer\".\"doc_date_of_issue\"`
\n`\"customer\".\"inn\"`
\n`\"invoice\".\"invoice_number\"`
\n`\"invoice\".\"invoice_date\"`
\n`\"invoice\".\"invoice_amount\"`
\n`\"payment_destination\".\"dest_id\"`
\n`\"payment_destination\".\"dest_name\"`
\n`\"payment_destination\".\"dest_mfo\"`
\n`\"payment_destination\".\"dest_bank_name\"`
\n`\"payment_destination\".\"dest_acc_number\"`
\n`\"header\".\"answer_datetime\"`
\n`\"bank\".\"agreement\"`
\n`\"bank\".\"agreement_date\"`
\n`\"bank\".\"credit_amount\"`
\n`\"bank\".\"customer_pay_amount\"`
\n`\"bank\".\"bank_id\"`
\n`\"bank\".\"bank_name\"`
\n`\"bank\".\"bank_executive\"`
\n\nЗначення атрибутів мають бути перераховані саме у зазначеному порядку, без пробілів чи інших роздільників.\nЯкщо значення параметра відсутнє – замість нього підставляється порожній рядок", 1155 | "operationId": "getOrderData_v2UsingPOST", 1156 | "parameters": [ 1157 | { 1158 | "name": "signature", 1159 | "in": "header", 1160 | "description": "[Підпис запиту](/api-docs/chast#auth)", 1161 | "required": true, 1162 | "schema": { 1163 | "type": "string" 1164 | } 1165 | }, 1166 | { 1167 | "name": "store-id", 1168 | "in": "header", 1169 | "description": "Ідентифікатор магазину (виданий під час укладання договору)", 1170 | "required": true, 1171 | "allowEmptyValue": false, 1172 | "schema": { 1173 | "type": "string" 1174 | } 1175 | } 1176 | ], 1177 | "responses": { 1178 | "200": { 1179 | "description": "Успішна відповідь сервісу", 1180 | "content": { 1181 | "application/xml": { 1182 | "schema": { 1183 | "$ref": "#/components/schemas/OrderData" 1184 | } 1185 | }, 1186 | "application/json;charset=UTF-8": { 1187 | "schema": { 1188 | "$ref": "#/components/schemas/OrderData" 1189 | } 1190 | } 1191 | } 1192 | }, 1193 | "400": { 1194 | "description": "Помилка у запиті", 1195 | "content": { 1196 | "application/xml": { 1197 | "schema": { 1198 | "$ref": "#/components/schemas/ExceptionResponse" 1199 | } 1200 | }, 1201 | "application/json;charset=UTF-8": { 1202 | "schema": { 1203 | "$ref": "#/components/schemas/ExceptionResponse" 1204 | } 1205 | } 1206 | } 1207 | }, 1208 | "401": { 1209 | "description": "Підпис не передано або не валідний", 1210 | "content": { 1211 | "application/xml": { 1212 | "schema": { 1213 | "$ref": "#/components/schemas/ExceptionResponse" 1214 | } 1215 | }, 1216 | "application/json;charset=UTF-8": { 1217 | "schema": { 1218 | "$ref": "#/components/schemas/ExceptionResponse" 1219 | } 1220 | } 1221 | } 1222 | }, 1223 | "500": { 1224 | "description": "Внутрішня помилка сервісу", 1225 | "content": { 1226 | "application/xml": { 1227 | "schema": { 1228 | "$ref": "#/components/schemas/ExceptionResponse" 1229 | } 1230 | }, 1231 | "application/json;charset=UTF-8": { 1232 | "schema": { 1233 | "$ref": "#/components/schemas/ExceptionResponse" 1234 | } 1235 | } 1236 | } 1237 | } 1238 | }, 1239 | "requestBody": { 1240 | "$ref": "#/components/requestBodies/OrderDataRequest" 1241 | } 1242 | } 1243 | } 1244 | }, 1245 | "components": { 1246 | "schemas": { 1247 | "Bank": { 1248 | "type": "object", 1249 | "properties": { 1250 | "agreement": { 1251 | "type": "string", 1252 | "example": "123-123-1234", 1253 | "xml": { 1254 | "name": "agreement", 1255 | "attribute": false, 1256 | "wrapped": false 1257 | }, 1258 | "description": "ID заявки у системі банку. Номер кредитного договору" 1259 | }, 1260 | "agreement_date": { 1261 | "type": "string", 1262 | "format": "date", 1263 | "example": "2020-01-25", 1264 | "xml": { 1265 | "name": "agreement_date", 1266 | "attribute": false, 1267 | "wrapped": false 1268 | }, 1269 | "description": "Дата ухвалення банком рішення про видачу кредиту" 1270 | }, 1271 | "available_parts_count": { 1272 | "type": "integer", 1273 | "format": "int32", 1274 | "example": 12, 1275 | "xml": { 1276 | "name": "available_parts_count", 1277 | "attribute": false, 1278 | "wrapped": false 1279 | }, 1280 | "description": "Кількість платежів за кредитом" 1281 | }, 1282 | "bank_executive": { 1283 | "type": "string", 1284 | "example": "Иванов Иван Иванович", 1285 | "xml": { 1286 | "name": "bank_executive", 1287 | "attribute": false, 1288 | "wrapped": false 1289 | }, 1290 | "description": "ПІБ уповноваженої особи банку" 1291 | }, 1292 | "bank_id": { 1293 | "type": "string", 1294 | "example": 12345678, 1295 | "xml": { 1296 | "name": "bank_id", 1297 | "attribute": false, 1298 | "wrapped": false 1299 | }, 1300 | "description": "ОКПО банку, що видає кредит" 1301 | }, 1302 | "bank_name": { 1303 | "type": "string", 1304 | "example": "any bank", 1305 | "xml": { 1306 | "name": "bank_name", 1307 | "attribute": false, 1308 | "wrapped": false 1309 | }, 1310 | "description": "Найменування банку, що видає кредит" 1311 | }, 1312 | "credit_amount": { 1313 | "type": "number", 1314 | "example": 1234.56, 1315 | "xml": { 1316 | "name": "credit_amount", 1317 | "attribute": false, 1318 | "wrapped": false 1319 | }, 1320 | "description": "Схвалена сума кредиту" 1321 | }, 1322 | "credit_product": { 1323 | "type": "string", 1324 | "example": "MONO 234", 1325 | "xml": { 1326 | "name": "credit_product", 1327 | "attribute": false, 1328 | "wrapped": false 1329 | }, 1330 | "description": "Вид кредитного продукту у програмі Продавця" 1331 | }, 1332 | "customer_pay_amount": { 1333 | "type": "number", 1334 | "example": 123.35, 1335 | "xml": { 1336 | "name": "customer_pay_amount", 1337 | "attribute": false, 1338 | "wrapped": false 1339 | }, 1340 | "description": "Схвалена сума початкового внеску" 1341 | }, 1342 | "product_types": { 1343 | "type": "string", 1344 | "example": 1, 1345 | "xml": { 1346 | "name": "product_types", 1347 | "attribute": false, 1348 | "wrapped": false 1349 | }, 1350 | "description": "Продукт. На сьогодні 1 - безвідсоткова розстрочка. 2 - розстрочка зі зниженою ставкою для клієнта (магазин лише частину платить за клієнта)", 1351 | "enum": [ 1352 | "1", 1353 | "2" 1354 | ] 1355 | } 1356 | }, 1357 | "title": "Bank" 1358 | }, 1359 | "CheckInstallmentsResponse": { 1360 | "type": "object", 1361 | "properties": { 1362 | "bank_can_return_money_to_card": { 1363 | "type": "boolean", 1364 | "description": "Ознака того, що гроші можуть повернутись на картку клієнта під час повернення" 1365 | }, 1366 | "fully_paid": { 1367 | "type": "boolean", 1368 | "description": "Ознака того, що заявка повністю оплачена клієнтом" 1369 | } 1370 | }, 1371 | "title": "CheckInstallmentsResponse" 1372 | }, 1373 | "Client": { 1374 | "type": "object", 1375 | "properties": { 1376 | "first_name": { 1377 | "type": "string", 1378 | "example": "Иван", 1379 | "description": "Ім'я клієнта" 1380 | }, 1381 | "inn": { 1382 | "type": "string", 1383 | "example": 123456, 1384 | "description": "ІПН клієнта" 1385 | }, 1386 | "last_name": { 1387 | "type": "string", 1388 | "example": "Иванов", 1389 | "description": "Прізвище клієнта" 1390 | }, 1391 | "middle_name": { 1392 | "type": "string", 1393 | "example": "Иванович", 1394 | "description": "По-батькові клієнта" 1395 | } 1396 | }, 1397 | "title": "Client" 1398 | }, 1399 | "ClientDocuments": { 1400 | "type": "object", 1401 | "properties": { 1402 | "id_card": { 1403 | "description": "Паспорт клієнта нового виду (ID карта)", 1404 | "$ref": "#/components/schemas/IDCardDocument" 1405 | }, 1406 | "international_passport": { 1407 | "description": "Закордонний паспорт", 1408 | "$ref": "#/components/schemas/InternationalPassport" 1409 | }, 1410 | "passport": { 1411 | "description": "Паспорт клієнта", 1412 | "$ref": "#/components/schemas/PassportOrResidencePermitDocument" 1413 | }, 1414 | "residence_permit": { 1415 | "description": "Посвідка на проживання клієнта", 1416 | "$ref": "#/components/schemas/PassportOrResidencePermitDocument" 1417 | } 1418 | }, 1419 | "title": "ClientDocuments" 1420 | }, 1421 | "CreateAdditionalParams": { 1422 | "type": "object", 1423 | "properties": { 1424 | "nds": { 1425 | "type": "number", 1426 | "example": 123.45, 1427 | "description": "Сума ПДВ (потрібна тільки для магазину Foxtrot)" 1428 | }, 1429 | "seller_phone": { 1430 | "type": "string", 1431 | "example": "+380500000001", 1432 | "description": "Телефон продавця (потрібен лише для приймання через telegram бот)", 1433 | "pattern": "\\+380\\d{9}" 1434 | }, 1435 | "ext_initial_sum": { 1436 | "type": "number", 1437 | "example": 100.01, 1438 | "description": "Сума початкового внеску, який сплатив покупець у касі магазину. Ця сума не бере участь у сумі кредиту, що оформляється, і повертається в гарантійному листі." 1439 | } 1440 | }, 1441 | "title": "CreateAdditionalParams" 1442 | }, 1443 | "FinancialCompanyMerchantInfo": { 1444 | "type": "object", 1445 | "properties": { 1446 | "edrpou_code": { 1447 | "type": "string", 1448 | "example": 12345678, 1449 | "description": "Код ЄДРПОУ", 1450 | "pattern": "\\d+" 1451 | }, 1452 | "iban_account": { 1453 | "type": "string", 1454 | "example": "UA123456789012345678901234567", 1455 | "description": "IBAN продавця" 1456 | }, 1457 | "store_name": { 1458 | "type": "string", 1459 | "example": "Електроніка Плюс", 1460 | "description": "Назва магазину" 1461 | } 1462 | }, 1463 | "title": "FinancialCompanyMerchantInfo" 1464 | }, 1465 | "CreateOrderInvoice": { 1466 | "type": "object", 1467 | "required": [ 1468 | "date", 1469 | "number", 1470 | "source" 1471 | ], 1472 | "properties": { 1473 | "date": { 1474 | "type": "string", 1475 | "format": "date", 1476 | "example": "2018-01-23", 1477 | "description": "Дата чека/рахунку фактури. Формат: yyyy-MM-dd" 1478 | }, 1479 | "number": { 1480 | "type": "string", 1481 | "example": "1234-1234", 1482 | "description": "Номер чека/рахунок фактури", 1483 | "minLength": 1, 1484 | "maxLength": 2147483647 1485 | }, 1486 | "point_id": { 1487 | "type": "string", 1488 | "example": 1234, 1489 | "description": "Ідентифікатор торгової точки", 1490 | "minLength": 1, 1491 | "maxLength": 50 1492 | }, 1493 | "source": { 1494 | "type": "string", 1495 | "example": "INTERNET", 1496 | "description": "Канал прийому платежу", 1497 | "enum": [ 1498 | "STORE", 1499 | "INTERNET" 1500 | ] 1501 | } 1502 | }, 1503 | "title": "CreateOrderInvoice" 1504 | }, 1505 | "CreateOrderRequest": { 1506 | "type": "object", 1507 | "required": [ 1508 | "available_programs", 1509 | "client_phone", 1510 | "invoice", 1511 | "products", 1512 | "store_order_id", 1513 | "total_sum" 1514 | ], 1515 | "properties": { 1516 | "store_order_id": { 1517 | "type": "string", 1518 | "example": "DF7D381", 1519 | "description": "Унікальний ідентифікатор транзакції на боці магазину. Потрібен для відсікання дублікатів", 1520 | "minLength": 1, 1521 | "maxLength": 64 1522 | }, 1523 | "client_phone": { 1524 | "type": "string", 1525 | "example": "+380500000000", 1526 | "description": "Телефон клієнта", 1527 | "pattern": "\\+380\\d{9}" 1528 | }, 1529 | "total_sum": { 1530 | "type": "number", 1531 | "example": 234.32, 1532 | "description": "Загальна сума заявки. Розділювач – точка. Має бути 2 знаки після точки", 1533 | "minimum": 1, 1534 | "exclusiveMinimum": false 1535 | }, 1536 | "invoice": { 1537 | "description": "Дані рахунки-фактури", 1538 | "$ref": "#/components/schemas/CreateOrderInvoice" 1539 | }, 1540 | "available_programs": { 1541 | "type": "array", 1542 | "description": "Можливі варіанти розстрочки", 1543 | "items": { 1544 | "$ref": "#/components/schemas/Program" 1545 | } 1546 | }, 1547 | "products": { 1548 | "type": "array", 1549 | "description": "Список продуктів, вибраних для оплати частинами", 1550 | "items": { 1551 | "$ref": "#/components/schemas/Product" 1552 | } 1553 | }, 1554 | "result_callback": { 1555 | "type": "string", 1556 | "example": "https://store-domain/handle/pay-part/result", 1557 | "description": "Адреса сервісу, куди буде надіслано відповідь під час отримання заявкою кінцевого стану. Формат запиту буде аналогічним відповіді [сервісу перевірки станів](/api-docs/chast/servisy/robota-z-zaiavkamy/post--api--order--state) " 1558 | }, 1559 | "financial_company_merchant_info": { 1560 | "description": "Інформація про продавця для фінансової компанії (використовується лише для фінансових компаній)", 1561 | "$ref": "#/components/schemas/FinancialCompanyMerchantInfo" 1562 | }, 1563 | "additional_params": { 1564 | "description": "Додаткові поля (не обов'язкові для заповнення)", 1565 | "$ref": "#/components/schemas/CreateAdditionalParams" 1566 | } 1567 | }, 1568 | "title": "CreateOrderRequest" 1569 | }, 1570 | "CreateOrderResponse": { 1571 | "type": "object", 1572 | "properties": { 1573 | "order_id": { 1574 | "type": "string", 1575 | "example": "ORDER-0023-12345-87654", 1576 | "description": "Унікальний ідентифікатор заявки" 1577 | } 1578 | }, 1579 | "title": "CreateOrderResponse" 1580 | }, 1581 | "Customer": { 1582 | "type": "object", 1583 | "properties": { 1584 | "document": { 1585 | "xml": { 1586 | "name": "document", 1587 | "attribute": false, 1588 | "wrapped": false 1589 | }, 1590 | "description": "Документи клієнта", 1591 | "$ref": "#/components/schemas/ClientDocuments" 1592 | }, 1593 | "first_name": { 1594 | "type": "string", 1595 | "example": "Иван", 1596 | "xml": { 1597 | "name": "first_name", 1598 | "attribute": false, 1599 | "wrapped": false 1600 | }, 1601 | "description": "Ім'я клієнта" 1602 | }, 1603 | "inn": { 1604 | "type": "string", 1605 | "example": "AA123456", 1606 | "xml": { 1607 | "name": "inn", 1608 | "attribute": false, 1609 | "wrapped": false 1610 | }, 1611 | "description": "ІПН клієнта. 10, або 9 цифр, або конкатенація полів <Серія документа клієнта> та <Номер документа клієнта>, якщо клієнт відмовився від отримання ІПН" 1612 | }, 1613 | "last_name": { 1614 | "type": "string", 1615 | "example": "Иванов", 1616 | "xml": { 1617 | "name": "last_name", 1618 | "attribute": false, 1619 | "wrapped": false 1620 | }, 1621 | "description": "Прізвище клієнта" 1622 | }, 1623 | "middle_name": { 1624 | "type": "string", 1625 | "example": "Иванович", 1626 | "xml": { 1627 | "name": "middle_name", 1628 | "attribute": false, 1629 | "wrapped": false 1630 | }, 1631 | "description": "По-батькові клієнта" 1632 | } 1633 | }, 1634 | "title": "Customer" 1635 | }, 1636 | "DailyReportRequest": { 1637 | "type": "object", 1638 | "required": [ 1639 | "date" 1640 | ], 1641 | "properties": { 1642 | "date": { 1643 | "type": "string", 1644 | "format": "date", 1645 | "example": "2018-01-23", 1646 | "description": "дата, за яку потрібно отримати відповідь" 1647 | } 1648 | }, 1649 | "title": "DailyReportRequest" 1650 | }, 1651 | "DailyReportResponse": { 1652 | "type": "object", 1653 | "properties": { 1654 | "orders": { 1655 | "type": "array", 1656 | "description": "Список операцій", 1657 | "items": { 1658 | "$ref": "#/components/schemas/ReportOrder" 1659 | } 1660 | } 1661 | }, 1662 | "title": "DailyReportResponse" 1663 | }, 1664 | "ExceptionResponse": { 1665 | "type": "object", 1666 | "properties": { 1667 | "message": { 1668 | "type": "string", 1669 | "example": "Тіло запиту не відповідає формату json", 1670 | "description": "Текс помилки" 1671 | } 1672 | }, 1673 | "title": "ExceptionResponse" 1674 | }, 1675 | "Expansion": { 1676 | "type": "object", 1677 | "properties": { 1678 | "bank": { 1679 | "xml": { 1680 | "name": "bank", 1681 | "attribute": false, 1682 | "wrapped": false 1683 | }, 1684 | "description": "Дані прийнятого кредитного рішення та банку, що видав кредит", 1685 | "$ref": "#/components/schemas/Bank" 1686 | }, 1687 | "customer": { 1688 | "xml": { 1689 | "name": "customer", 1690 | "attribute": false, 1691 | "wrapped": false 1692 | }, 1693 | "description": "Дані про клієнта", 1694 | "$ref": "#/components/schemas/Customer" 1695 | }, 1696 | "invoice": { 1697 | "xml": { 1698 | "name": "invoice", 1699 | "attribute": false, 1700 | "wrapped": false 1701 | }, 1702 | "description": "Дані рахунки на оплату товару", 1703 | "$ref": "#/components/schemas/Invoice" 1704 | }, 1705 | "payment_destination": { 1706 | "xml": { 1707 | "name": "payment_destination", 1708 | "attribute": false, 1709 | "wrapped": false 1710 | }, 1711 | "description": "Платіжні реквізити для зарахування кредитних коштів", 1712 | "$ref": "#/components/schemas/Payment" 1713 | }, 1714 | "sign": { 1715 | "type": "string", 1716 | "example": "12E0F76458C6D1E4", 1717 | "xml": { 1718 | "name": "sign", 1719 | "attribute": false, 1720 | "wrapped": false 1721 | }, 1722 | "description": "Електронно-цифровий підпис банку. Рядок у кодуванні Base64" 1723 | }, 1724 | "stamp": { 1725 | "type": "string", 1726 | "example": "1199A0F5E7C4A212", 1727 | "xml": { 1728 | "name": "stamp", 1729 | "attribute": false, 1730 | "wrapped": false 1731 | }, 1732 | "description": "Електронна цифрова печатка банку Рядок у кодуванні Base64" 1733 | } 1734 | }, 1735 | "title": "Expansion" 1736 | }, 1737 | "Header": { 1738 | "type": "object", 1739 | "properties": { 1740 | "answer_datetime": { 1741 | "type": "string", 1742 | "format": "date-time", 1743 | "example": "2018-01-25T12:36:01", 1744 | "xml": { 1745 | "name": "answer_datetime", 1746 | "attribute": false, 1747 | "wrapped": false 1748 | }, 1749 | "description": "Дата та час формування даного гарантійного листа" 1750 | }, 1751 | "contract_date": { 1752 | "type": "string", 1753 | "format": "date", 1754 | "example": "2018-01-25", 1755 | "xml": { 1756 | "name": "contract_date", 1757 | "attribute": false, 1758 | "wrapped": false 1759 | }, 1760 | "description": "Дата договору між банком та магазином" 1761 | }, 1762 | "contract_number": { 1763 | "type": "string", 1764 | "example": 12345678, 1765 | "xml": { 1766 | "name": "contract_number", 1767 | "attribute": false, 1768 | "wrapped": false 1769 | }, 1770 | "description": "Номер договору між банком та магазином" 1771 | }, 1772 | "from_organization": { 1773 | "type": "string", 1774 | "example": "any bank", 1775 | "xml": { 1776 | "name": "from_organization", 1777 | "attribute": false, 1778 | "wrapped": false 1779 | }, 1780 | "description": "Найменування банку, що видає кредит" 1781 | }, 1782 | "organization_id": { 1783 | "type": "string", 1784 | "example": 12345678, 1785 | "xml": { 1786 | "name": "organization_id", 1787 | "attribute": false, 1788 | "wrapped": false 1789 | }, 1790 | "description": "ОКПО банку, що видає кредит" 1791 | }, 1792 | "request_id": { 1793 | "type": "string", 1794 | "example": "123-123-1234", 1795 | "xml": { 1796 | "name": "request_id", 1797 | "attribute": false, 1798 | "wrapped": false 1799 | }, 1800 | "description": "ID заявки у системі банку. Номер кредитного договору" 1801 | } 1802 | }, 1803 | "title": "Header" 1804 | }, 1805 | "IDCardDocument": { 1806 | "type": "object", 1807 | "properties": { 1808 | "date_of_issue": { 1809 | "type": "string", 1810 | "example": "1901-01-29", 1811 | "description": "Дата видачі документа клієнту" 1812 | }, 1813 | "issued": { 1814 | "type": "string", 1815 | "example": 1234, 1816 | "description": "Орган видачі документа клієнта" 1817 | }, 1818 | "number": { 1819 | "type": "string", 1820 | "example": 123456, 1821 | "description": "Номер документа клієнта" 1822 | }, 1823 | "registry_number": { 1824 | "type": "string", 1825 | "example": "12345678-12345", 1826 | "description": "№ запису паспорта у реєстрі. 13 цифр або 8 цифр дефіс 5 цифр. Обов'язкове поле <Тип документа клієнта> = 1" 1827 | }, 1828 | "valid_until": { 1829 | "type": "string", 1830 | "format": "date", 1831 | "example": "2025-01-25", 1832 | "description": "Термін дії документа клієнта" 1833 | } 1834 | }, 1835 | "title": "IDCardDocument" 1836 | }, 1837 | "InstallmentAvailabilityRequest": { 1838 | "type": "object", 1839 | "required": [ 1840 | "amount", 1841 | "employeeID", 1842 | "inn", 1843 | "outletID", 1844 | "phone" 1845 | ], 1846 | "properties": { 1847 | "amount": { 1848 | "type": "number", 1849 | "description": "сума товару, який клієнт хоче купити" 1850 | }, 1851 | "employeeID": { 1852 | "type": "string", 1853 | "description": "Ідентифікатор співробітника (якщо це онлайн операція — технічний логін)", 1854 | "minLength": 1, 1855 | "maxLength": 2147483647 1856 | }, 1857 | "inn": { 1858 | "type": "string", 1859 | "description": "ІПН клієнта" 1860 | }, 1861 | "outletID": { 1862 | "type": "string", 1863 | "description": "Ідентифікатор торгової точки, в якій відбувається продаж", 1864 | "minLength": 1, 1865 | "maxLength": 2147483647 1866 | }, 1867 | "phone": { 1868 | "type": "string", 1869 | "example": "+380500000001", 1870 | "description": "Номер телефону клієнта", 1871 | "pattern": "\\+380\\d{9}" 1872 | } 1873 | }, 1874 | "title": "InstallmentAvailabilityRequest" 1875 | }, 1876 | "InstallmentAvailabilityResponse": { 1877 | "type": "object", 1878 | "properties": { 1879 | "available": { 1880 | "type": "boolean", 1881 | "description": "Ознака того, що клієнтові доступна ПЧ на цю суму" 1882 | } 1883 | }, 1884 | "title": "InstallmentAvailabilityResponse" 1885 | }, 1886 | "InternationalPassport": { 1887 | "type": "object", 1888 | "properties": { 1889 | "date_of_issue": { 1890 | "type": "string", 1891 | "example": "1901-01-29", 1892 | "description": "Дата видачі документа клієнту" 1893 | }, 1894 | "number": { 1895 | "type": "string", 1896 | "example": 123456, 1897 | "description": "Номер документа клієнта" 1898 | }, 1899 | "series": { 1900 | "type": "string", 1901 | "example": "FV", 1902 | "description": "Серія паспорта" 1903 | }, 1904 | "valid_until": { 1905 | "type": "string", 1906 | "format": "date", 1907 | "example": "2025-01-25", 1908 | "description": "Термін дії документа клієнта" 1909 | } 1910 | }, 1911 | "title": "InternationalPassport" 1912 | }, 1913 | "Invoice": { 1914 | "type": "object", 1915 | "properties": { 1916 | "invoice_amount": { 1917 | "type": "number", 1918 | "example": 1234.56, 1919 | "xml": { 1920 | "name": "invoice_amount", 1921 | "attribute": false, 1922 | "wrapped": false 1923 | }, 1924 | "description": "Сума рахунку-фактури" 1925 | }, 1926 | "invoice_date": { 1927 | "type": "string", 1928 | "format": "date", 1929 | "example": "2018-01-25", 1930 | "xml": { 1931 | "name": "invoice_date", 1932 | "attribute": false, 1933 | "wrapped": false 1934 | }, 1935 | "description": "Дата рахунку-фактури" 1936 | }, 1937 | "invoice_number": { 1938 | "type": "string", 1939 | "example": "1234-1234-1234", 1940 | "xml": { 1941 | "name": "invoice_number", 1942 | "attribute": false, 1943 | "wrapped": false 1944 | }, 1945 | "description": "Номер рахунку-фактури" 1946 | } 1947 | }, 1948 | "title": "Invoice" 1949 | }, 1950 | "OrderData": { 1951 | "type": "object", 1952 | "properties": { 1953 | "header": { 1954 | "xml": { 1955 | "name": "header", 1956 | "attribute": false, 1957 | "wrapped": false 1958 | }, 1959 | "$ref": "#/components/schemas/Header" 1960 | }, 1961 | "expansion": { 1962 | "xml": { 1963 | "name": "expansion", 1964 | "attribute": false, 1965 | "wrapped": false 1966 | }, 1967 | "description": "Розширення", 1968 | "$ref": "#/components/schemas/Expansion" 1969 | } 1970 | }, 1971 | "title": "OrderData" 1972 | }, 1973 | "OrderDataRequest": { 1974 | "type": "object", 1975 | "required": [ 1976 | "order_id" 1977 | ], 1978 | "properties": { 1979 | "invoice": { 1980 | "$ref": "#/components/schemas/OrderDataRequestInvoice" 1981 | }, 1982 | "order_id": { 1983 | "type": "string", 1984 | "example": "ORDER-0023", 1985 | "description": "Унікальний ідентифікатор заявки", 1986 | "minLength": 1, 1987 | "maxLength": 100, 1988 | "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" 1989 | } 1990 | }, 1991 | "title": "OrderDataRequest" 1992 | }, 1993 | "OrderDataRequestInvoice": { 1994 | "type": "object", 1995 | "properties": { 1996 | "date": { 1997 | "type": "string", 1998 | "format": "date", 1999 | "example": "2018-01-23", 2000 | "xml": { 2001 | "name": "date", 2002 | "attribute": true, 2003 | "wrapped": false 2004 | }, 2005 | "description": "Дата чека/рахунку фактури. Формат: yyyy-MM-dd" 2006 | }, 2007 | "number": { 2008 | "type": "string", 2009 | "example": "002334", 2010 | "xml": { 2011 | "name": "number", 2012 | "attribute": true, 2013 | "wrapped": false 2014 | }, 2015 | "description": "Номер чека/рахунку фактури", 2016 | "minLength": 1, 2017 | "maxLength": 2147483647 2018 | } 2019 | }, 2020 | "title": "OrderDataRequestInvoice" 2021 | }, 2022 | "OrderShortInfo": { 2023 | "type": "object", 2024 | "properties": { 2025 | "create_timestamp": { 2026 | "type": "string", 2027 | "format": "date-time", 2028 | "example": "2021-06-16T16:49:51", 2029 | "description": "Дата та час подання завки на ПЧ. Формат: yyyy-MM-dd'T'HH:mm:ss" 2030 | }, 2031 | "invoice_date": { 2032 | "type": "string", 2033 | "format": "date", 2034 | "example": "2018-01-23", 2035 | "description": "Дата чека/рахунку фактури. Формат: yyyy-MM-dd" 2036 | }, 2037 | "invoice_number": { 2038 | "type": "string", 2039 | "example": "1234-1234", 2040 | "description": "Номер чека/рахунку фактуры" 2041 | }, 2042 | "maskedCard": { 2043 | "type": "string", 2044 | "description": "Маскований номер карти" 2045 | }, 2046 | "point_id": { 2047 | "type": "string", 2048 | "example": 1234, 2049 | "description": "Ідентифікатор торгової точки" 2050 | }, 2051 | "reverse_list": { 2052 | "type": "array", 2053 | "description": "Список повернень (може бути пустим)", 2054 | "items": { 2055 | "$ref": "#/components/schemas/Reverse" 2056 | } 2057 | }, 2058 | "source": { 2059 | "type": "string", 2060 | "example": "INTERNET", 2061 | "description": "Канал приймання платежу", 2062 | "enum": [ 2063 | "INTERNET", 2064 | "STORE" 2065 | ] 2066 | }, 2067 | "store_order_id": { 2068 | "type": "string", 2069 | "example": "DF7D381", 2070 | "description": "Унікальний ідентифікатор транзакції на боці магазину" 2071 | }, 2072 | "total_sum": { 2073 | "type": "number", 2074 | "example": 234.32, 2075 | "description": "Загальна сума заявки." 2076 | } 2077 | }, 2078 | "title": "OrderShortInfo" 2079 | }, 2080 | "OrderStateInfo": { 2081 | "type": "object", 2082 | "properties": { 2083 | "message": { 2084 | "type": "string", 2085 | "description": "Додатковий опис (може не бути)" 2086 | }, 2087 | "order_id": { 2088 | "type": "string", 2089 | "example": "ORDER-0001", 2090 | "description": "Ідентифікатор заявки" 2091 | }, 2092 | "order_sub_state": { 2093 | "type": "string", 2094 | "example": "REJECTED_BY_CLIENT", 2095 | "description": "Детальний стан заявки. Можливі варіанти:\n* ADDED - заявку додано на опрацювання\n* CLIENT_NOT_FOUND - клієнта не знайдено\n* EXCEEDED_SUM_LIMIT - клієнт перевищив допустимий ліміт на покупку частинами\n* PAY_PARTS_ARE_NOT_ACCEPTABLE - із цією кількістю платежів клієнт не може оформити розстрочку\n* CLIENT_CONFIRM_TIME_EXPIRED - минув час підтвердження заявки клієнтом\n* WAITING_FOR_CLIENT - очікування на підтвердження від клієнта\n* REJECTED_BY_CLIENT - клієнт відмовився від здійснення покупки\n* REJECTED_BY_STORE - магазин відмовився від продажу\n* WAITING_FOR_STORE_CONFIRM - очікування від магазину підтвердження заявки (стан можливий тільки для магазинів з двотактним підтвердженням заявки)\n* SUCCESS - заявку успішно опрацьовано\nНадалі цей список може бути розширений\n", 2096 | "enum": [ 2097 | "ADDED", 2098 | "INTERNAL_ADDED", 2099 | "INTERNAL_CHECKED", 2100 | "CLIENT_NOT_FOUND", 2101 | "WRONG_CLIENT_APP_VERSION", 2102 | "EXCEEDED_SUM_LIMIT", 2103 | "ACCOUNT_CLOSED", 2104 | "PAY_PARTS_ARE_NOT_ACCEPTABLE", 2105 | "EXISTS_OTHER_OPEN_ORDER", 2106 | "EXISTS_EXT_OTHER_OPEN_ORDER", 2107 | "NOT_ENOUGH_MONEY_FOR_INIT_DEBIT", 2108 | "CHECKED", 2109 | "WAITING_FOR_CLIENT", 2110 | "CLIENT_APPROVED_PUSH", 2111 | "INIT_DEBIT_SENT", 2112 | "INIT_DEBIT_OK", 2113 | "CLIENT_PUSH_TIMEOUT", 2114 | "CONFIRM_TIME_EXPIRED", 2115 | "FRAUD_REJECTED", 2116 | "REJECTED_BY_CLIENT", 2117 | "WAITING_FOR_STORE_CONFIRM", 2118 | "REJECTED_BY_STORE", 2119 | "ACTIVE", 2120 | "DONE", 2121 | "EARLY_CLOSED_BY_CLIENT", 2122 | "RETURNED", 2123 | "FAIL", 2124 | "RESTRICTED_BY_RISKS" 2125 | ] 2126 | }, 2127 | "state": { 2128 | "type": "string", 2129 | "example": "FAIL", 2130 | "description": "Поточний стан заявки (загальне). Можливі варіанти:\n* SUCCESS - заявку успішно опрацьовано (кінцевий стан)\n* FAIL - заявку забраковано (кінцевий стан)\n* IN_PROCESS - заявка у процесі опрацювання\nТаблиця відповідності загального стану з деталями:\n\nЗагальний стан | Детальний стан\n------------ | -------------\nSUCCESS | SUCCESS\nFAIL | CLIENT_NOT_FOUND\nFAIL | EXCEEDED_SUM_LIMIT\nFAIL | PAY_PARTS_ARE_NOT_ACCEPTABLE\nFAIL | CLIENT_CONFIRM_TIME_EXPIRED\nFAIL | REJECTED_BY_CLIENT\nFAIL | REJECTED_BY_STORE\nIN_PROCESS | ADDED\nIN_PROCESS | WAITING_FOR_CLIENT\nIN_PROCESS | WAITING_FOR_STORE_CONFIRM\n\n", 2131 | "enum": [ 2132 | "SUCCESS", 2133 | "FAIL", 2134 | "IN_PROCESS" 2135 | ] 2136 | } 2137 | }, 2138 | "title": "OrderStateInfo" 2139 | }, 2140 | "PassportOrResidencePermitDocument": { 2141 | "type": "object", 2142 | "properties": { 2143 | "date_of_issue": { 2144 | "type": "string", 2145 | "example": "1901-01-29", 2146 | "description": "Дата видачі документа клієнту" 2147 | }, 2148 | "issued": { 2149 | "type": "string", 2150 | "example": 1234, 2151 | "description": "Орган видачі документа клієнта" 2152 | }, 2153 | "number": { 2154 | "type": "string", 2155 | "example": 123456, 2156 | "description": "Номер документа клієнта" 2157 | }, 2158 | "series": { 2159 | "type": "string", 2160 | "example": "AA", 2161 | "description": "Серія паспорта / Серія посвідки на проживання" 2162 | } 2163 | }, 2164 | "title": "PassportOrResidencePermitDocument" 2165 | }, 2166 | "Payment": { 2167 | "type": "object", 2168 | "properties": { 2169 | "dest_acc_number": { 2170 | "type": "string", 2171 | "example": 1234567890123, 2172 | "xml": { 2173 | "name": "dest_acc_number", 2174 | "attribute": false, 2175 | "wrapped": false 2176 | }, 2177 | "description": "Номер рахунку для зарахування коштів" 2178 | }, 2179 | "dest_bank_name": { 2180 | "type": "string", 2181 | "example": "any bank", 2182 | "xml": { 2183 | "name": "dest_bank_name", 2184 | "attribute": false, 2185 | "wrapped": false 2186 | }, 2187 | "description": "Найменування банку, в якому відкрито рахунок для зарахування коштів" 2188 | }, 2189 | "dest_id": { 2190 | "type": "string", 2191 | "example": 12345678, 2192 | "xml": { 2193 | "name": "dest_id", 2194 | "attribute": false, 2195 | "wrapped": false 2196 | }, 2197 | "description": "ОКПО компанії, на рахунок якої будуть зараховані кошти" 2198 | }, 2199 | "dest_mfo": { 2200 | "type": "string", 2201 | "example": 123456, 2202 | "xml": { 2203 | "name": "dest_mfo", 2204 | "attribute": false, 2205 | "wrapped": false 2206 | }, 2207 | "description": "МФО банку, в якому відкрито рахунок для зарахування коштів" 2208 | }, 2209 | "dest_name": { 2210 | "type": "string", 2211 | "example": "any super company", 2212 | "xml": { 2213 | "name": "dest_name", 2214 | "attribute": false, 2215 | "wrapped": false 2216 | }, 2217 | "description": "Найменування компанії, на рахунок якої буде зараховано кошти" 2218 | } 2219 | }, 2220 | "title": "Payment" 2221 | }, 2222 | "Product": { 2223 | "type": "object", 2224 | "required": [ 2225 | "count", 2226 | "name", 2227 | "sum" 2228 | ], 2229 | "properties": { 2230 | "name": { 2231 | "type": "string", 2232 | "example": "Телевизор", 2233 | "description": "Найменування товару", 2234 | "minLength": 1, 2235 | "maxLength": 500 2236 | }, 2237 | "count": { 2238 | "type": "integer", 2239 | "format": "int32", 2240 | "example": 3, 2241 | "description": "Кількість товару цього виду", 2242 | "minimum": 1, 2243 | "exclusiveMinimum": false 2244 | }, 2245 | "sum": { 2246 | "type": "number", 2247 | "example": 9999.99, 2248 | "description": "Ціна за одиницю товару. Розділювач – точка. Має бути 2 знаки після точки", 2249 | "minimum": 0.01, 2250 | "exclusiveMinimum": false 2251 | } 2252 | }, 2253 | "title": "Product" 2254 | }, 2255 | "Program": { 2256 | "type": "object", 2257 | "required": [ 2258 | "available_parts_count", 2259 | "type" 2260 | ], 2261 | "properties": { 2262 | "available_parts_count": { 2263 | "type": "array", 2264 | "example": [ 2265 | 10 2266 | ], 2267 | "description": "Кількість частин, на яку оформити заявку", 2268 | "items": { 2269 | "type": "integer", 2270 | "format": "int32", 2271 | "minimum": 1, 2272 | "maximum": 2147483647 2273 | } 2274 | }, 2275 | "type": { 2276 | "type": "string", 2277 | "example": "product _1", 2278 | "description": "Тип / наименование / идентификатор рассрочки. На текущий момент возможное только одно значение: payment_installments", 2279 | "pattern": "^payment_installments$" 2280 | } 2281 | }, 2282 | "title": "Program" 2283 | }, 2284 | "ReportOrder": { 2285 | "type": "object", 2286 | "properties": { 2287 | "commission": { 2288 | "type": "number", 2289 | "description": "Сума комісії" 2290 | }, 2291 | "commission_percent": { 2292 | "type": "number", 2293 | "description": "% комісії" 2294 | }, 2295 | "invoice_number": { 2296 | "type": "string", 2297 | "description": "№ рахунки фактури" 2298 | }, 2299 | "odb_contract_number": { 2300 | "type": "string", 2301 | "description": "Номер кредитного договору" 2302 | }, 2303 | "operation_timestamp": { 2304 | "type": "string", 2305 | "format": "date-time", 2306 | "description": "Дата та час операції" 2307 | }, 2308 | "order_date": { 2309 | "type": "string", 2310 | "format": "date", 2311 | "description": "Дата рахунку фактури. Формат: yyyy-MM-dd" 2312 | }, 2313 | "order_id": { 2314 | "type": "string", 2315 | "description": "Ідентифікатор ПЧ" 2316 | }, 2317 | "pay_parts": { 2318 | "type": "integer", 2319 | "format": "int32", 2320 | "description": "Кількість щомісячних платежів згідно з кредитним договором" 2321 | }, 2322 | "total_sum": { 2323 | "type": "number", 2324 | "description": "Сума кредиту" 2325 | }, 2326 | "transferred_sum": { 2327 | "type": "number", 2328 | "description": "Перерахована сума" 2329 | } 2330 | }, 2331 | "title": "ReportOrder" 2332 | }, 2333 | "RequestClientInfoRequest": { 2334 | "type": "object", 2335 | "required": [ 2336 | "phone" 2337 | ], 2338 | "properties": { 2339 | "callbackUrl": { 2340 | "type": "string", 2341 | "description": "Адреса сервісу, куди буде надіслано колбек із рішенням клієнта" 2342 | }, 2343 | "extref": { 2344 | "type": "string", 2345 | "description": "Унікальний ідентифікатор на боці сторони, що викликає" 2346 | }, 2347 | "phone": { 2348 | "type": "string", 2349 | "description": "Номер телефону клієнта", 2350 | "pattern": "\\+380\\d{9}" 2351 | } 2352 | }, 2353 | "title": "RequestClientInfoRequest" 2354 | }, 2355 | "RequestWithOrderIdentifier": { 2356 | "type": "object", 2357 | "required": [ 2358 | "order_id" 2359 | ], 2360 | "properties": { 2361 | "order_id": { 2362 | "type": "string", 2363 | "example": "ORDER-0023", 2364 | "description": "Унікальний ідентифікатор заявки", 2365 | "minLength": 1, 2366 | "maxLength": 100, 2367 | "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" 2368 | } 2369 | }, 2370 | "title": "RequestWithOrderIdentifier" 2371 | }, 2372 | "ReturnAdditionalParams": { 2373 | "type": "object", 2374 | "properties": { 2375 | "nds": { 2376 | "type": "number", 2377 | "example": 123.45, 2378 | "description": "Сума ПДВ (потрібна тільки для магазину Foxtrot)" 2379 | } 2380 | }, 2381 | "title": "ReturnAdditionalParams" 2382 | }, 2383 | "ReturnRequest": { 2384 | "type": "object", 2385 | "required": [ 2386 | "order_id", 2387 | "return_money_to_card", 2388 | "store_return_id", 2389 | "sum" 2390 | ], 2391 | "properties": { 2392 | "order_id": { 2393 | "type": "string", 2394 | "example": "ORDER-0023", 2395 | "description": "Унікальний ідентифікатор заявки", 2396 | "minLength": 1, 2397 | "maxLength": 100, 2398 | "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" 2399 | }, 2400 | "return_money_to_card": { 2401 | "type": "boolean", 2402 | "example": true, 2403 | "description": "Ознака необхідності повернення грошей на картку клієнта. TRUE — банк повинен повернути гроші на картку клієнта, FALSE — магазин сам повернув готівку клієнтові" 2404 | }, 2405 | "store_return_id": { 2406 | "type": "string", 2407 | "example": 12345, 2408 | "description": "Ідентифікатор повернення на боці магазину. Має бути унікальним для кожного повернення (в рамках одної ПЧ)", 2409 | "minLength": 1, 2410 | "maxLength": 2147483647 2411 | }, 2412 | "sum": { 2413 | "type": "number", 2414 | "example": 12345, 2415 | "description": "Сума товарів, які необхідно повернути", 2416 | "minimum": 0.01, 2417 | "exclusiveMinimum": false 2418 | }, 2419 | "additional_params": { 2420 | "description": "Додаткові поля (не обов'язкові для заповнення)", 2421 | "$ref": "#/components/schemas/ReturnAdditionalParams" 2422 | } 2423 | }, 2424 | "title": "ReturnRequest" 2425 | }, 2426 | "ReturnResponse": { 2427 | "type": "object", 2428 | "properties": { 2429 | "status": { 2430 | "type": "string", 2431 | "example": "OK", 2432 | "description": "Статус повернення. OK — повернення прийнято успішно, інакше — помилка" 2433 | } 2434 | }, 2435 | "title": "ReturnResponse" 2436 | }, 2437 | "Reverse": { 2438 | "type": "object", 2439 | "properties": { 2440 | "sum": { 2441 | "type": "number", 2442 | "description": "Сума повернення" 2443 | }, 2444 | "timestamp": { 2445 | "type": "string", 2446 | "format": "date-time", 2447 | "example": "2021-06-16T16:49:51", 2448 | "description": "Дата та час повернення. Формат: yyyy-MM-dd'T'HH:mm:ss" 2449 | } 2450 | }, 2451 | "title": "Reverse" 2452 | }, 2453 | "ValidateClientRequest": { 2454 | "type": "object", 2455 | "properties": { 2456 | "phone": { 2457 | "type": "string", 2458 | "example": "+380000000001", 2459 | "description": "Номер телефону клієнта", 2460 | "pattern": "\\+380\\d{9}" 2461 | } 2462 | }, 2463 | "title": "ValidateClientRequest" 2464 | }, 2465 | "ValidateClientResponse": { 2466 | "type": "object", 2467 | "properties": { 2468 | "client": { 2469 | "description": "Дані клієнта", 2470 | "$ref": "#/components/schemas/Client" 2471 | }, 2472 | "found": { 2473 | "type": "boolean", 2474 | "description": "Ознака того, що клієнта знайдено" 2475 | } 2476 | }, 2477 | "title": "ValidateClientResponse" 2478 | }, 2479 | "ValidateClientSimpleResponse": { 2480 | "type": "object", 2481 | "properties": { 2482 | "found": { 2483 | "type": "boolean", 2484 | "description": "Ознака того, що клієнта знайдено" 2485 | } 2486 | }, 2487 | "title": "ValidateClientSimpleResponse" 2488 | } 2489 | }, 2490 | "requestBodies": { 2491 | "ValidateClientRequest": { 2492 | "content": { 2493 | "application/json;charset=UTF-8": { 2494 | "schema": { 2495 | "$ref": "#/components/schemas/ValidateClientRequest" 2496 | } 2497 | } 2498 | }, 2499 | "description": "request", 2500 | "required": true 2501 | }, 2502 | "RequestWithOrderIdentifier": { 2503 | "content": { 2504 | "application/json;charset=UTF-8": { 2505 | "schema": { 2506 | "$ref": "#/components/schemas/RequestWithOrderIdentifier" 2507 | } 2508 | } 2509 | }, 2510 | "description": "request", 2511 | "required": true 2512 | }, 2513 | "OrderDataRequest": { 2514 | "content": { 2515 | "application/xml": { 2516 | "schema": { 2517 | "$ref": "#/components/schemas/OrderDataRequest" 2518 | } 2519 | }, 2520 | "application/json;charset=UTF-8": { 2521 | "schema": { 2522 | "$ref": "#/components/schemas/OrderDataRequest" 2523 | } 2524 | } 2525 | }, 2526 | "description": "request", 2527 | "required": true 2528 | } 2529 | } 2530 | } 2531 | } --------------------------------------------------------------------------------