---
# System prepended metadata

title: Untitled

---

## Endpoints - MVP (Requirements)

### POST /bankAccount

> Add new bank account

_Request Header_
```
not needed
```

_Request Params_
```
not needed
```

_Request Body_
```
{
    "currency": "IDR",
    "bank_code": "014"
    "account_number": "0123456"
    "account_holder_name": "Galuh Adika Alifani"
    "merchant_id": 1
}
```

_Field validations_
```
currency: ["IDR", "USD", "MYR", "PHP", "SGD"]
```

_Response (201 - created)_
```
{
    "message": "Success adding IDR bank account"
    "bank":
        {
            "id": 1
            "currency": "IDR",
            "bank_code": "014"
            "account_number": "0123456"
            "account_holder_name": "Galuh Adika Alifani"
            "merchant_id": 1
        }
}
```

_Response (400 - Bad Request)_
```
{
    "error": "Bad Request",
    "message": "Bank account already exists. Can not add duplicate account"
}
```
```
{
    "error": "Bad Request",
    "message": "Can not add more than one account with the same currency. Account for IDR already exists"
}
```
```
{
    "error": "Bad Request - Validation Error",
    "message": [
        "Available currencies are IDR, USD, MYR, PHP, and SGD",
        "Currency cannot be empty"
        "Account Number cannot be empty",
        "Acc Holder Name cannot be empty",
        "Bank Code cannot be empty"
      ]
}
```

_Response (403 - Forbidden)_
```
{
    "error": "Merchant ID Not Found",
    "message": "Incorrect merchant ID / Merchant does not exist"
}
```
```
{
    "error": "Database Field Error",
    "message": "Incorrect bank or merchant ID"
}
```

_Response (500 - Internal Server Error)_
```
{
    "error": "Internal Server Error",
    "message": "Failed adding bank account"
}
```
---
### PUT /bankAccount/:bankId

> Edit existing bank account

_Request Header_
```
not needed
```

_Request Params_
```
{
    "bankId": uuid (required)
}
```

_Request Body_
```
{
    "bank_code": "011"
    "account_number": "0987654"
    "account_holder_name": "Galuh Adika Alifani"
}
```

_Response (200)_
```
{
    "message": "Success modifying IDR bank account"
    "bank":
        {
            "id": 1
            "currency": "IDR",
            "bank_code": "011"
            "account_number": "0987654"
            "account_holder_name": "Galuh Adika Alifani"
        }
}
```

_Response (400 - Bad Request)_
```
{
    "error": "Bad Request - Validation Error",
    "message": [
        "Account Number cannot be empty",
        "Acc Holder Name cannot be empty",
        "Bank Code cannot be empty"
      ]
}
```

_Response (403 - Forbidden)_
```
{
    "error": "Database Field Error",
    "message": "Incorrect bank or merchant ID"
}
```

_Response (404 - Not Found)_
```
{
    "error": "Bank ID Not Found",
    "message": "Bank account not found. Please try again or select other account"
}
```

_Response (500 - Internal Server Error)_
```
{
    "error": "Internal Server Error",
    "message": "Failed editing bank account"
}
```
---
### GET /withdrawal/:merchantId

> See all withdrawals

_Request Header_
```
not needed
```

_Request Params_
```
{
    "merchantId": uuid (required)
}
```

_Request Query (optional)_
- Query fields
```
?currency=<currency>&year=<year>&month=<month>&limit=<pagelimit>&page=<currentpage>
```
- Query restrictions / assumptions
    - _Page is the current page, Limit is the number of items displayed per page_
    - _If no page or limit query is added, response will return the whole items without pagination_
    - _If either one of page or limit query is entered, the default pagination will be: page = 1 and limit = 10_
    - _If month is inputted without year, it will filter items for the given month in the current year_
    - _If year is inputted without month, it will filter items for the whole given year_


_Request Body_
```
not needed
```

_Response (200)_
```
{
    "merchantName": "Galuh Alifani"
    "totalItems": 8,
    "totalPages": 4,
    "currentPage": 2,
    "withdrawals": [
        {
            "amount": 100000,
            "status": "pending",
            "createdAt": "Wed Aug 25 2021"
            "currency": "IDR",
            "bank_code": "014",
            "account_number": "012345",
            "account_holder_name": "Galuh Alifani"
        },
        {
            "amount": 300,
            "status": "pending",
            "createdAt": "Wed Aug 25 2021"
            "currency": "MYR",
            "bank_code": "011",
            "account_number": "0987654",
            "account_holder_name": "Galuh Alifani"
        }
    ]
}
```

_Response (400 - Bad Request)_
```
{
    "error": "Bad User Input",
    "message": "Invalid page query"
}
```

_Response (403 - Forbidden)_
```
{
    "error": "Merchant ID Not Found",
    "message": "Incorrect merchant ID / Merchant does not exist"
}
```
```
{
    "error": "Database Field Error",
    "message": "Incorrect bank or merchant ID"
}
```

_Response (500 - Internal Server Error)_
```
{
    "error": "Internal Server Error",
    "message": "Error fetching withdrawals"
}
```
---
### POST /withdrawal

