diff --git a/README.md b/README.md
new file mode 100644
index 0000000..1509f2c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,329 @@
+
+
+
+
+
+
+
+
+
+
+
+## Про проект
+
+Адаптивний сервіс для класифікації та моніторингу персональних витрат.
+Має CRUD операції для керування операціями та категоріями.
+Створює персональну статистику витрат, яку можна візуалізувати у діаграмах.
+Дозволяє створювати обмеження на витрати по категоріям.
+Має можливість синхронізуватись з банками (Monobank) для отримання витрат у реальному часі.
+
+## Про розробку
+
+Проектування проекту відбувалось по принципу DDD та чистої архітектури.
+Він поділений на шари бізнес-логіки, доменів, адаптерів та інфраструктури.
+За допомогою Dependency Inversion вдалось побудувати правильну ієрархію залежностей:
+```
+Domens <- Uses cases <- adapters <- infrastructure
+```
+Де стрілками показана залежність шару від іншого.
+Тобто, інфраструктура залежить від вищих шарів, адаптери від бізнес логіки та доменів,
+бізнес логіка тільки від доменів а домени це незалежні частини програмного продукту.
+
+Розроблявся додаток за принципом TDD, де спочатчку для правильного проектування структур і алгоритмів
+розроблялись тести, де формувались вимоги до коду, а потім розроблявся сам код щоб ці вимоги задовольнити.
+
+Для автоматичних тестів та розгортання був застосований GitHub Actions. Для контейнеризації був застосований Docker.
+
+
+## Документація
+
+### `GET` `/users/` - get current user info
+
+**Headers**
+```
+Authorization:
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-------------:|:-------------:|
+| `200` | Ok |
+| `401` | Unauthorized |
+
+**Response:**
+```
+{
+ "id": int,
+ "email": string,
+}
+```
+---
+### `POST` `/users/` - create user
+
+**Request data:**
+```
+{
+ "email": string,
+ "password": string,
+}
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:-----------------:|
+| `201` | Created |
+| `422` | Validation Error |
+
+**Response data:**
+```
+{
+ "id": int,
+ "email": string,
+}
+```
+---
+### `POST` `/token/` - login for access token
+
+**Request data:**
+```
+{
+ "username": string (email),
+ "password": string,
+}
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:----------------:|
+| `200` | Ok |
+| `422` | Validation Error |
+
+**Response data:**
+```
+{
+ "access_token": "string",
+ "token_type": "string"
+}
+```
+---
+### `POST` `/operations/` - create operation
+
+**Headers**
+```
+Authorization:
+```
+
+**Request data:**
+```
+{
+ "amount": int,
+ "description": "string",
+ "source_type": "string",
+ "time": int,
+ "category_id": int
+}
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:-----------------:|
+| `201` | Created |
+| `422` | Validation Error |
+
+**Response data:**
+```
+{
+ "id": int,
+ "amount": int,
+ "description": "string",
+ "source_type": "string",
+ "time": int,
+ "category_id": int,
+ "subcategory_id": int
+}
+```
+---
+### `GET` `/operations/` - get list of operations
+
+**Headers**
+```
+Authorization:
+```
+
+**Request parameters:**
+```
+from_time: int
+to_time: int
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:-----------------:|
+| `200` | Created |
+| `422` | Validation Error |
+
+**Response data:**
+```
+[
+ {
+ "amount": int,
+ "description": "string",
+ "source_type": "string",
+ "time": int,
+ "category_id": int,
+ "id": int,
+ "subcategory_id": int
+ }
+]
+```
+---
+### `GET` `/bankapi/` - get list of connected banks names
+
+**Headers**
+```
+Authorization:
+```
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:-----------:|
+| `200` | Ok |
+
+
+**Response data:**
+```
+[
+ "string"
+]
+```
+---
+### `DELETE` `/bankapi/` - delete record of connect to bank
+
+**Headers**
+```
+Authorization:
+```
+
+**Request parameters:**
+```
+bank_name: string
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:----------------:|
+| `204` | No content |
+| `422` | Validation Error |
+
+---
+### `GET` `/bankapi/costs/` - update costs by banks API
+
+**Headers**
+```
+Authorization:
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:-----------:|
+| `200` | Ok |
+---
+### `GET` `/statistic/` - get statistic
+
+**Headers**
+```
+Authorization:
+```
+
+**Request parameters:**
+```
+from_time: int
+to_time: int
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:-----------------:|
+| `200` | Created |
+
+**Response data:**
+```
+{
+ "costs_sum": 0,
+ "categories_costs": {},
+ "costs_num_by_days": {},
+ "costs_sum_by_days": {}
+}
+```
+---
+### `POST` `/categories/` - create category
+
+**Headers**
+```
+Authorization:
+```
+
+**Request data:**
+```
+{
+ "name": "string",
+ "icon_name": "string",
+ "icon_color": "string"
+}
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:-----------------:|
+| `201` | Created |
+| `422` | Validation Error |
+
+**Response data:**
+```
+{
+ "name": "string",
+ "id": int,
+ "user_id": int,
+ "type": "string",
+ "icon_name": "string",
+ "icon_color": "string",
+ "parent_id": int
+}
+```
+---
+### `GET` `/categories/` - get list of categories
+
+**Headers**
+```
+Authorization:
+```
+
+**Status codes:**
+
+| Status Code | Description |
+|:-----------:|:----------------:|
+| `200` | Ok |
+
+**Response data:**
+```
+[
+ {
+ "name": "string",
+ "id": int,
+ "user_id": int,
+ "type": "string",
+ "icon_name": "string",
+ "icon_color": "string",
+ "parent_id": int
+ }
+]
+```