openapi: 3.0.3 info: title: 'Lokalink Bussines Owner API Documentation' description: '
We have an extensive database of various places, including restaurants, business establishments, and hidden gems. No matter what type of place you are looking for, we can provide you with all the information you need' version: 1.0.0 servers: - url: 'https://merchant.lokalink.id' tags: - name: Account description: '' - name: 'Auth Company' description: '' - name: 'Auth Personal' description: '' - name: 'Auth Staff' description: '' - name: Basic description: '' - name: Contact description: '' - name: Endpoints description: '' - name: 'File Upload' description: '' - name: Manage description: '' - name: Outlet description: '' - name: Profile description: '' - name: Staff description: '' - name: Subscription description: '' - name: 'Transfer Data' description: '' - name: Voucher description: '' - name: 'Voucher Claim' description: '' paths: /api/v1/account/notification: post: summary: 'Get Notification' operationId: getNotification description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di dapatkan\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Account requestBody: required: false content: application/json: schema: type: object properties: is_read: type: boolean description: 'Sudah dibaca/belum.' example: false nullable: false security: [] /api/v1/account/notification/read: post: summary: 'Read Notification' operationId: readNotification description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di dapatkan\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Account requestBody: required: false content: application/json: schema: type: object properties: is_read: type: boolean description: 'Sudah dibaca/belum.' example: false nullable: false security: [] /api/v1/account/requestDelete: post: summary: 'Request Delete Account' operationId: requestDeleteAccount description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"data berhasil di dapatkan\",\n\"data\": [data]\n}" tags: - Account requestBody: required: true content: application/json: schema: type: object properties: reason: type: string description: 'Alasan menghapus akun.' example: 'Menghapus akun' nullable: false otp: type: string description: OTP. example: '123456' nullable: false required: - reason - otp security: [] /api/v1/auth/company/accountdetail: post: summary: 'About Company' operationId: aboutCompany description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - 'Auth Company' requestBody: required: true content: application/json: schema: type: object properties: fullname: type: string description: 'Name Lengkap pengguna.' example: Ferryanto nullable: false business_number: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false username: type: string description: 'Username pengguna.' example: ferryanto nullable: false company_name: type: string description: 'Nama Perusahaan.' example: 'PT Perusahaan' nullable: false position: type: string description: 'Jabatan pengguna.' example: Manager nullable: false company_email: type: email description: 'Email pengguna.' example: ferryanto@lokalink.id nullable: false required: - fullname - business_number - username - company_name - position - company_email security: [] /api/v1/auth/register: post: summary: Register operationId: register description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Submit data berhasil\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false company: type: boolean description: 'Company pengguna.' example: true nullable: false name: type: string description: 'Name Lengkap pengguna.' example: Ferryanto nullable: false password: type: string description: 'Password pengguna.' example: zxcasd123 nullable: false required: - phone - company - name - password security: [] /api/v1/auth/validasicode: post: summary: 'Validasi OTP Register' operationId: validasiOTPRegister description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Submit data berhasil\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false code: type: string description: 'Kode OTP pengguna.' example: '1234' nullable: false required: - phone - code security: [] /api/v1/auth/password: post: summary: 'Submit Password Register' operationId: submitPasswordRegister description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Submit password berhasil\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false password: type: string description: 'Password pengguna.' example: zxcasd123 nullable: false cpassword: type: string description: 'Password pengguna.' example: zxcasd123 nullable: false required: - phone - password - cpassword security: [] /api/v1/auth/updateprofile: post: summary: 'Update Profile' operationId: updateProfile description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Update profil user berhasil\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false nik: type: number description: 'nik pengguna.' example: 35.0 nullable: false fullname: type: string description: 'fullname pengguna.' example: Ferryanto nullable: false gender: type: boolean description: 'gender pengguna.' example: true nullable: false birthplace: type: string description: 'birthplace pengguna.' example: Jakarta nullable: false birthday: type: date description: 'birthday pengguna.' example: '2000-01-01' nullable: false email: type: string description: 'email pengguna.' example: email@anda.id nullable: false required: - phone - nik - fullname - gender - birthplace - birthday - email security: [] /api/v1/auth/login: post: summary: Login operationId: login description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Submit Login berhasil\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false password: type: string description: 'Password pengguna.' example: zxcasd123 nullable: false fcm_id: type: string description: 'FCM ID pengguna.' example: 'cFbJxnm_T-igJNrOB7m6os:APA91bHrRAMuReddpS9c_EnOZohtnoBn0jd5y_knsW0VB0us6X9lXpRQVSi7-QswoCvoOPnFSfEckzA771A1idIWIqBJj9GkYOmJwRBQjJ8hu1Wr5MwlYQ8' nullable: false required: - phone - password - fcm_id security: [] /api/v1/auth/updatedetails: post: summary: 'Update Details' operationId: updateDetails description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Update profil user berhasil\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: email: type: email description: 'email pengguna.' example: ferryanto@lokalink.id nullable: false phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false name: type: string description: 'name pengguna.' example: Ferryanto nullable: false required: - email - phone - name security: [] /api/v1/auth/forgot: post: summary: 'Lupa Password' operationId: lupaPassword description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Silahkan masukkan kode verifikasi\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false required: - phone security: [] /api/v1/auth/validasiOTPForgot: post: summary: 'Validasi OTP Forgot' operationId: validasiOTPForgot description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Kode validasi dikenali\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false code: type: string description: 'Kode OTP pengguna.' example: '1234' nullable: false required: - phone - code security: [] /api/v1/auth/newpassword: post: summary: 'New Password' operationId: newPassword description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Password berhasil di update\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false password: type: string description: 'Password pengguna.' example: zxcasd123 nullable: false cpassword: type: string description: 'Password pengguna.' example: zxcasd123 nullable: false required: - phone - password - cpassword security: [] /api/v1/auth/getcode: post: summary: 'Request OTP Auth' operationId: requestOTPAuth description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Silahkan masukkan kode verifikasi\",\n\"data\": [data]\n}" tags: - 'Auth Personal' requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false required: - phone security: [] /api/v1/staff/profile: post: summary: Profile operationId: profile description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - 'Auth Staff' security: [] /api/v1/staff/profile/update: post: summary: 'Edit Profile' operationId: editProfile description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - 'Auth Staff' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nama pengguna.' example: 'Baqda ramadan' nullable: false required: - name security: [] /api/v1/staff/notifications: post: summary: 'Get Notifications' operationId: getNotifications description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - 'Auth Staff' security: [] /api/v1/staff/delete/request: post: summary: 'Request Delete Staff' operationId: requestDeleteStaff description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - 'Auth Staff' requestBody: required: true content: application/json: schema: type: object properties: reason: type: string description: 'Alasan penghapusan staff.' example: 'Staff tidak aktif' nullable: false required: - reason security: [] /api/basic/getcode: post: summary: 'Get OTP General' operationId: getOTPGeneral description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Silahkan masukkan kode verifikasi\",\n\"data\": [data]\n}" tags: - Basic requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false required: - phone security: [] /api/basic/validasicode: post: summary: 'Validasi OTP General' operationId: validasiOTPGeneral description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Submit data berhasil\",\n\"data\": [data]\n}" tags: - Basic requestBody: required: true content: application/json: schema: type: object properties: phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false code: type: string description: 'Kode OTP pengguna.' example: '1234' nullable: false required: - phone - code security: [] /api/v1/basic/city: post: summary: 'Master Data Cities' operationId: masterDataCities description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di dapatkan\",\n\"data\": [\n {\n \"id\": 10,\n \"state_id\": 7,\n \"name\": \"Jakarta Pusat\"\n},\n{\n \"id\": 11,\n \"state_id\": 7,\n\"name\": \"Jakarta Timur\"\n},\n{\n \"id\": 14,\n \"state_id\": 7,\n\"name\": \"Jakarta Selatan\"\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Basic requestBody: required: true content: application/json: schema: type: object properties: province_id: type: numeric description: 'Kode Provinsi .' example: '10' nullable: false required: - province_id security: [] /api/v1/basic/province: post: summary: 'Master Data Provinces' operationId: masterDataProvinces description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di dapatkan\",\n\"data\": [\n {\n \"id\": 1,\n \"name\": \"Jawa Timur\"\n},\n{\n \"id\": 7,\n\"name\": \"DKI Jakarta\"\n},\n{\n \"id\": 8,\n\"name\": \"Bali\"\n},\n{\n \"id\": 9,\n\"name\": \"Daerah Istimewa Yogyakarta\"\n},\n{\n \"id\": 10,\n\"name\": \"Banten\"\n},\n{\n \"id\": 11,\n\"name\": \"Sumatera Utara\"\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Basic security: [] /api/v1/basic/category: post: summary: 'Master Data Category' operationId: masterDataCategory description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"data berhasil di dapatkan\",\n\"data\": [data]\n}" tags: - Basic security: [] /api/v1/basic/subcategory: post: summary: 'Master Data Sub Category' operationId: masterDataSubCategory description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di dapatkan\",\n\"data\": [\n {\n \"id\": 6,\n \"category_id\": 1,\n \"name\": \"Dealer\",\n \"icon_code\": \"\",\n \"code\": \"DLR\",\n},\n{\n \"id\": 7,\n \"category_id\": 1,\n \"name\": \"Used Dealer\",\n \"icon_code\": \"\",\n \"code\": \"UDL\",\n},\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Basic requestBody: required: true content: application/json: schema: type: object properties: category_id: type: numeric description: 'Kode Category .' example: architecto nullable: false required: - category_id security: [] /api/v1/basic/provinceall: post: summary: 'Master Data Province All' operationId: masterDataProvinceAll description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di dapatkan\",\n\"data\": [\n {\n \"id\": 11,\n \"provinsi_id\": null,\n \"name\": \"NANGROE ACEH DARUSSALAM\"\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Basic security: [] /api/v1/basic/cityall: post: summary: 'Master Data City All' operationId: masterDataCityAll description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di dapatkan\",\n\"data\": [\n {\n \"id\": 11,\n\n \"name\": \"Nangroe Aceh Darussalam\"\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Basic requestBody: required: true content: application/json: schema: type: object properties: province_id: type: numeric description: 'Kode Provinsi .' example: '10' nullable: false required: - province_id security: [] /api/v1/basic/homecounter: post: summary: 'Home Stats.' operationId: homeStats description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"data berhasil di dapatkan\",\n\"data\": [data]\n}" tags: - Basic security: [] /api/v1/basic/bannerads: post: summary: 'Banner Ads' operationId: bannerAds description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"data berhasil di dapatkan\",\n\"data\": [data]\n}" tags: - Basic security: [] /api/v1/basic/tnc: post: summary: 'Terms and Conditions' operationId: termsAndConditions description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di dapatkan\",\n\"data\": [\n {\n \"id\": 11,\n\n \"name\": \"Nangroe Aceh Darussalam\"\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Basic requestBody: required: true content: application/json: schema: type: object properties: province_id: type: numeric description: 'Kode Provinsi .' example: '10' nullable: false required: - province_id security: [] /api/basic/contact-us: post: summary: 'Contact Us' operationId: contactUs description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Pesan berhasil dikirim\",\n\"data\": {\n \"subject\": \"Pertanyaan tentang voucher\",\n \"message\": \"Saya ingin bertanya tentang cara menggunakan voucher\"\n}\n}" tags: - Contact requestBody: required: true content: application/json: schema: type: object properties: subject: type: string description: 'Subject pesan.' example: 'Pertanyaan tentang voucher' nullable: false message: type: string description: 'Isi pesan.' example: 'Saya ingin bertanya tentang cara menggunakan voucher' nullable: false email: type: string description: 'optional Email pengguna.' example: user@example.com nullable: true phone: type: string description: 'optional Nomor telepon pengguna.' example: '08123456789' nullable: true required: - subject - message security: [] /api/notification/payment/status: post: summary: 'Handle Midtrans payment notification' operationId: handleMidtransPaymentNotification description: '' parameters: [] responses: { } tags: - Endpoints security: [] /api/notification/webhook: post: summary: "Handle Midtrans webhook notification\nThis is the dedicated webhook handler using the new service" operationId: handleMidtransWebhookNotificationThisIsTheDedicatedWebhookHandlerUsingTheNewService description: '' parameters: [] responses: { } tags: - Endpoints security: [] /api/v1/auth/logout: post: summary: '' operationId: postApiV1AuthLogout description: '' parameters: [] responses: { } tags: - Endpoints security: [] /api/v1/auth/staff/login: post: summary: '' operationId: postApiV1AuthStaffLogin description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: phone: type: string description: validation.digits_between. example: '1374491711936806' nullable: false pin: type: number description: validation.min. example: 39 nullable: false required: - phone - pin security: [] /api/v1/auth/uploadfile: post: summary: 'Upload User personal KTP' operationId: uploadUserPersonalKTP description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - 'File Upload' requestBody: required: true content: multipart/form-data: schema: type: object properties: path_image: type: string format: binary description: 'Foto KTP pengguna max 2MB' nullable: false nik: type: number description: 'nik pengguna.' example: 35.0 nullable: false phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false required: - path_image - nik - phone security: [] /api/v1/auth/uploadSelfies: post: summary: 'Upload User Selfies Foto' operationId: uploadUserSelfiesFoto description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - 'File Upload' requestBody: required: true content: multipart/form-data: schema: type: object properties: path_image: type: string format: binary description: 'Foto KTP pengguna max 2MB' nullable: false phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false required: - path_image - phone security: [] /api/v1/auth/company/companynib: post: summary: 'Upload Company NIB & NPWP' operationId: uploadCompanyNIBNPWP description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - 'File Upload' requestBody: required: true content: multipart/form-data: schema: type: object properties: nib: type: string format: binary description: 'Image NIB max 2MB' nullable: false npwp: type: string format: binary description: 'Image NPWP max 2MB' nullable: false phone: type: phone description: 'Phone pengguna.' example: '081213140683' nullable: false required: - nib - npwp - phone security: [] /api/v1/manage/outlet/edit: post: summary: 'Outlet Add Description' operationId: outletAddDescription description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Manage requestBody: required: true content: application/json: schema: type: object properties: outlet_uuid: type: string description: 'UUID Outlet.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false description: type: string description: 'Description Outlet.' example: deskripsi nullable: false required: - outlet_uuid - description security: [] /api/v1/manage/outlet/edit/photo: post: summary: 'Outlet Add photos' operationId: outletAddPhotos description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Manage requestBody: required: true content: multipart/form-data: schema: type: object properties: outlet_uuid: type: string description: 'UUID Outlet.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false path_image: type: string format: binary description: 'Foto Profile pengguna max 2MB' nullable: false type: type: string description: 'Type Outlet.' example: 'menu,background,gallery' nullable: false required: - outlet_uuid - path_image - type security: [] /api/v1/outlet/find: post: summary: Find operationId: find description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - Outlet requestBody: required: true content: application/json: schema: type: object properties: keyword: type: string description: keyword. example: cafe nullable: false city_id: type: integer description: city_id. example: 1 nullable: false required: - keyword - city_id security: [] /api/v1/outlet/claim: post: summary: 'Claim Outlet.' operationId: claimOutlet description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Claim outlet submitted, please wait for approval\",\n\"data\": [data]\n}" tags: - Outlet requestBody: required: true content: multipart/form-data: schema: type: object properties: file_pdf: type: array description: 'Pastikan minimal ada 1 file. Must be a file. validation.max.' items: type: string format: binary explanation: type: string description: 'explanation pengguna.' example: Penjelasan nullable: false outlet_uuid: type: string description: 'outlet_uuid Outlet.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false 'file_pdf[]': type: string format: binary description: 'Array dari file Image. Max 4MB per file.' nullable: false required: - file_pdf - explanation - outlet_uuid - 'file_pdf[]' security: [] /api/v1/outlet/myclaim: post: summary: 'My Claim.' operationId: myClaim description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - Outlet requestBody: required: true content: application/json: schema: type: object properties: status: type: string description: 'explanation pengguna.' example: 'pending,approved,declined' nullable: false required: - status security: [] /api/v1/outlet/detail: post: summary: 'Detail Outlet' operationId: detailOutlet description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - Outlet requestBody: required: true content: application/json: schema: type: object properties: uuid: type: string description: uuid. example: f3b80872-b9cc-42d3-9ef3-6363a2e7dd7f nullable: false required: - uuid security: [] /api/v1/outlet/addnew: post: summary: 'Add Outlet.' operationId: addOutlet description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - Outlet requestBody: required: true content: multipart/form-data: schema: type: object properties: business_type: type: string description: 'Tipe Usaha.' example: Toko nullable: false accept_cash: type: boolean description: 'Menerima Uang Tunai.' example: true nullable: false accept_debit_card: type: boolean description: 'Menerima Kartu Debit.' example: true nullable: false accept_credit_card: type: boolean description: 'Menerima Kartu Kredit.' example: true nullable: false name: type: string description: 'Nama Outlet.' example: 'Outlet Baru' nullable: false address: type: string description: 'Alamat Outlet.' example: 'Jl. Raya No. 1' nullable: false city_id: type: string description: 'Kota Outlet.' example: '12' nullable: false photo_1: type: string format: binary description: 'Foto Logo Outlet max 2MB' nullable: false photo_2: type: string format: binary description: 'Foto Front Photo Outlet max 2MB' nullable: false latitude: type: string description: 'Latitude Outlet.' example: '-6.2088' nullable: false longitude: type: string description: 'Longitude Outlet.' example: '106.8456' nullable: false phone: type: string description: 'Nomor Telepon Outlet.' example: '08123456789' nullable: false category_id: type: string description: 'Kategori Outlet.' example: '1' nullable: false province_id: type: string description: 'Provinsi Outlet.' example: '12' nullable: false schedule_open: type: json description: 'Jadwal Buka Outlet.' example: '{"senin": "08:00-17:00","selasa": "08:00-17:00","rabu": "08:00-17:00","kamis": "08:00-17:00","jumat": "08:00-17:00","sabtu": "08:00-17:00","minggu": "08:00-17:00"}' nullable: false zip_code: type: string description: 'Kode Pos Outlet.' example: '12345' nullable: false building_name: type: string description: 'optional Nama Bangunan Outlet.' example: 'Bangunan Baru' nullable: false category_name: type: string description: 'Nama Kategori Outlet.' example: Jasa nullable: false required: - business_type - accept_cash - accept_debit_card - accept_credit_card - name - address - city_id - photo_1 - photo_2 - latitude - longitude - phone - category_id - province_id - schedule_open - zip_code - category_name security: [] /api/v1/outlet/addoutletmedia: post: summary: 'Add Outlet Media.' operationId: addOutletMedia description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Images outlet submitted, please wait for approval\",\n\"data\": [data]\n}" tags: - Outlet requestBody: required: true content: multipart/form-data: schema: type: object properties: outlet_id: type: string description: 'outlet_id Outlet.' example: '22' nullable: false file: type: string format: binary description: 'Array dari file Image. Max 4MB per file.' nullable: false required: - outlet_id - file security: [] /api/v1/outlet/editoutlet: post: summary: 'Edit Outlet.' operationId: editOutlet description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - Outlet requestBody: required: true content: multipart/form-data: schema: type: object properties: business_name: type: string description: 'Nama Usaha.' example: Toko nullable: false business_description: type: string description: 'Deskripsi Usaha.' example: Toko nullable: false logo: type: string format: binary description: 'Logo Outlet max 2MB' nullable: true front_photo: type: string format: binary description: 'Foto Front Photo Outlet max 2MB' nullable: true category: type: string description: 'Kategori Outlet.' example: FnB nullable: false outlet_uuid: type: string description: 'Outlet UUID Usaha.' example: 3904-394as-39040 nullable: false cash: type: boolean description: 'Menerima Uang Tunai.' example: true nullable: false debit_card: type: boolean description: 'Menerima Kartu Debit.' example: true nullable: false credit_card: type: boolean description: 'Menerima Kartu Kredit.' example: true nullable: false address: type: string description: 'Alamat Outlet.' example: 'Jl. Raya No. 1' nullable: false building_name: type: string description: 'optional Nama Bangunan Outlet.' example: 'Bangunan Baru' nullable: true phone: type: string description: 'Nomor Telepon Outlet.' example: '08123456789' nullable: false city: type: string description: 'Kota Outlet.' example: '12' nullable: false zipcode: type: string description: 'Kode Pos Outlet.' example: '12345' nullable: false latitude: type: string description: 'Latitude Outlet.' example: '-6.2088' nullable: false longitude: type: string description: 'Longitude Outlet.' example: '106.8456' nullable: false schedule_open: type: json description: 'Jadwal Buka Outlet.' example: '{"senin": "08:00-17:00","selasa": "08:00-17:00","rabu": "08:00-17:00","kamis": "08:00-17:00","jumat": "08:00-17:00","sabtu": "08:00-17:00","minggu": "08:00-17:00"}' nullable: false website: type: string description: 'optional Website Outlet.' example: 'https://outlet.com' nullable: true facebook: type: string description: 'optional Facebook Outlet.' example: 'https://facebook.com/outlet' nullable: true twitter: type: string description: 'optional Twitter Outlet.' example: 'https://twitter.com/outlet' nullable: true instagram: type: string description: 'optional Instagram Outlet.' example: 'https://instagram.com/outlet' nullable: true whatsapp: type: string description: 'optional WhatsApp Outlet.' example: '08123456789' nullable: true required: - business_name - business_description - category - outlet_uuid - cash - debit_card - credit_card - address - phone - city - zipcode - latitude - longitude - schedule_open security: [] /api/v1/outlet/OTPremoveoutlet: post: summary: 'Request OTP Remove.' operationId: requestOTPRemove description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - Outlet security: [] /api/v1/outlet/removeoutlet: post: summary: 'Delete My Outlet.' operationId: deleteMyOutlet description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"data berhasil didapatkan\",\n\"data\": [data]\n}" tags: - Outlet requestBody: required: true content: application/json: schema: type: object properties: otp: type: string description: 'OTP User Usaha.' example: '3904' nullable: false reason: type: string description: '' example: architecto nullable: false outlet_uuid: type: string description: 'Outlet UUID Usaha.' example: 3904-394as-39040 nullable: false required: - otp - reason - outlet_uuid security: [] /api/v1/outlet/mostview: post: summary: 'Most View Outlet' operationId: mostViewOutlet description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - Outlet security: [] /api/v1/outlet/detail/review/photos: post: summary: 'List Media Outlet' operationId: listMediaOutlet description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - Outlet requestBody: required: true content: application/json: schema: type: object properties: uuid: type: string description: uuid. example: f3b80872-b9cc-42d3-9ef3-6363a2e7dd7f nullable: false required: - uuid security: [] /api/v1/auth/myfile: post: summary: 'My File' operationId: myFile description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - Profile security: [] /api/v1/auth/request/delete: post: summary: 'Request Delete' operationId: requestDelete description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - Profile requestBody: required: true content: application/json: schema: type: object properties: reason: type: string description: 'Alasan penghapusan' example: architecto nullable: false required: - reason security: [] /api/v1/auth/change-password: post: summary: 'Change Password' operationId: changePassword description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Password berhasil di update\",\n\"data\": [data]\n}" tags: - Profile requestBody: required: true content: application/json: schema: type: object properties: password: type: string description: 'Password pengguna.' example: zxcasd123 nullable: false cpassword: type: string description: 'Password pengguna.' example: zxcasd123 nullable: false required: - password - cpassword security: [] /api/v1/profile/detail: post: summary: 'My Profile' operationId: myProfile description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - Profile security: [] /api/v1/profile/photo: post: summary: Avatar operationId: avatar description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - Profile requestBody: required: true content: multipart/form-data: schema: type: object properties: path_image: type: string format: binary description: 'Foto Avatar pengguna max 2MB' nullable: false required: - path_image security: [] /api/v1/profile/edit: post: summary: Edit operationId: edit description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - Profile requestBody: required: true content: application/json: schema: type: object properties: full_name: type: string description: 'Nama Lengkap' example: architecto nullable: false position: type: string description: Posisi example: architecto nullable: false username: type: string description: Username example: architecto nullable: false phone: type: string description: 'Nomor Handphone' example: architecto nullable: false company_name: type: string description: 'Nama Perusahaan' example: architecto nullable: false business_number: type: string description: 'Nomor Bisnis' example: architecto nullable: false company_email: type: string description: 'Email Perusahaan' example: gbailey@example.net nullable: false email: type: string description: Email example: gbailey@example.net nullable: false required: - full_name - position - username - phone - company_name - business_number - company_email - email security: [] /api/v1/staff/list: post: summary: List operationId: list description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Staff security: [] /api/v1/staff/outlet/detail: post: summary: 'Outlet Detail' operationId: outletDetail description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Staff requestBody: required: true content: application/json: schema: type: object properties: outlet_uuid: type: string description: 'UUID Outlet.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false required: - outlet_uuid security: [] /api/v1/staff/listbyOutlet: post: summary: 'List by Outlet' operationId: listByOutlet description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Staff requestBody: required: true content: application/json: schema: type: object properties: outlet_uuid: type: string description: 'UUID Outlet.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false required: - outlet_uuid security: [] /api/v1/staff/create: post: summary: Create operationId: create description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Staff requestBody: required: true content: application/json: schema: type: object properties: outlet_uuid: type: string description: 'UUID Outlet.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false name: type: string description: 'Nama Staff.' example: Debian nullable: false phone: type: string description: 'Nomor Telepon Staff.' example: '081213140683' nullable: false pin: type: numeric description: 'Pin Staff.' example: '1234' nullable: false jabatan: type: string description: 'Jabatan Staff.' example: Staff nullable: false gender: type: boolean description: 'gender Staff.' example: true nullable: false required: - outlet_uuid - name - phone - pin - jabatan - gender security: [] /api/v1/staff/update: post: summary: Update operationId: update description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Staff requestBody: required: true content: application/json: schema: type: object properties: staff_uuid: type: string description: 'UUID Staff.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false name: type: string description: 'Nama Staff.' example: Debian nullable: false jabatan: type: string description: 'Jabatan Staff.' example: Manager nullable: false phone: type: string description: 'Nomor Telepon Staff.' example: '081213140683' nullable: false gender: type: boolean description: 'gender Staff.' example: true nullable: false required: - staff_uuid - name - jabatan - phone - gender security: [] /api/v1/staff/delete: post: summary: Delete operationId: delete description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Staff requestBody: required: true content: application/json: schema: type: object properties: staff_uuid: type: string description: 'UUID Staff.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false required: - staff_uuid security: [] /api/v1/staff/voucher/claim: post: summary: 'Voucher Claim' operationId: voucherClaim description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Voucher Claim berhasil didapatkan\",\n\"data\": {\n \"title\": \"Voucher A\",\n \"voucher_type\": \"diskon\",\n \"diskon_persen\": 10,\n \"price_awal\": \"200000\",\n \"price_akhir\": \"180000\",\n \"is_enabled\": false,\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Staff requestBody: required: false content: application/json: schema: type: object properties: status: type: string description: 'optional Status Voucher.' example: claimed nullable: false security: [] /api/v1/subscription/midtrans/key: post: summary: 'Get Midtrans Key' operationId: getMidtransKey description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Subscription security: [] /api/v1/subscription/master: post: summary: 'Get Master Plan' operationId: getMasterPlan description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Subscription requestBody: required: false content: application/json: schema: type: object properties: type: type: string description: 'Type Plan.' example: subscription nullable: false security: [] /api/v1/subscription/subscription/create: post: summary: 'Sign Up Enhance' operationId: signUpEnhance description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data submit berhasil',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Subscription requestBody: required: true content: application/json: schema: type: object properties: outlet_uuids: type: array description: 'Array of Outlet UUIDs.' example: - 123e4567-e89b-12d3-a456-426614174000 - 123e4567-e89b-12d3-a456-426614175000 items: type: string type: type: string description: 'Tipe Subscription.' example: subscription nullable: false plan_id: type: string description: 'ID Plan.' example: '1' nullable: false start_date: type: string description: 'Must be a valid date in the format Y-m-d.' example: '2026-06-11' nullable: false required: - outlet_uuids - type - plan_id - start_date security: [] /api/v1/subscription/recreate: post: summary: 'Recreate Subscription' operationId: recreateSubscription description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Subscription berhasil di-recreate\",\n\"data\": [\n {\n \"message\": 'Data submit berhasil',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n}\n]\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Subscription requestBody: required: false content: application/json: schema: type: object properties: enhance_uuids: type: array description: 'Enhance UUIDs.' example: null items: type: string start_date: type: required description: 'Start date for new subscription.' example: '2026-05-04' nullable: false security: [] /api/v1/subscription/billing: post: summary: 'Billing History' operationId: billingHistory description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Subscription requestBody: required: false content: application/json: schema: type: object properties: type: type: string description: 'Type of plan (subscription, voucher). Optional.' example: architecto nullable: false status: type: string description: 'Status of billing (pending, paid, expired) multi status. Optional.' example: architecto nullable: false security: [] /api/v1/subscription/billing/detail: post: summary: 'Billing Detail' operationId: billingDetail description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data outlet terhapus',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Subscription requestBody: required: false content: application/json: schema: type: object properties: billing_uuid: type: string description: 'Billing UUID.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false snap_token: type: string description: 'Midtrans Snap Token.' example: mid-123e4567-e89b-12d3-a456-426614174000 nullable: false security: [] /api/v1/subscription/billing/payment: post: summary: 'Validate Payment' operationId: validatePayment description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data berhasil di submit',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Subscription requestBody: required: false content: application/json: schema: type: object properties: billing_uuid: type: string description: 'Billing UUID.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false security: [] /api/v1/transfer/request: post: summary: 'Request Code' operationId: requestCode description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - 'Transfer Data' requestBody: required: true content: application/json: schema: type: object properties: reason: type: string description: 'reason pengguna.' example: 'ganti pengurus' nullable: false outlet_uuids: type: array description: 'Array of Outlet UUIDs.' example: - 123e4567-e89b-12d3-a456-426614174000 - 123e4567-e89b-12d3-a456-426614175000 items: type: string required: - reason - outlet_uuids security: [] /api/v1/transfer/validate: post: summary: 'Validate Code' operationId: validateCode description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - 'Transfer Data' requestBody: required: true content: application/json: schema: type: object properties: kode_transfer: type: string description: 'kode transfer.' example: '1234567890' nullable: false required: - kode_transfer security: [] /api/v1/transfer/history: post: summary: History operationId: history description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"File berhasil di submit\",\n\"data\": [data]\n}" tags: - 'Transfer Data' security: [] /api/v1/voucher/signup: post: summary: SignUp operationId: signUp description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data submit berhasil',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Voucher requestBody: required: true content: multipart/form-data: schema: type: object properties: outlet_uuids: type: array description: 'Array of Outlet UUIDs.' example: - 123e4567-e89b-12d3-a456-426614174000 - 123e4567-e89b-12d3-a456-426614175000 items: type: string banner_image: type: string format: binary description: 'Image banner voucher max 2MB' nullable: false plan_id: type: string description: 'UUID Plan.' example: 3333-e89b-12d3-a456-426614174000 nullable: false type_voucher: type: string description: 'Tipe Voucher.' example: free/diskon nullable: false diskon_persen: type: integer description: 'Diskon Persen.' example: 10 nullable: true title: type: string description: 'Title Voucher.' example: 'Voucher Diskon Spesial' nullable: false kuota: type: string description: 'Kuota Voucher.' example: '99' nullable: false price_awal: type: string description: 'Harga Awal.' example: '200000' nullable: true price_akhir: type: string description: 'Harga Diskon.' example: '150000' nullable: true deskripsi: type: string description: 'Deskripsi Voucher.' example: 'Deskripsi Voucher' nullable: false tnc: type: string description: 'TnC Voucher.' example: 'Term and Condition Voucher' nullable: false contact_person: type: string description: 'optional Contact Person Voucher.' example: '08123456789' nullable: true start_date: type: string description: 'validation.date validation.after_or_equal.' example: '2052-07-04' nullable: true end_date: type: string description: validation.date. example: '2026-06-11T13:13:21' nullable: true required: - outlet_uuids - banner_image - plan_id - type_voucher - diskon_persen - title - kuota - price_awal - price_akhir - deskripsi - tnc security: [] /api/v1/voucher/history: post: summary: 'My Voucher' operationId: myVoucher description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"voucher_list\": [\n {\n \"title\": \"Voucher A\",\n \"voucher_type\": \"diskon\",\n \"diskon_persen\": 10,\n \"price_awal\": \"200000\",\n \"price_akhir\": \"180000\",\n }\n ]\n\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Voucher security: [] /api/v1/voucher/detail: post: summary: 'Detail Voucher' operationId: detailVoucher description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": {\n \"title\": \"Voucher A\",\n \"voucher_type\": \"diskon\",\n \"diskon_persen\": 10,\n \"price_awal\": \"200000\",\n \"price_akhir\": \"180000\",\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Voucher requestBody: required: true content: application/json: schema: type: object properties: voucher_uuid: type: string description: 'UUID Voucher.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false required: - voucher_uuid security: [] /api/v1/voucher/activate: post: summary: 'Activate Voucher' operationId: activateVoucher description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Voucher berhasil diaktifkan\",\n\"data\": {\n \"title\": \"Voucher A\",\n \"voucher_type\": \"diskon\",\n \"diskon_persen\": 10,\n \"price_awal\": \"200000\",\n \"price_akhir\": \"180000\",\n \"is_enabled\": true,\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Voucher requestBody: required: true content: application/json: schema: type: object properties: voucher_uuid: type: string description: 'UUID Voucher.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false start_date: type: string description: 'Tanggal Mulai Voucher (format Y-m-d).' example: architecto nullable: false end_date: type: string description: 'Tanggal Berakhir Voucher (format Y-m-d).' example: architecto nullable: false required: - voucher_uuid - start_date - end_date security: [] /api/v1/voucher/stop: post: summary: 'Stop Voucher' operationId: stopVoucher description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Voucher berhasil dihentikan\",\n\"data\": {\n \"title\": \"Voucher A\",\n \"voucher_type\": \"diskon\",\n \"diskon_persen\": 10,\n \"price_awal\": \"200000\",\n \"price_akhir\": \"180000\",\n \"is_enabled\": false,\n}\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Voucher requestBody: required: true content: application/json: schema: type: object properties: voucher_uuid: type: string description: 'UUID Voucher.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false required: - voucher_uuid security: [] /api/v1/voucher/recreate: post: summary: Recreate operationId: recreate description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"message\": 'Data submit berhasil',\n \"created_at\": '2021-12-01 12:00:00',\n \"updated_at\": '2021-12-01 12:00:00'\n\n}\n]" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Voucher requestBody: required: false content: application/json: schema: type: object properties: voucher_uuids: type: required description: 'Voucher UUIDs.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false security: [] /api/v1/voucher/edit: post: summary: 'Edit Voucher' operationId: editVoucher description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": {\n \"title\": \"Voucher A\",\n \"voucher_type\": \"diskon\",\n \"diskon_persen\": 10,\n \"price_awal\": \"200000\",\n \"price_akhir\": \"180000\",\n}\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Voucher requestBody: required: true content: multipart/form-data: schema: type: object properties: voucher_uuid: type: string description: 'UUID Voucher.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false title: type: string description: 'optional Title voucher.' example: 'Voucher A' nullable: false voucher_type: type: string description: 'optional Type voucher.' example: diskon nullable: false diskon_persen: type: integer description: 'optional Discount percentage.' example: 10 nullable: false price_awal: type: string description: 'optional Original price.' example: '200000' nullable: false price_akhir: type: string description: 'optional Final price.' example: '180000' nullable: false quota: type: integer description: 'optional Quota.' example: 100 nullable: false details_promotion: type: string description: 'optional Details promotion.' example: 'Details promotion' nullable: false terms_conditions: type: string description: 'optional Terms conditions.' example: 'Terms conditions' nullable: false banner_image: type: string format: binary description: 'optional Banner image max 2MB' nullable: false contact_person: type: string description: 'optional Contact person.' example: 'Contact person' nullable: false required: - voucher_uuid security: [] /api/v1/voucher/update/image: post: summary: 'Edit Voucher Images' operationId: editVoucherImages description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": \"success\",\n\"message\": \"Images updated successfully\",\n\"data\": {\n \"voucher_uuid\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"voucher_image_1\": \"path/to/image1.jpg\",\n}\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Voucher requestBody: required: true content: multipart/form-data: schema: type: object properties: voucher_uuid: type: string description: 'UUID Voucher.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: false voucher_image: type: string format: binary description: 'Image detail voucher max 2MB' nullable: false type: type: string description: 'Type gambar integer (1-4).' example: '1' nullable: false required: - voucher_uuid - voucher_image - type security: [] /api/v1/voucher/redeem: post: summary: 'Redeem Voucher' operationId: redeemVoucher description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"voucher_title\": \"Voucher A\",\n \"claimed_at\": \"2024-01-01 12:00:00\",\n \"status\": \"claimed\"\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Voucher Claim' requestBody: required: true content: application/json: schema: type: object properties: code: type: string description: 'Code for redeem voucher.' example: L12345678 nullable: false required: - code security: [] /api/v1/voucher/redeem/history: post: summary: 'Redeem History' operationId: redeemHistory description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"voucher_title\": \"Voucher A\",\n \"claimed_at\": \"2024-01-01 12:00:00\",\n \"status\": \"claimed\"\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Voucher Claim' requestBody: required: false content: application/json: schema: type: object properties: keyword: type: string description: 'Keyword for redeem voucher.' example: 'Nama Voucher' nullable: false security: [] /api/v1/voucher/redeem/detail: post: summary: 'Redeem Detail' operationId: redeemDetail description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil di submit\",\n\"data\": [\n {\n \"voucher_title\": \"Voucher A\",\n \"claimed_at\": \"2024-01-01 12:00:00\",\n \"status\": \"claimed\"\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Voucher Claim' requestBody: required: false content: application/json: schema: type: object properties: code: type: string description: 'code required for redeem voucher.' example: L90099090 nullable: false security: [] /api/v1/voucher/redeem/reject: post: summary: 'Redeem Reject' operationId: redeemReject description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Voucher claim berhasil di-reject\",\n\"data\": {\n \"id\": 1,\n \"code\": \"L90099090\",\n \"status\": \"rejected\",\n \"staff_id\": 1,\n \"updated_at\": \"2024-01-01 12:00:00\"\n}\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Voucher Claim' requestBody: required: true content: application/json: schema: type: object properties: code: type: string description: 'Code for reject voucher claim.' example: L90099090 nullable: false required: - code security: [] /api/v1/voucher/redeem/logs: post: summary: 'Redeem Logs' operationId: redeemLogs description: '' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: "{\n\"status\": success,\n\"message\": \"Data berhasil diambil\",\n\"data\": [\n {\n \"id\": 1,\n \"uuid\": \"claim-uuid\",\n \"code\": \"L90099090\",\n \"voucher\": {\n \"uuid\": \"voucher-uuid\",\n \"title\": \"Voucher A\",\n \"voucher_type\": \"diskon\",\n \"diskon_persen\": 20,\n \"quota\": 100\n },\n \"redeemBy\": {\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"username\": \"08123456789\"\n },\n \"staffBy\": {\n \"id\": 1,\n \"name\": \"Staff Name\",\n \"jabatan\": \"Kasir\"\n },\n \"claimed_at\": \"2024-01-01 12:00:00\",\n \"status\": \"claimed\"\n }\n]\n}" 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Voucher Claim' requestBody: required: true content: application/json: schema: type: object properties: voucher_uuids: type: array description: 'Voucher UUIDs to get redeem logs.' example: - 123e4567-e89b-12d3-a456-426614174000 items: type: string required: - voucher_uuids security: []