> Request new withdrawal

_Request Header_
```
not needed
```

_Request Params_
```
not needed
```

_Request Body_
```
{
    "amount": 100000,
    "bank_account_id": 1
}
```

_Field validations_
```
amount: integer only; > 0
status: [pending, completed]
```

_Response (201 - created)_
```
{
    "message": "Success requesting withdrawal to IDR account. Status of withdrawal is pending"
    "withdrawal_detail":
        {
            "amount": 100000,
            "status": "pending",
            "created_at": "Wed Aug 25 2021 11:13:28 GMT+0700"
            "bank":
                {
                    "id": 1
                    "currency": "IDR",
                    "bank_code": "014"
                    "account_number": "0123456"
                    "account_holder_name": "Galuh Adika Alifani"
                }
        }       
}
```

_Response (400 - Bad Request)_
```
{
    "error": "Bad Request",
    "message": "You can only perform withdrawal once a day for each currency"
}
```
```
{
    "error": "Bad Request",
    "message": "Insufficient balance. Please select another amount"
}
```
```
{
    "error": "Bad Request - Validation Error",
    "message": [
        "Minimum withdrawal amount is 1",
        "Amount must be integer",
        "Amount cannot be empty",
        "Amount cannot be null"
      ]
}
```
_Response (403 - Forbidden)_
```
{
    "error": "Database Field Error",
    "message": "Incorrect bank or merchant ID"
}
```

_Response (404 - Not Found)_
```
{
    "error": "Bank ID Not Found",
    "message": "Bank account not found. Please try again or select other account"
}
```

_Response (500 - Internal Server Error)_
```
{
    "error": "Internal Server Error",
    "message": "Error adding withdrawal request"
}
```
---

## Endpoints - Additionals (Nice to Have)


### PATCH /withdrawal/status/:withdrawalId

> Update withdrawal status

_Request Header_
```
not needed
```

_Request Params_
```
{
    "withdrawalId": uuid (required)
}
```

_Request Body_
```
not needed
```

_Response (200)_
```
{
    "message": "Withdrawal to Jorge Roob SGD account on Tue Aug 24 2021 has been successfully changed to completed"
}
```
```
{
     "message": "Withdrawal to Guillermo Beier IDR account on Fri Aug 20 2021 is already completed"
}
```

_Response (403 - Forbidden)_
```
{
    "error": "Database Field Error",
    "message": "Incorrect bank or merchant ID"
}
```

_Response (404 - Not Found)_
```
{
     "error": "Bad Request",
     "message": "Withdrawal item not found / Invalid ID"
}
```

_Response (500 - Internal Server Error)_
```
{
    "error": "Internal Server Error",
    "message": "Failed updating withdrawal status"
}
```
---
### GET /bankAccount/:merchantId

> Get list of bank account details of a merchant

_Request Header_
```
not needed
```

_Request Params_
```
{
    "merchantId": uuid (required)
}
```

_Request Body_
```
not needed
```

_Response (200)_
```
[
  {
    "id": "2f810e2d-406b-4f99-bd1a-39eedb5ea3cf",
    "currency": "PHP",
    "bank_code": "484",
    "account_number": "16629",
    "account_holder_name": "Jorge Roob 2",
    "merchant_id": "6a8b1fd1-6549-431c-a418-b3b639917414",
    "createdAt": "2021-08-26T04:42:28.762Z",
    "updatedAt": "2021-08-26T18:29:39.104Z"
  },
  {
    "id": "60246cce-a9e8-47c3-af52-36245d14da9f",
    "currency": "IDR",
    "bank_code": "011",
    "account_number": "099231",
    "account_holder_name": "Jorge Roob Jr.",
    "merchant_id": "6a8b1fd1-6549-431c-a418-b3b639917414",
    "createdAt": "2021-08-26T06:10:42.949Z",
    "updatedAt": "2021-08-26T20:09:05.609Z"
  }
]
```

_Response (403 - Forbidden)_
```
{
    "error": "Database Field Error",
    "message": "Incorrect bank or merchant ID"
}
```
```
{
    "error": "Merchant ID Not Found",
    "message": "Incorrect merchant ID / Merchant does not exist"
}
```

_Response (500 - Internal Server Error)_
```
{
    "error": "Internal Server Error",
    "message": "Failed fetching bank account"
}
```
---
### POST /merchant/login

> Dummy login endpoint (without password, email, or auth key)

_Request Header_
```
not needed
```

_Request Params_
```
not needed
```

_Request Body_
```
{
    "username": username
}
```

_Response (200)_
```
{
  "id": "0842b956-6fec-4779-80fb-088610b8519a",
  "username": "galuhalifani",
  "name": "Galuh Adika Alifani",
  "balance": 100000000,
  "createdAt": "2021-08-26T04:41:33.772Z",
  "updatedAt": "2021-08-26T04:41:33.772Z"
}
```

_Response (403 - Forbidden)_
```
{
    "error": "Forbidden",
    "message": "Wrong username"
}
```

_Response (500 - Internal Server Error)_
```
{
    "error": "Internal Server Error",
    "message": "Failed logging in"
}
```
