{
  "openapi": "3.0.0",
  "info": {
    "title": "nyumba_connect_core",
    "version": "0.0.1",
    "description": "Nyumba Connect backend API - properties, bookings, inquiries, payments, and notifications",
    "contact": {
      "name": "George Mushi",
      "email": "georgejohn991@gmail.com"
    }
  },
  "paths": {
    "/admin/analytics": {
      "get": {
        "x-controller-name": "AdminAnalyticsController",
        "x-operation-name": "analytics",
        "tags": [
          "AdminAnalyticsController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AdminAnalyticsController.analytics"
          }
        },
        "operationId": "AdminAnalyticsController.analytics"
      }
    },
    "/admin/business-accounts/{id}/transfers": {
      "post": {
        "x-controller-name": "BusinessAccountController",
        "x-operation-name": "logTransfer",
        "tags": [
          "BusinessAccountController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BusinessAccountController.logTransfer"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amount"
                ],
                "properties": {
                  "amount": {
                    "type": "number"
                  },
                  "transferredAt": {
                    "type": "string"
                  },
                  "note": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BusinessAccountController.logTransfer"
      }
    },
    "/admin/business-accounts/{id}": {
      "patch": {
        "x-controller-name": "BusinessAccountController",
        "x-operation-name": "updateById",
        "tags": [
          "BusinessAccountController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BusinessAccountController.updateById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "accountName": {
                    "type": "string"
                  },
                  "phone": {
                    "type": "string"
                  },
                  "provider": {
                    "type": "string",
                    "enum": [
                      "mpesa",
                      "tigopesa",
                      "airtelmoney",
                      "halopesa",
                      "bank"
                    ]
                  },
                  "bankName": {
                    "type": "string"
                  },
                  "notes": {
                    "type": "string"
                  },
                  "commissionPercent": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BusinessAccountController.updateById"
      },
      "delete": {
        "x-controller-name": "BusinessAccountController",
        "x-operation-name": "deleteById",
        "tags": [
          "BusinessAccountController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BusinessAccountController.deleteById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "BusinessAccountController.deleteById"
      }
    },
    "/admin/business-accounts": {
      "post": {
        "x-controller-name": "BusinessAccountController",
        "x-operation-name": "create",
        "tags": [
          "BusinessAccountController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BusinessAccountController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "ownerType",
                  "accountName",
                  "phone",
                  "provider"
                ],
                "properties": {
                  "ownerType": {
                    "type": "string",
                    "enum": [
                      "platform",
                      "gateway"
                    ]
                  },
                  "accountName": {
                    "type": "string"
                  },
                  "phone": {
                    "type": "string"
                  },
                  "provider": {
                    "type": "string",
                    "enum": [
                      "mpesa",
                      "tigopesa",
                      "airtelmoney",
                      "halopesa",
                      "bank"
                    ]
                  },
                  "bankName": {
                    "type": "string"
                  },
                  "notes": {
                    "type": "string"
                  },
                  "commissionPercent": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                }
              }
            }
          }
        },
        "operationId": "BusinessAccountController.create"
      },
      "get": {
        "x-controller-name": "BusinessAccountController",
        "x-operation-name": "find",
        "tags": [
          "BusinessAccountController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BusinessAccountController.find"
          }
        },
        "operationId": "BusinessAccountController.find"
      }
    },
    "/admin/users/{id}/role": {
      "patch": {
        "x-controller-name": "AdminUsersController",
        "x-operation-name": "updateRole",
        "tags": [
          "AdminUsersController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AdminUsersController.updateRole"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "role"
                ],
                "properties": {
                  "role": {
                    "type": "string",
                    "enum": [
                      "client",
                      "landlord",
                      "admin",
                      "superadmin"
                    ]
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "AdminUsersController.updateRole"
      }
    },
    "/admin/users": {
      "get": {
        "x-controller-name": "AdminUsersController",
        "x-operation-name": "find",
        "tags": [
          "AdminUsersController"
        ],
        "responses": {
          "200": {
            "description": "Return value of AdminUsersController.find"
          }
        },
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "role",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "operationId": "AdminUsersController.find"
      }
    },
    "/auth/login/request-otp": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "requestLoginOtp",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Sends a verification code to log in"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "phone"
                ],
                "properties": {
                  "phone": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "AuthController.requestLoginOtp"
      }
    },
    "/auth/login/verify": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "verifyLogin",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Verifies the login code and returns auth tokens"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "phone",
                  "code"
                ],
                "properties": {
                  "phone": {
                    "type": "string"
                  },
                  "code": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "AuthController.verifyLogin"
      }
    },
    "/auth/me": {
      "get": {
        "x-controller-name": "AuthController",
        "x-operation-name": "me",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "The currently authenticated user"
                }
              }
            }
          }
        },
        "operationId": "AuthController.me"
      }
    },
    "/auth/refresh": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "refresh",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Exchange a refresh token for a new access token"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "refreshToken"
                ],
                "properties": {
                  "refreshToken": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "AuthController.refresh"
      }
    },
    "/auth/signup/request-otp": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "requestSignupOtp",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Sends a verification code to start signup"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "phone"
                ],
                "properties": {
                  "phone": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "AuthController.requestSignupOtp"
      }
    },
    "/auth/signup/verify": {
      "post": {
        "x-controller-name": "AuthController",
        "x-operation-name": "verifySignup",
        "tags": [
          "AuthController"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Verifies the signup code and creates the account"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "phone",
                  "code",
                  "firstName",
                  "lastName",
                  "role"
                ],
                "properties": {
                  "phone": {
                    "type": "string"
                  },
                  "code": {
                    "type": "string"
                  },
                  "firstName": {
                    "type": "string"
                  },
                  "lastName": {
                    "type": "string"
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "client",
                      "landlord"
                    ]
                  },
                  "email": {
                    "type": "string",
                    "format": "email"
                  }
                }
              }
            }
          }
        },
        "operationId": "AuthController.verifySignup"
      }
    },
    "/bookings/mine": {
      "get": {
        "x-controller-name": "BookingController",
        "x-operation-name": "findMine",
        "tags": [
          "BookingController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BookingController.findMine"
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Booking.Filter"
                }
              }
            }
          }
        ],
        "operationId": "BookingController.findMine"
      }
    },
    "/bookings/received": {
      "get": {
        "x-controller-name": "BookingController",
        "x-operation-name": "findReceived",
        "tags": [
          "BookingController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BookingController.findReceived"
          }
        },
        "operationId": "BookingController.findReceived"
      }
    },
    "/bookings/{id}/status": {
      "patch": {
        "x-controller-name": "BookingController",
        "x-operation-name": "updateStatus",
        "tags": [
          "BookingController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BookingController.updateStatus"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "pending",
                      "confirmed",
                      "cancelled",
                      "completed"
                    ]
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "BookingController.updateStatus"
      }
    },
    "/bookings": {
      "post": {
        "x-controller-name": "BookingController",
        "x-operation-name": "create",
        "tags": [
          "BookingController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BookingController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewBooking"
              }
            }
          }
        },
        "operationId": "BookingController.create"
      }
    },
    "/cashouts/all": {
      "get": {
        "x-controller-name": "CashoutController",
        "x-operation-name": "all",
        "tags": [
          "CashoutController"
        ],
        "responses": {
          "200": {
            "description": "Return value of CashoutController.all"
          }
        },
        "operationId": "CashoutController.all"
      }
    },
    "/cashouts/initiate": {
      "post": {
        "x-controller-name": "CashoutController",
        "x-operation-name": "initiate",
        "tags": [
          "CashoutController"
        ],
        "responses": {
          "200": {
            "description": "Return value of CashoutController.initiate"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amount"
                ],
                "properties": {
                  "amount": {
                    "type": "number"
                  }
                }
              }
            }
          }
        },
        "operationId": "CashoutController.initiate"
      }
    },
    "/cashouts/mine": {
      "get": {
        "x-controller-name": "CashoutController",
        "x-operation-name": "mine",
        "tags": [
          "CashoutController"
        ],
        "responses": {
          "200": {
            "description": "Return value of CashoutController.mine"
          }
        },
        "operationId": "CashoutController.mine"
      }
    },
    "/cashouts/webhook/afrixpay": {
      "post": {
        "x-controller-name": "CashoutController",
        "x-operation-name": "webhook",
        "tags": [
          "CashoutController"
        ],
        "responses": {
          "200": {
            "description": "Return value of CashoutController.webhook"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "CashoutController.webhook"
      }
    },
    "/cashouts/{id}/status": {
      "patch": {
        "x-controller-name": "CashoutController",
        "x-operation-name": "updateStatus",
        "tags": [
          "CashoutController"
        ],
        "responses": {
          "200": {
            "description": "Return value of CashoutController.updateStatus"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "completed",
                      "failed"
                    ]
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "CashoutController.updateStatus"
      }
    },
    "/commission-rates": {
      "get": {
        "x-controller-name": "BusinessAccountController",
        "x-operation-name": "commissionRates",
        "tags": [
          "BusinessAccountController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BusinessAccountController.commissionRates"
          }
        },
        "operationId": "BusinessAccountController.commissionRates"
      }
    },
    "/inquiries/mine": {
      "get": {
        "x-controller-name": "InquiryController",
        "x-operation-name": "findMine",
        "tags": [
          "InquiryController"
        ],
        "responses": {
          "200": {
            "description": "Return value of InquiryController.findMine"
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Inquiry.Filter"
                }
              }
            }
          }
        ],
        "operationId": "InquiryController.findMine"
      }
    },
    "/inquiries/received": {
      "get": {
        "x-controller-name": "InquiryController",
        "x-operation-name": "findReceived",
        "tags": [
          "InquiryController"
        ],
        "responses": {
          "200": {
            "description": "Return value of InquiryController.findReceived"
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Inquiry.Filter"
                }
              }
            }
          }
        ],
        "operationId": "InquiryController.findReceived"
      }
    },
    "/inquiries/{id}/status": {
      "patch": {
        "x-controller-name": "InquiryController",
        "x-operation-name": "updateStatus",
        "tags": [
          "InquiryController"
        ],
        "responses": {
          "200": {
            "description": "Return value of InquiryController.updateStatus"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "unread",
                      "read",
                      "responded"
                    ]
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "InquiryController.updateStatus"
      }
    },
    "/inquiries": {
      "post": {
        "x-controller-name": "InquiryController",
        "x-operation-name": "create",
        "tags": [
          "InquiryController"
        ],
        "responses": {
          "200": {
            "description": "Return value of InquiryController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewInquiry"
              }
            }
          }
        },
        "operationId": "InquiryController.create"
      }
    },
    "/messages/conversations": {
      "get": {
        "x-controller-name": "MessageController",
        "x-operation-name": "conversations",
        "tags": [
          "MessageController"
        ],
        "responses": {
          "200": {
            "description": "Return value of MessageController.conversations"
          }
        },
        "operationId": "MessageController.conversations"
      }
    },
    "/messages/thread/{userId}": {
      "get": {
        "x-controller-name": "MessageController",
        "x-operation-name": "thread",
        "tags": [
          "MessageController"
        ],
        "responses": {
          "200": {
            "description": "Return value of MessageController.thread"
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "MessageController.thread"
      }
    },
    "/messages": {
      "post": {
        "x-controller-name": "MessageController",
        "x-operation-name": "create",
        "tags": [
          "MessageController"
        ],
        "responses": {
          "200": {
            "description": "Return value of MessageController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewMessage"
              }
            }
          }
        },
        "operationId": "MessageController.create"
      }
    },
    "/notifications/mine": {
      "get": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "findMine",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of NotificationController.findMine"
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Notification.Filter"
                }
              }
            }
          }
        ],
        "operationId": "NotificationController.findMine"
      }
    },
    "/notifications/test": {
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "sendTest",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of NotificationController.sendTest"
          }
        },
        "operationId": "NotificationController.sendTest"
      }
    },
    "/notifications/{id}/read": {
      "patch": {
        "x-controller-name": "NotificationController",
        "x-operation-name": "markRead",
        "tags": [
          "NotificationController"
        ],
        "responses": {
          "200": {
            "description": "Return value of NotificationController.markRead"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "NotificationController.markRead"
      }
    },
    "/payments/initiate": {
      "post": {
        "x-controller-name": "PaymentController",
        "x-operation-name": "initiate",
        "tags": [
          "PaymentController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PaymentController.initiate"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "propertyId"
                ],
                "properties": {
                  "propertyId": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "PaymentController.initiate"
      }
    },
    "/payments/status/{transactionId}": {
      "get": {
        "x-controller-name": "PaymentController",
        "x-operation-name": "status",
        "tags": [
          "PaymentController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PaymentController.status"
          }
        },
        "parameters": [
          {
            "name": "transactionId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "PaymentController.status"
      }
    },
    "/payments/webhook/afrixpay": {
      "post": {
        "x-controller-name": "PaymentController",
        "x-operation-name": "webhook",
        "tags": [
          "PaymentController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PaymentController.webhook"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              }
            }
          }
        },
        "operationId": "PaymentController.webhook"
      }
    },
    "/ping": {
      "get": {
        "x-controller-name": "PingController",
        "x-operation-name": "ping",
        "tags": [
          "PingController"
        ],
        "responses": {
          "200": {
            "description": "Ping Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PingResponse"
                }
              }
            }
          }
        },
        "operationId": "PingController.ping"
      }
    },
    "/properties/all": {
      "get": {
        "x-controller-name": "PropertyController",
        "x-operation-name": "findAll",
        "tags": [
          "PropertyController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PropertyController.findAll"
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Property.Filter"
                }
              }
            }
          }
        ],
        "operationId": "PropertyController.findAll"
      }
    },
    "/properties/mine": {
      "get": {
        "x-controller-name": "PropertyController",
        "x-operation-name": "findMine",
        "tags": [
          "PropertyController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PropertyController.findMine"
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Property.Filter"
                }
              }
            }
          }
        ],
        "operationId": "PropertyController.findMine"
      }
    },
    "/properties/pending": {
      "get": {
        "x-controller-name": "PropertyController",
        "x-operation-name": "findPending",
        "tags": [
          "PropertyController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PropertyController.findPending"
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Property.Filter"
                }
              }
            }
          }
        ],
        "operationId": "PropertyController.findPending"
      }
    },
    "/properties/{id}/bookings": {
      "get": {
        "x-controller-name": "BookingController",
        "x-operation-name": "findForProperty",
        "tags": [
          "BookingController"
        ],
        "responses": {
          "200": {
            "description": "Return value of BookingController.findForProperty"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "BookingController.findForProperty"
      }
    },
    "/properties/{id}/status": {
      "patch": {
        "x-controller-name": "PropertyController",
        "x-operation-name": "updateStatus",
        "tags": [
          "PropertyController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PropertyController.updateStatus"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "pending",
                      "active",
                      "rejected",
                      "rented"
                    ]
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "PropertyController.updateStatus"
      }
    },
    "/properties/{id}/transactions": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "findForProperty",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Return value of TransactionController.findForProperty"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "TransactionController.findForProperty"
      }
    },
    "/properties/{id}": {
      "patch": {
        "x-controller-name": "PropertyController",
        "x-operation-name": "updateById",
        "tags": [
          "PropertyController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PropertyController.updateById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PropertyPartialExcluding_id-ownerId-status_"
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "PropertyController.updateById"
      },
      "get": {
        "x-controller-name": "PropertyController",
        "x-operation-name": "findById",
        "tags": [
          "PropertyController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PropertyController.findById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Property.Filter1"
                }
              }
            }
          }
        ],
        "operationId": "PropertyController.findById"
      },
      "delete": {
        "x-controller-name": "PropertyController",
        "x-operation-name": "deleteById",
        "tags": [
          "PropertyController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PropertyController.deleteById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "PropertyController.deleteById"
      }
    },
    "/properties": {
      "post": {
        "x-controller-name": "PropertyController",
        "x-operation-name": "create",
        "tags": [
          "PropertyController"
        ],
        "responses": {
          "200": {
            "description": "Return value of PropertyController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewProperty"
              }
            }
          }
        },
        "operationId": "PropertyController.create"
      },
      "get": {
        "x-controller-name": "PropertyController",
        "x-operation-name": "find",
        "tags": [
          "PropertyController"
        ],
        "responses": {},
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Property.Filter"
                }
              }
            }
          }
        ],
        "operationId": "PropertyController.find"
      }
    },
    "/saved-properties/mine": {
      "get": {
        "x-controller-name": "SavedPropertyController",
        "x-operation-name": "find",
        "tags": [
          "SavedPropertyController"
        ],
        "responses": {},
        "operationId": "SavedPropertyController.find"
      }
    },
    "/saved-properties/{propertyId}": {
      "delete": {
        "x-controller-name": "SavedPropertyController",
        "x-operation-name": "delete",
        "tags": [
          "SavedPropertyController"
        ],
        "responses": {},
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "SavedPropertyController.delete"
      }
    },
    "/saved-properties": {
      "post": {
        "x-controller-name": "SavedPropertyController",
        "x-operation-name": "create",
        "tags": [
          "SavedPropertyController"
        ],
        "responses": {},
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "propertyId"
                ],
                "properties": {
                  "propertyId": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "SavedPropertyController.create"
      }
    },
    "/transactions/all": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "findAll",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Return value of TransactionController.findAll"
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction.Filter"
                }
              }
            }
          }
        ],
        "operationId": "TransactionController.findAll"
      }
    },
    "/transactions/mine": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "findMine",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Return value of TransactionController.findMine"
          }
        },
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction.Filter"
                }
              }
            }
          }
        ],
        "operationId": "TransactionController.findMine"
      }
    },
    "/transactions/received": {
      "get": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "findReceived",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Return value of TransactionController.findReceived"
          }
        },
        "operationId": "TransactionController.findReceived"
      }
    },
    "/transactions/{id}/status": {
      "patch": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "updateStatus",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Return value of TransactionController.updateStatus"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "string",
                    "enum": [
                      "pending",
                      "paid",
                      "failed",
                      "refunded"
                    ]
                  }
                }
              }
            }
          },
          "x-parameter-index": 1
        },
        "operationId": "TransactionController.updateStatus"
      }
    },
    "/transactions": {
      "post": {
        "x-controller-name": "TransactionController",
        "x-operation-name": "create",
        "tags": [
          "TransactionController"
        ],
        "responses": {
          "200": {
            "description": "Return value of TransactionController.create"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewTransaction"
              }
            }
          }
        },
        "operationId": "TransactionController.create"
      }
    },
    "/uploads": {
      "post": {
        "x-controller-name": "UploadController",
        "x-operation-name": "upload",
        "tags": [
          "UploadController"
        ],
        "responses": {
          "200": {
            "description": "Uploaded file URLs",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "urls": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "x-parser": "stream",
              "schema": {
                "type": "object"
              }
            }
          },
          "description": "multipart/form-data value, field name \"files\" (up to 10 images).",
          "required": true
        },
        "operationId": "UploadController.upload"
      }
    },
    "/users/me/fcm-token/remove": {
      "patch": {
        "x-controller-name": "UserController",
        "x-operation-name": "removeFcmToken",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.removeFcmToken"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "token"
                ],
                "properties": {
                  "token": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.removeFcmToken"
      }
    },
    "/users/me/fcm-token": {
      "patch": {
        "x-controller-name": "UserController",
        "x-operation-name": "registerFcmToken",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.registerFcmToken"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "token"
                ],
                "properties": {
                  "token": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.registerFcmToken"
      }
    },
    "/users/me": {
      "patch": {
        "x-controller-name": "UserController",
        "x-operation-name": "updateMe",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.updateMe"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "firstName": {
                    "type": "string"
                  },
                  "lastName": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "avatarUrl": {
                    "type": "string"
                  },
                  "payoutProvider": {
                    "type": "string",
                    "enum": [
                      "mpesa",
                      "tigopesa",
                      "airtelmoney",
                      "halopesa",
                      "bank"
                    ]
                  },
                  "payoutAccountName": {
                    "type": "string"
                  },
                  "payoutAccountNumber": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "operationId": "UserController.updateMe"
      },
      "delete": {
        "x-controller-name": "UserController",
        "x-operation-name": "deleteMe",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.deleteMe"
          }
        },
        "operationId": "UserController.deleteMe"
      }
    },
    "/users/{id}": {
      "get": {
        "x-controller-name": "UserController",
        "x-operation-name": "findById",
        "tags": [
          "UserController"
        ],
        "responses": {
          "200": {
            "description": "Return value of UserController.findById"
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "operationId": "UserController.findById"
      }
    }
  },
  "servers": [
    {
      "url": "https://dataxyz.space"
    }
  ],
  "components": {
    "schemas": {
      "NewTransaction": {
        "title": "NewTransaction",
        "type": "object",
        "description": "(tsType: Omit<Transaction, 'id' | 'payerId' | 'commission' | 'platformCommission' | 'gatewayCommission' | 'status' | 'paidAt' | 'createdAt'>, schemaOptions: { title: 'NewTransaction', exclude: [ 'id', 'payerId', 'commission', 'platformCommission', 'gatewayCommission', 'status', 'paidAt', 'createdAt' ] })",
        "properties": {
          "bookingId": {
            "type": "string"
          },
          "propertyId": {
            "type": "string"
          },
          "amount": {
            "type": "number"
          },
          "orderTrackingId": {
            "type": "string"
          }
        },
        "required": [
          "amount"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Transaction, 'id' | 'payerId' | 'commission' | 'platformCommission' | 'gatewayCommission' | 'status' | 'paidAt' | 'createdAt'>"
      },
      "NewProperty": {
        "title": "NewProperty",
        "type": "object",
        "description": "(tsType: Omit<Property, 'id' | 'ownerId' | 'status' | 'views' | 'inquiriesCount' | 'createdAt' | 'updatedAt'>, schemaOptions: { title: 'NewProperty', exclude: [ 'id', 'ownerId', 'status', 'views', 'inquiriesCount', 'createdAt', 'updatedAt' ] })",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "hotel",
              "apartment",
              "house",
              "shop"
            ]
          },
          "price": {
            "type": "number"
          },
          "priceUnit": {
            "type": "string",
            "enum": [
              "night",
              "month"
            ]
          },
          "listingPurpose": {
            "type": "string",
            "enum": [
              "rent",
              "sale"
            ]
          },
          "minRentalMonths": {
            "type": "number"
          },
          "address": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "bedrooms": {
            "type": "number"
          },
          "bathrooms": {
            "type": "number"
          },
          "maxGuests": {
            "type": "number"
          },
          "amenities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "images": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "title",
          "description",
          "type",
          "price",
          "address",
          "city",
          "country",
          "bedrooms",
          "bathrooms",
          "maxGuests"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Property, 'id' | 'ownerId' | 'status' | 'views' | 'inquiriesCount' | 'createdAt' | 'updatedAt'>"
      },
      "PropertyPartialExcluding_id-ownerId-status_": {
        "title": "PropertyPartialExcluding_id-ownerId-status_",
        "type": "object",
        "description": "(tsType: Omit<Partial<Property>, 'id' | 'ownerId' | 'status'>, schemaOptions: { partial: true, exclude: [ 'id', 'ownerId', 'status' ] })",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "hotel",
              "apartment",
              "house",
              "shop"
            ]
          },
          "price": {
            "type": "number"
          },
          "priceUnit": {
            "type": "string",
            "enum": [
              "night",
              "month"
            ]
          },
          "listingPurpose": {
            "type": "string",
            "enum": [
              "rent",
              "sale"
            ]
          },
          "minRentalMonths": {
            "type": "number"
          },
          "address": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "bedrooms": {
            "type": "number"
          },
          "bathrooms": {
            "type": "number"
          },
          "maxGuests": {
            "type": "number"
          },
          "amenities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "images": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "views": {
            "type": "number"
          },
          "inquiriesCount": {
            "type": "number"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "Omit<Partial<Property>, 'id' | 'ownerId' | 'status'>"
      },
      "NewMessage": {
        "title": "NewMessage",
        "type": "object",
        "description": "(tsType: Omit<Message, 'id' | 'senderId' | 'read' | 'createdAt'>, schemaOptions: { title: 'NewMessage', exclude: [ 'id', 'senderId', 'read', 'createdAt' ] })",
        "properties": {
          "receiverId": {
            "type": "string"
          },
          "propertyId": {
            "type": "string"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "text"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Message, 'id' | 'senderId' | 'read' | 'createdAt'>"
      },
      "NewInquiry": {
        "title": "NewInquiry",
        "type": "object",
        "description": "(tsType: Omit<Inquiry, 'id' | 'clientId' | 'landlordId' | 'status' | 'createdAt'>, schemaOptions: { title: 'NewInquiry', exclude: [ 'id', 'clientId', 'landlordId', 'status', 'createdAt' ] })",
        "properties": {
          "propertyId": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "message"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Inquiry, 'id' | 'clientId' | 'landlordId' | 'status' | 'createdAt'>"
      },
      "NewBooking": {
        "title": "NewBooking",
        "type": "object",
        "description": "(tsType: Omit<Booking, 'id' | 'clientId' | 'status' | 'createdAt' | 'updatedAt'>, schemaOptions: { title: 'NewBooking', exclude: [ 'id', 'clientId', 'status', 'createdAt', 'updatedAt' ] })",
        "properties": {
          "propertyId": {
            "type": "string"
          },
          "startDate": {
            "type": "string",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "format": "date-time"
          },
          "totalAmount": {
            "type": "number"
          }
        },
        "required": [
          "startDate",
          "totalAmount"
        ],
        "additionalProperties": false,
        "x-typescript-type": "Omit<Booking, 'id' | 'clientId' | 'status' | 'createdAt' | 'updatedAt'>"
      },
      "Booking.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Booking.ScopeFilter"
      },
      "Booking.IncludeFilter.Items": {
        "title": "Booking.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "property",
              "client"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Booking.ScopeFilter"
          }
        }
      },
      "Booking.Filter": {
        "type": "object",
        "title": "Booking.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Booking.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "propertyId": {
                    "type": "boolean"
                  },
                  "clientId": {
                    "type": "boolean"
                  },
                  "startDate": {
                    "type": "boolean"
                  },
                  "endDate": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "totalAmount": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "propertyId",
                    "clientId",
                    "startDate",
                    "endDate",
                    "status",
                    "totalAmount",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Booking.Fields"
          },
          "include": {
            "title": "Booking.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Booking.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Booking>"
      },
      "Inquiry.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Inquiry.ScopeFilter"
      },
      "Inquiry.IncludeFilter.Items": {
        "title": "Inquiry.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "property",
              "client",
              "landlord"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Inquiry.ScopeFilter"
          }
        }
      },
      "Inquiry.Filter": {
        "type": "object",
        "title": "Inquiry.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Inquiry.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "propertyId": {
                    "type": "boolean"
                  },
                  "clientId": {
                    "type": "boolean"
                  },
                  "landlordId": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "propertyId",
                    "clientId",
                    "landlordId",
                    "message",
                    "status",
                    "createdAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Inquiry.Fields"
          },
          "include": {
            "title": "Inquiry.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Inquiry.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Inquiry>"
      },
      "Notification.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Notification.ScopeFilter"
      },
      "Notification.IncludeFilter.Items": {
        "title": "Notification.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "user"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Notification.ScopeFilter"
          }
        }
      },
      "Notification.Filter": {
        "type": "object",
        "title": "Notification.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Notification.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "userId": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "body": {
                    "type": "boolean"
                  },
                  "type": {
                    "type": "boolean"
                  },
                  "data": {
                    "type": "boolean"
                  },
                  "read": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "userId",
                    "title",
                    "body",
                    "type",
                    "data",
                    "read",
                    "createdAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Notification.Fields"
          },
          "include": {
            "title": "Notification.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Notification.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Notification>"
      },
      "PingResponse": {
        "type": "object",
        "title": "PingResponse",
        "properties": {
          "greeting": {
            "type": "string"
          },
          "date": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "headers": {
            "type": "object",
            "properties": {
              "Content-Type": {
                "type": "string"
              }
            },
            "additionalProperties": true
          }
        }
      },
      "Property.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Property.ScopeFilter"
      },
      "Property.IncludeFilter.Items": {
        "title": "Property.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "owner"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Property.ScopeFilter"
          }
        }
      },
      "Property.Filter": {
        "type": "object",
        "title": "Property.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Property.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "ownerId": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "type": {
                    "type": "boolean"
                  },
                  "price": {
                    "type": "boolean"
                  },
                  "priceUnit": {
                    "type": "boolean"
                  },
                  "listingPurpose": {
                    "type": "boolean"
                  },
                  "minRentalMonths": {
                    "type": "boolean"
                  },
                  "address": {
                    "type": "boolean"
                  },
                  "city": {
                    "type": "boolean"
                  },
                  "country": {
                    "type": "boolean"
                  },
                  "bedrooms": {
                    "type": "boolean"
                  },
                  "bathrooms": {
                    "type": "boolean"
                  },
                  "maxGuests": {
                    "type": "boolean"
                  },
                  "amenities": {
                    "type": "boolean"
                  },
                  "images": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "views": {
                    "type": "boolean"
                  },
                  "inquiriesCount": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "ownerId",
                    "title",
                    "description",
                    "type",
                    "price",
                    "priceUnit",
                    "listingPurpose",
                    "minRentalMonths",
                    "address",
                    "city",
                    "country",
                    "bedrooms",
                    "bathrooms",
                    "maxGuests",
                    "amenities",
                    "images",
                    "status",
                    "views",
                    "inquiriesCount",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Property.Fields"
          },
          "include": {
            "title": "Property.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Property.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Property>"
      },
      "Property.Filter1": {
        "type": "object",
        "title": "Property.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "ownerId": {
                    "type": "boolean"
                  },
                  "title": {
                    "type": "boolean"
                  },
                  "description": {
                    "type": "boolean"
                  },
                  "type": {
                    "type": "boolean"
                  },
                  "price": {
                    "type": "boolean"
                  },
                  "priceUnit": {
                    "type": "boolean"
                  },
                  "listingPurpose": {
                    "type": "boolean"
                  },
                  "minRentalMonths": {
                    "type": "boolean"
                  },
                  "address": {
                    "type": "boolean"
                  },
                  "city": {
                    "type": "boolean"
                  },
                  "country": {
                    "type": "boolean"
                  },
                  "bedrooms": {
                    "type": "boolean"
                  },
                  "bathrooms": {
                    "type": "boolean"
                  },
                  "maxGuests": {
                    "type": "boolean"
                  },
                  "amenities": {
                    "type": "boolean"
                  },
                  "images": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "views": {
                    "type": "boolean"
                  },
                  "inquiriesCount": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  },
                  "updatedAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "ownerId",
                    "title",
                    "description",
                    "type",
                    "price",
                    "priceUnit",
                    "listingPurpose",
                    "minRentalMonths",
                    "address",
                    "city",
                    "country",
                    "bedrooms",
                    "bathrooms",
                    "maxGuests",
                    "amenities",
                    "images",
                    "status",
                    "views",
                    "inquiriesCount",
                    "createdAt",
                    "updatedAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Property.Fields"
          },
          "include": {
            "title": "Property.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Property.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Property>"
      },
      "Transaction.ScopeFilter": {
        "type": "object",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            ]
          },
          "include": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          }
        },
        "additionalProperties": false,
        "title": "Transaction.ScopeFilter"
      },
      "Transaction.IncludeFilter.Items": {
        "title": "Transaction.IncludeFilter.Items",
        "type": "object",
        "properties": {
          "relation": {
            "type": "string",
            "enum": [
              "booking",
              "property",
              "payer"
            ]
          },
          "scope": {
            "$ref": "#/components/schemas/Transaction.ScopeFilter"
          }
        }
      },
      "Transaction.Filter": {
        "type": "object",
        "title": "Transaction.Filter",
        "properties": {
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "example": 100
          },
          "skip": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "where": {
            "title": "Transaction.WhereFilter",
            "type": "object",
            "additionalProperties": true
          },
          "fields": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "boolean"
                  },
                  "bookingId": {
                    "type": "boolean"
                  },
                  "propertyId": {
                    "type": "boolean"
                  },
                  "payerId": {
                    "type": "boolean"
                  },
                  "amount": {
                    "type": "boolean"
                  },
                  "commission": {
                    "type": "boolean"
                  },
                  "platformCommission": {
                    "type": "boolean"
                  },
                  "gatewayCommission": {
                    "type": "boolean"
                  },
                  "status": {
                    "type": "boolean"
                  },
                  "paidAt": {
                    "type": "boolean"
                  },
                  "orderTrackingId": {
                    "type": "boolean"
                  },
                  "createdAt": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "id",
                    "bookingId",
                    "propertyId",
                    "payerId",
                    "amount",
                    "commission",
                    "platformCommission",
                    "gatewayCommission",
                    "status",
                    "paidAt",
                    "orderTrackingId",
                    "createdAt"
                  ],
                  "example": "id"
                },
                "uniqueItems": true
              }
            ],
            "title": "Transaction.Fields"
          },
          "include": {
            "title": "Transaction.IncludeFilter",
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Transaction.IncludeFilter.Items"
                },
                {
                  "type": "string"
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "x-typescript-type": "@loopback/repository#Filter<Transaction>"
      }
    }
  }
}