openapi: 3.0.3 info: title: 'WashFlow API Documentation' description: '' version: 1.0.0 servers: - url: 'http://localhost:8000' tags: - name: Endpoints description: '' paths: /api/v1/auth/login: post: summary: '' operationId: postApiV1AuthLogin description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: 'Must be a valid email address.' example: gbailey@example.net password: type: string description: '' example: '|]|{+-' required: - email - password security: [] '/api/v1/track/{token}': get: summary: '' operationId: getApiV1TrackToken description: '' parameters: [] responses: 404: description: '' content: application/json: schema: type: object example: message: 'No query results for model [App\Models\OrderQrToken].' properties: message: type: string example: 'No query results for model [App\Models\OrderQrToken].' tags: - Endpoints security: [] parameters: - in: path name: token description: '' example: architecto required: true schema: type: string /api/v1/auth/me: get: summary: '' operationId: getApiV1AuthMe description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] /api/v1/auth/refresh: post: summary: '' operationId: postApiV1AuthRefresh description: '' parameters: [] responses: { } tags: - Endpoints security: [] /api/v1/auth/logout: post: summary: '' operationId: postApiV1AuthLogout description: '' parameters: [] responses: { } tags: - Endpoints security: [] /api/v1/dashboard/mobile: get: summary: '' operationId: getApiV1DashboardMobile description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] /api/v1/orders/calculate-price: post: summary: '' operationId: postApiV1OrdersCalculatePrice description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: service_type: type: string description: '' example: express enum: - wash - dry - wash_dry - fold - iron - express - custom weight_kg: type: number description: 'Must be at least 0.1.' example: 27 priority: type: string description: '' example: express enum: - normal - express - priority nullable: true required: - service_type - weight_kg security: [] '/api/v1/orders/qr/{token}': get: summary: '' operationId: getApiV1OrdersQrToken description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] parameters: - in: path name: token description: '' example: architecto required: true schema: type: string '/api/v1/orders/{id}/stage': patch: summary: '' operationId: patchApiV1OrdersIdStage description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: stage: type: string description: '' example: released enum: - received - queued - washing - drying - ironing - folding - packing - ready_for_pickup - released notes: type: string description: '' example: architecto nullable: true required: - stage security: [] parameters: - in: path name: id description: 'The ID of the order.' example: architecto required: true schema: type: string /api/v1/orders: get: summary: '' operationId: getApiV1Orders description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] post: summary: '' operationId: postApiV1Orders description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: customer_id: type: string description: 'Must be a valid UUID. Must match an existing stored value.' example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed branch_id: type: string description: 'Must be a valid UUID. Must match an existing stored value.' example: 6b72fe4a-5b40-307c-bc24-f79acf9a1bb9 nullable: true weight_kg: type: number description: 'Must be at least 0.1.' example: 77 service_type: type: string description: '' example: wash enum: - wash - dry - wash_dry - fold - iron - express - custom custom_service_name: type: string description: 'This field is required when service_type is custom. Must not be greater than 255 characters.' example: i nullable: true payment_status: type: string description: '' example: partial enum: - unpaid - partial - paid - refunded nullable: true payment_method: type: string description: '' example: card enum: - cash - card - gcash - bank_transfer - credit nullable: true fulfillment_type: type: string description: '' example: delivery enum: - pickup - delivery nullable: true priority: type: string description: '' example: priority enum: - normal - express - priority nullable: true skip_ironing: type: boolean description: '' example: true total_amount: type: number description: 'Must be at least 0.' example: 76 nullable: true paid_amount: type: number description: 'Must be at least 0.' example: 60 nullable: true estimated_finish_at: type: string description: 'Must be a valid date.' example: '2026-07-01T05:48:40' nullable: true notes: type: string description: '' example: architecto nullable: true required: - customer_id - weight_kg - service_type security: [] '/api/v1/orders/{id}': get: summary: '' operationId: getApiV1OrdersId description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] parameters: - in: path name: id description: 'The ID of the order.' example: architecto required: true schema: type: string '/api/v1/customers/{customer}/orders': get: summary: '' operationId: getApiV1CustomersCustomerOrders description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] parameters: - in: path name: customer description: 'The customer.' example: architecto required: true schema: type: string /api/v1/customers: get: summary: '' operationId: getApiV1Customers description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] post: summary: '' operationId: postApiV1Customers description: '' parameters: [] responses: { } tags: - Endpoints security: [] '/api/v1/customers/{id}': get: summary: '' operationId: getApiV1CustomersId description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] put: summary: '' operationId: putApiV1CustomersId description: '' parameters: [] responses: { } tags: - Endpoints security: [] delete: summary: '' operationId: deleteApiV1CustomersId description: '' parameters: [] responses: { } tags: - Endpoints security: [] parameters: - in: path name: id description: 'The ID of the customer.' example: architecto required: true schema: type: string /api/v1/branches: get: summary: '' operationId: getApiV1Branches description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] post: summary: '' operationId: postApiV1Branches description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b code: type: string description: 'Must not be greater than 20 characters.' example: ngzmiyvdljnikhwa timezone: type: string description: 'Must not be greater than 64 characters.' example: Australia/Lord_Howe nullable: true address: type: string description: '' example: architecto nullable: true phone: type: string description: 'Must not be greater than 30 characters.' example: 'n' nullable: true required: - name - code security: [] '/api/v1/branches/{id}': get: summary: '' operationId: getApiV1BranchesId description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] put: summary: '' operationId: putApiV1BranchesId description: '' parameters: [] responses: { } tags: - Endpoints requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Must not be greater than 255 characters.' example: b code: type: string description: 'Must not be greater than 20 characters.' example: ngzmiyvdljnikhwa timezone: type: string description: 'Must not be greater than 64 characters.' example: Australia/Lord_Howe nullable: true address: type: string description: '' example: architecto nullable: true phone: type: string description: 'Must not be greater than 30 characters.' example: 'n' nullable: true is_active: type: boolean description: '' example: true security: [] parameters: - in: path name: id description: 'The ID of the branch.' example: architecto required: true schema: type: string