openapi: 3.0.3 info: title: 'BS Homolog API Documentation' description: '' version: 1.0.0 servers: - url: 'https://api.bs-homolog.pensou.app.br' tags: - name: ACL description: 'Endpoints for managing roles and permissions.' - name: 'Accounts Payable Receivable' description: 'Endpoints for accounts payable receivable' - name: Authentication description: 'Endpoints for authentication' - name: 'Bank Accounts' description: 'Endpoints for bank accounts' - name: Banks description: 'Endpoints for banks' - name: CEP description: '' - name: 'Cash Flow' description: 'Endpoints for cash flow' - name: 'Cash Session' description: 'Endpoints for cash session' - name: Customers description: 'Endpoints for customers' - name: 'Document Categories' description: 'Endpoints for document categories' - name: Documents description: 'Endpoints for documents' - name: 'Employee Roles' description: 'Endpoints for employee roles' - name: Employees description: 'Endpoints for employees' - name: Endpoints description: '' - name: Files description: 'Endpoints for files' - name: Import description: 'Endpoints for managing NFe imports and product processing.' - name: Notifications description: 'Endpoints for user notifications' - name: 'Payment Receipts' description: 'Endpoints for payment receipts' - name: 'Permission Groups' description: 'Endpoints for permission groups' - name: 'Product Brands' description: 'Endpoints for product brands' - name: 'Product Families' description: 'Endpoints for product families' - name: 'Product Quantity Lists' description: 'Endpoints for managing product quantity lists' - name: 'Product Request Fulfillment' description: 'Endpoints for fulfilling product request items' - name: 'Product Requests' description: 'Endpoints for managing product requests for works' - name: Products description: 'Endpoints for products' - name: Sectors description: 'Endpoints for sectors' - name: 'Status Modules' description: 'Endpoints for modules that have status' - name: Statuses description: 'Endpoints for statuses' - name: Stock description: 'Endpoints for stock management' - name: 'Stock Movements' description: 'Endpoints for stock movement management' - name: Suppliers description: 'Endpoints for suppliers' - name: 'System Types' description: 'Endpoints for system types' - name: 'Transaction Categories' description: 'Endpoints for transaction categories' - name: Units description: 'Endpoints for units' - name: Users description: 'Endpoints for users' - name: 'Work Locations' description: 'Endpoints for work locations' - name: Works description: 'Endpoints for works' components: securitySchemes: default: type: http scheme: bearer description: '' security: - default: [] paths: /api/acl/roles: get: summary: List operationId: list description: 'List roles.' parameters: - in: query name: q description: 'Search query.' example: 'Role name' required: false schema: type: string description: 'Search query.' example: 'Role name' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: ea46d01c-645d-307a-adac-bb6dcc4697f0 name: eos display_name: 'Excepturi nemo aut vero est tempore error.' permissions_count: null - id: 7ebb0fc9-d847-34a1-8732-76244d8fd4ff name: eaque display_name: 'Ipsam velit tempore vitae mollitia et.' permissions_count: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: ea46d01c-645d-307a-adac-bb6dcc4697f0 name: eos display_name: 'Excepturi nemo aut vero est tempore error.' permissions_count: null - id: 7ebb0fc9-d847-34a1-8732-76244d8fd4ff name: eaque display_name: 'Ipsam velit tempore vitae mollitia et.' permissions_count: null items: type: object properties: id: type: string example: ea46d01c-645d-307a-adac-bb6dcc4697f0 name: type: string example: eos display_name: type: string example: 'Excepturi nemo aut vero est tempore error.' permissions_count: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - ACL post: summary: Create operationId: create description: 'Create a new role.' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - ACL requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Name. example: 'Example Name' display_name: type: string description: 'Display name.' example: 'Example Name' permissions: type: array description: 'Permissions *. The uuid of an existing record in the permissions table.' example: - f136b691-9b08-3cd5-80e8-190cdc4952b8 items: type: string required: - name - display_name '/api/acl/roles/{id}': put: summary: Update operationId: update description: 'Update a role.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - ACL requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: Name. example: 'Example Name' display_name: type: string description: 'Display name.' example: 'Example Name' permissions: type: array description: 'Permissions *. The uuid of an existing record in the permissions table.' example: - bfbf781a-9fe2-3f16-b890-a17520389f7a items: type: string get: summary: Show operationId: show description: 'Show a role.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 40fcf5ff-3c09-3518-b4f6-16cf037dc56b name: aut display_name: 'Dolores quas et consequatur officia soluta.' permissions_count: null properties: data: type: object properties: id: type: string example: 40fcf5ff-3c09-3518-b4f6-16cf037dc56b name: type: string example: aut display_name: type: string example: 'Dolores quas et consequatur officia soluta.' permissions_count: type: string example: null tags: - ACL parameters: - in: path name: id description: 'The ID of the role.' example: 1 required: true schema: type: integer '/api/acl/roles/{role}/permissions': get: summary: 'Role Permissions' operationId: rolePermissions description: 'List permissions associated with a role.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: null name: et display_name: 'Laborum et voluptatibus quos consequatur ut.' - id: null name: ea display_name: 'Nulla eligendi quam quam ut vel temporibus aspernatur.' properties: data: type: array example: - id: null name: et display_name: 'Laborum et voluptatibus quos consequatur ut.' - id: null name: ea display_name: 'Nulla eligendi quam quam ut vel temporibus aspernatur.' items: type: object properties: id: type: string example: null name: type: string example: et display_name: type: string example: 'Laborum et voluptatibus quos consequatur ut.' tags: - ACL parameters: - in: path name: role description: 'The role.' example: 1 required: true schema: type: integer '/api/acl/roles/{role}': delete: summary: Delete operationId: delete description: 'Delete a role.' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - ACL parameters: - in: path name: role description: 'The role.' example: 1 required: true schema: type: integer /api/acl/permissions: get: summary: List operationId: list description: 'List permissions.' parameters: - in: query name: q description: 'Search query.' example: 'Permission name' required: false schema: type: string description: 'Search query.' example: 'Permission name' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: null name: cupiditate display_name: 'Et ut error non.' - id: null name: consequuntur display_name: 'Fugiat atque aperiam quo accusamus ratione delectus ut.' links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: null name: cupiditate display_name: 'Et ut error non.' - id: null name: consequuntur display_name: 'Fugiat atque aperiam quo accusamus ratione delectus ut.' items: type: object properties: id: type: string example: null name: type: string example: cupiditate display_name: type: string example: 'Et ut error non.' links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - ACL post: summary: Create operationId: create description: 'Create a new permission.' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - ACL requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Name. example: 'Example Name' display_name: type: string description: 'Display name.' example: 'Example Name' required: - name - display_name '/api/acl/permissions/{id}': put: summary: Update operationId: update description: 'Update a permission.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - ACL requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: Name. example: 'Example Name' display_name: type: string description: 'Display name.' example: 'Example Name' get: summary: Show operationId: show description: 'Show a permission.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: null name: ratione display_name: 'Dignissimos ab placeat doloremque.' properties: data: type: object properties: id: type: string example: null name: type: string example: ratione display_name: type: string example: 'Dignissimos ab placeat doloremque.' tags: - ACL parameters: - in: path name: id description: 'The ID of the permission.' example: 1 required: true schema: type: integer '/api/acl/permissions/{permission}': delete: summary: Delete operationId: delete description: 'Delete a permission.' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - ACL parameters: - in: path name: permission description: 'The permission.' example: 1 required: true schema: type: integer /api/accounts-payable-receivable/reminders: get: summary: 'List reminders for accounts payable receivable' operationId: listRemindersForAccountsPayableReceivable description: 'List reminders for accounts payable receivable that are about to expire soon' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 251d7c52-c400-3e6a-9b2a-72943d64e8c3 type: entrada payment_method: boleto amount: 7421.86 due_date: '2026-02-23T03:00:00.000000Z' status: null payment_date: null description: 'Illum similique rerum quam corrupti nam qui porro autem.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: nihil field2: 60 field3: false notes: 'Quod omnis ipsa maxime accusantium.' created_at: null updated_at: null - id: 03686c74-923d-3483-91ca-37970c814bac type: saída payment_method: boleto amount: 8147.94 due_date: '2026-02-16T03:00:00.000000Z' status: null payment_date: null description: 'Odit eligendi voluptatibus pariatur sunt atque voluptas tempore consequatur animi et quibusdam.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: sed field2: 81 field3: true notes: 'Animi voluptatem quia est dicta.' created_at: null updated_at: null properties: data: type: array example: - id: 251d7c52-c400-3e6a-9b2a-72943d64e8c3 type: entrada payment_method: boleto amount: 7421.86 due_date: '2026-02-23T03:00:00.000000Z' status: null payment_date: null description: 'Illum similique rerum quam corrupti nam qui porro autem.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: nihil field2: 60 field3: false notes: 'Quod omnis ipsa maxime accusantium.' created_at: null updated_at: null - id: 03686c74-923d-3483-91ca-37970c814bac type: saída payment_method: boleto amount: 8147.94 due_date: '2026-02-16T03:00:00.000000Z' status: null payment_date: null description: 'Odit eligendi voluptatibus pariatur sunt atque voluptas tempore consequatur animi et quibusdam.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: sed field2: 81 field3: true notes: 'Animi voluptatem quia est dicta.' created_at: null updated_at: null items: type: object properties: id: type: string example: 251d7c52-c400-3e6a-9b2a-72943d64e8c3 type: type: string example: entrada payment_method: type: string example: boleto amount: type: number example: 7421.86 due_date: type: string example: '2026-02-23T03:00:00.000000Z' status: type: string example: null payment_date: type: string example: null description: type: string example: 'Illum similique rerum quam corrupti nam qui porro autem.' is_recurring: type: string example: null recurrence_config: type: string example: null parent_id: type: string example: null recurrence_order: type: integer example: 1 total_recurrences: type: string example: null children_count: type: integer example: 0 remaining_recurrences: type: string example: null has_children: type: boolean example: false field1: type: string example: nihil field2: type: integer example: 60 field3: type: boolean example: false notes: type: string example: 'Quod omnis ipsa maxime accusantium.' created_at: type: string example: null updated_at: type: string example: null tags: - 'Accounts Payable Receivable' /api/accounts-payable-receivable/reminders/mark-as-read: post: summary: 'Mark reminders as read' operationId: markRemindersAsRead description: 'Mark reminders for accounts payable receivable as read' parameters: - in: query name: items description: 'The uuid of an existing record in the account_payable_receivables table.' example: - delectus required: true schema: type: array description: 'The uuid of an existing record in the account_payable_receivables table.' example: - delectus items: type: string responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Accounts Payable Receivable' /api/accounts-payable-receivable: get: summary: 'List accounts payable receivable' operationId: listAccountsPayableReceivable description: 'List all accounts payable receivable' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Items per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 10 required: false schema: type: integer description: 'Items per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 10 nullable: true - in: query name: q description: 'Search query.' example: Salary required: false schema: type: string description: 'Search query.' example: Salary nullable: true - in: query name: type description: Type. example: entrada required: false schema: type: string description: Type. example: entrada enum: - entrada - saída nullable: true - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - eum required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - eum items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - saepe required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - saepe items: type: string - in: query name: statuses description: '' example: - pago required: false schema: type: array description: '' example: - pago items: type: string enum: - 'a vencer' - pago - vencido - recebido - cancelado nullable: true - in: query name: payment_method description: 'Payment method.' example: cheque required: false schema: type: string description: 'Payment method.' example: cheque enum: - cheque - boleto - outro nullable: true - in: query name: date_start description: 'Start date. O campo value deve ser uma data válida.' example: '2023-01-01' required: false schema: type: string description: 'Start date. O campo value deve ser uma data válida.' example: '2023-01-01' nullable: true - in: query name: date_end description: 'End date. O campo value deve ser uma data válida.' example: '2023-12-31' required: false schema: type: string description: 'End date. O campo value deve ser uma data válida.' example: '2023-12-31' nullable: true - in: query name: has_children description: 'Filter accounts that have recurring children.' example: false required: false schema: type: boolean description: 'Filter accounts that have recurring children.' example: false nullable: true - in: query name: is_recurring description: 'Filter by recurring status (true: only recurring, false: only non-recurring, null: all).' example: false required: false schema: type: boolean description: 'Filter by recurring status (true: only recurring, false: only non-recurring, null: all).' example: false nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: a4c95ab2-4bb6-30b1-977f-8a79339db0b4 type: entrada payment_method: cheque amount: 5820.43 due_date: '2026-02-27T03:00:00.000000Z' status: null payment_date: null description: 'Provident molestiae sed vel sit libero id veritatis odio quas modi earum ab.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: ipsum field2: 91 field3: false notes: 'Eveniet at ex quidem maiores accusantium.' created_at: null updated_at: null - id: 9ff29e71-f528-3d6b-abcb-56425588f26d type: entrada payment_method: boleto amount: 3347.46 due_date: '2026-02-23T03:00:00.000000Z' status: null payment_date: null description: 'Corrupti ipsam blanditiis rerum dolorem fuga incidunt molestiae accusamus illum.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: dolor field2: 92 field3: false notes: 'Non id alias aut ea.' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: a4c95ab2-4bb6-30b1-977f-8a79339db0b4 type: entrada payment_method: cheque amount: 5820.43 due_date: '2026-02-27T03:00:00.000000Z' status: null payment_date: null description: 'Provident molestiae sed vel sit libero id veritatis odio quas modi earum ab.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: ipsum field2: 91 field3: false notes: 'Eveniet at ex quidem maiores accusantium.' created_at: null updated_at: null - id: 9ff29e71-f528-3d6b-abcb-56425588f26d type: entrada payment_method: boleto amount: 3347.46 due_date: '2026-02-23T03:00:00.000000Z' status: null payment_date: null description: 'Corrupti ipsam blanditiis rerum dolorem fuga incidunt molestiae accusamus illum.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: dolor field2: 92 field3: false notes: 'Non id alias aut ea.' created_at: null updated_at: null items: type: object properties: id: type: string example: a4c95ab2-4bb6-30b1-977f-8a79339db0b4 type: type: string example: entrada payment_method: type: string example: cheque amount: type: number example: 5820.43 due_date: type: string example: '2026-02-27T03:00:00.000000Z' status: type: string example: null payment_date: type: string example: null description: type: string example: 'Provident molestiae sed vel sit libero id veritatis odio quas modi earum ab.' is_recurring: type: string example: null recurrence_config: type: string example: null parent_id: type: string example: null recurrence_order: type: integer example: 1 total_recurrences: type: string example: null children_count: type: integer example: 0 remaining_recurrences: type: string example: null has_children: type: boolean example: false field1: type: string example: ipsum field2: type: integer example: 91 field3: type: boolean example: false notes: type: string example: 'Eveniet at ex quidem maiores accusantium.' created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Accounts Payable Receivable' post: summary: 'Create accounts payable receivable' operationId: createAccountsPayableReceivable description: 'Create a new accounts payable receivable' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Accounts Payable Receivable' requestBody: required: true content: application/json: schema: type: object properties: type: type: string description: Tipo. example: 'Example Type' enum: - entrada - saída payment_method: type: string description: 'Forma de pagamento.' example: 'Example Payment method' enum: - cheque - boleto - outro due_date: type: string description: 'Data de vencimento. O campo value deve ser uma data válida.' example: '2024-01-01' amount: type: number description: Valor. example: 1.0 description: type: string description: Descrição. example: 'Example Description' supplier_id: type: string description: 'Fornecedor. The uuid of an existing record in the suppliers table.' example: 4cdf0ba2-b032-311c-a9fe-185f00b3e91f nullable: true customer_id: type: string description: 'Cliente. The uuid of an existing record in the customers table.' example: 8f0e9120-d573-35fc-a920-c0316bc9ed27 nullable: true status: type: string description: Status. example: 'Example Status' enum: - 'a vencer' - pago - vencido - recebido - cancelado custom_fields: type: object description: 'Custom fields.' example: - example1 - example2 properties: { } is_recurring: type: boolean description: 'Is recurring.' example: false recurrence_config: type: object description: 'Recurrence config.' example: - example1 - example2 properties: frequency_type: type: string description: 'Recurrence config frequency type.' example: 'Example Recurrence config frequency type' enum: - monthly - weekly - biweekly - yearly frequency_value: type: integer description: 'Recurrence config frequency value. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 31.' example: 1 end_date: type: string description: 'Recurrence config end date. O campo value deve ser uma data válida. O campo value deve ser uma data posterior a due_date.' example: '2024-01-01' nullable: true max_occurrences: type: integer description: 'Recurrence config max occurrences. O campo value deve ser pelo menos 1.' example: 1 nullable: true generation_days_ahead: type: integer description: 'Recurrence config generation days ahead. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 30.' example: 1 required: - type - payment_method - due_date - amount - description '/api/accounts-payable-receivable/{accountPayableReceivable}': get: summary: 'Get accounts payable receivable' operationId: getAccountsPayableReceivable description: 'Get an accounts payable receivable' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: c1f75e79-85dd-3160-aa0a-ee10dcc17b7d type: entrada payment_method: cheque amount: 6909.54 due_date: '2026-02-15T03:00:00.000000Z' status: null payment_date: null description: 'Dolorem reprehenderit provident delectus occaecati omnis nesciunt laudantium praesentium incidunt.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: perferendis field2: 86 field3: false notes: 'Eum autem repellendus autem quae aspernatur.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: c1f75e79-85dd-3160-aa0a-ee10dcc17b7d type: type: string example: entrada payment_method: type: string example: cheque amount: type: number example: 6909.54 due_date: type: string example: '2026-02-15T03:00:00.000000Z' status: type: string example: null payment_date: type: string example: null description: type: string example: 'Dolorem reprehenderit provident delectus occaecati omnis nesciunt laudantium praesentium incidunt.' is_recurring: type: string example: null recurrence_config: type: string example: null parent_id: type: string example: null recurrence_order: type: integer example: 1 total_recurrences: type: string example: null children_count: type: integer example: 0 remaining_recurrences: type: string example: null has_children: type: boolean example: false field1: type: string example: perferendis field2: type: integer example: 86 field3: type: boolean example: false notes: type: string example: 'Eum autem repellendus autem quae aspernatur.' created_at: type: string example: null updated_at: type: string example: null tags: - 'Accounts Payable Receivable' put: summary: 'Update accounts payable receivable' operationId: updateAccountsPayableReceivable description: 'Update an accounts payable receivable' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Accounts Payable Receivable' requestBody: required: false content: application/json: schema: type: object properties: type: type: string description: Type. example: 'Example Type' enum: - entrada - saída payment_method: type: string description: 'Payment method.' example: 'Example Payment method' enum: - cheque - boleto - outro due_date: type: string description: 'Due date. O campo value deve ser uma data válida.' example: '2024-01-01' amount: type: number description: Amount. example: 1.0 description: type: string description: Description. example: 'Example Description' supplier_id: type: string description: 'Supplier id. The uuid of an existing record in the suppliers table.' example: f0330a4b-702a-3fbf-a00b-7d9b6656b05f nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: 86e587af-3fb7-3810-ba1d-a5fc94109bac nullable: true status: type: string description: Status. example: 'Example Status' enum: - 'a vencer' - pago - vencido - recebido - cancelado payment_date: type: string description: 'Payment date. O campo value deve ser uma data válida.' example: '2024-01-01' custom_fields: type: object description: 'Custom fields.' example: - example1 - example2 properties: { } is_recurring: type: boolean description: 'Is recurring.' example: false recurrence_config: type: object description: 'Recurrence config.' example: - example1 - example2 properties: frequency_type: type: string description: 'Recurrence config frequency type.' example: 'Example Recurrence config frequency type' enum: - monthly - weekly - biweekly - yearly frequency_value: type: integer description: 'Recurrence config frequency value. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 31.' example: 1 end_date: type: string description: 'Recurrence config end date. O campo value deve ser uma data válida. O campo value deve ser uma data posterior a due_date.' example: '2024-01-01' nullable: true max_occurrences: type: integer description: 'Recurrence config max occurrences. O campo value deve ser pelo menos 1.' example: 1 nullable: true generation_days_ahead: type: integer description: 'Recurrence config generation days ahead. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 30.' example: 1 delete: summary: 'Delete accounts payable receivable' operationId: deleteAccountsPayableReceivable description: 'Delete an accounts payable receivable' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Accounts Payable Receivable' parameters: - in: path name: accountPayableReceivable description: '' example: ratione required: true schema: type: string /api/auth/login: post: summary: Login operationId: login description: 'Login with email and password' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: token: string properties: token: type: string example: string tags: - Authentication requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: '' example: jordyn67@example.com password: type: string description: 'User password.' example: password required: - email - password security: [] /api/auth/user: get: summary: Me operationId: me description: 'Get the current user' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 6d88d807-76d1-3736-b81d-8627bb2a95db name: 'Haleigh Zieme' username: leola.pouros email: abagail.macejkovic@example.com ability: - action: read subject: Auth - action: listar subject: padrão roles: [] preferences: [] sectors: [] image: id: null url: null properties: data: type: object properties: id: type: string example: 6d88d807-76d1-3736-b81d-8627bb2a95db name: type: string example: 'Haleigh Zieme' username: type: string example: leola.pouros email: type: string example: abagail.macejkovic@example.com ability: type: array example: - action: read subject: Auth - action: listar subject: padrão items: type: object properties: action: type: string example: read subject: type: string example: Auth roles: type: array example: [] preferences: type: array example: [] sectors: type: array example: [] image: type: object properties: id: type: string example: null url: type: string example: null tags: - Authentication put: summary: 'Update Profile' operationId: updateProfile description: 'Update the current user profile' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Authentication requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' email: type: string description: 'E-mail. O campo value deve ser um endereço de e-mail válido.' example: user@example.com username: type: string description: Usuário. example: considine.marge password: type: string description: Password. example: password123 image: type: object description: Imagem. example: - example1 - example2 properties: path: type: string description: 'Caminho da imagem. This field is required when image is present.' example: 'Example Image path' name: type: string description: 'Nome da imagem.' example: 'Example Name' nullable: true extension: type: string description: 'Extensão da imagem.' example: 'Example Image extension' nullable: true size: type: string description: 'Tamanho da imagem.' example: 'Example Image size' nullable: true sectors: type: array description: 'UUID do setor. The uuid of an existing record in the sectors table.' example: - 3eb5563b-9f30-348f-b9c5-592a1f26d18c items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - 337b32c2-422f-394e-aeb8-e6898b764485 items: type: string /api/auth/logout: post: summary: Logout operationId: logout description: 'Logout the current user' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Authentication /api/auth/preferences: get: summary: 'Get user preferences' operationId: getUserPreferences description: 'Get all user preferences' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: theme: dark language: pt-br notifications: email: true sms: false properties: theme: type: string example: dark language: type: string example: pt-br notifications: type: object properties: email: type: boolean example: true sms: type: boolean example: false tags: - Authentication post: summary: 'Set user preference' operationId: setUserPreference description: 'Set or update a user preference' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Preference saved successfully' properties: message: type: string example: 'Preference saved successfully' tags: - Authentication requestBody: required: true content: application/json: schema: type: object properties: key: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: namisbcichnd value: type: object description: '' example: [] properties: { } required: - key - value '/api/auth/preferences/{key}': delete: summary: 'Delete user preference' operationId: deleteUserPreference description: 'Delete a specific user preference' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Preference deleted successfully' properties: message: type: string example: 'Preference deleted successfully' tags: - Authentication parameters: - in: path name: key description: '' example: quo required: true schema: type: string '/api/auth/{user}/token': post: summary: 'Generate user token' operationId: generateUserToken description: 'Generate a token for a specific user' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: token: string userData: id: uuid name: string username: string email: string ability: - array roles: - array preferences: - array sectors: - array image: id: uuid url: string properties: token: type: string example: string userData: type: object properties: id: type: string example: uuid name: type: string example: string username: type: string example: string email: type: string example: string ability: type: array example: - array items: type: string roles: type: array example: - array items: type: string preferences: type: array example: - array items: type: string sectors: type: array example: - array items: type: string image: type: object properties: id: type: string example: uuid url: type: string example: string tags: - Authentication parameters: - in: path name: user description: 'User UUID' example: 550e8400-e29b-41d4-a716-446655440000 required: true schema: type: string /api/bank-accounts/balance-summary: get: summary: 'Get bank account balance summary' operationId: getBankAccountBalanceSummary description: 'Get the balance summary of all bank accounts' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: totalBalancePositive: number totalBalanceNegative: number totalLimit: number sumLimitAndBalancePositive: number accounts: '*': id: string bank: string balance: number limit: number properties: data: type: object properties: totalBalancePositive: type: string example: number totalBalanceNegative: type: string example: number totalLimit: type: string example: number sumLimitAndBalancePositive: type: string example: number accounts: type: object properties: '*': type: object properties: id: type: string example: string bank: type: string example: string balance: type: string example: number limit: type: string example: number tags: - 'Bank Accounts' /api/bank-accounts: get: summary: 'List bank accounts' operationId: listBankAccounts description: 'List all bank accounts' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: name required: false schema: type: string description: 'Search query.' example: name nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 7500b9a0-8cab-3330-a7e7-36328e180eac agency: '7276' account: 2777378-7 type: poupança balance: 2494.08 holder_type: pj alias: ut limit: 5940.78 bank: id: null name: null code: null created_at: null updated_at: null - id: ef29d2b1-e9bb-3adf-a482-b778667350f8 agency: '6804' account: 2527135-5 type: poupança balance: 8143.3 holder_type: pf alias: provident limit: 5955.43 bank: id: null name: null code: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 7500b9a0-8cab-3330-a7e7-36328e180eac agency: '7276' account: 2777378-7 type: poupança balance: 2494.08 holder_type: pj alias: ut limit: 5940.78 bank: id: null name: null code: null created_at: null updated_at: null - id: ef29d2b1-e9bb-3adf-a482-b778667350f8 agency: '6804' account: 2527135-5 type: poupança balance: 8143.3 holder_type: pf alias: provident limit: 5955.43 bank: id: null name: null code: null created_at: null updated_at: null items: type: object properties: id: type: string example: 7500b9a0-8cab-3330-a7e7-36328e180eac agency: type: string example: '7276' account: type: string example: 2777378-7 type: type: string example: poupança balance: type: number example: 2494.08 holder_type: type: string example: pj alias: type: string example: ut limit: type: number example: 5940.78 bank: type: object properties: id: type: string example: null name: type: string example: null code: type: string example: null created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Bank Accounts' post: summary: 'Create bank account' operationId: createBankAccount description: 'Create a new bank account' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Bank Accounts' requestBody: required: true content: application/json: schema: type: object properties: agency: type: string description: Agency. example: 'Example Agency' account: type: string description: Account. example: 6687180-4 bank_id: type: string description: 'Bank id. The uuid of an existing record in the banks table.' example: 8ae9236c-abe0-3fca-9365-ceed93998802 type: type: string description: Type. example: 'Example Type' enum: - corrente - poupança holder_type: type: string description: 'Holder type.' example: 'Example Holder type' enum: - pf - pj alias: type: string description: Alias. example: 'Example Alias' balance: type: number description: Balance. example: 1.0 limit: type: number description: Limit. example: 1.0 nullable: true required: - agency - account - bank_id - type - holder_type - alias - balance '/api/bank-accounts/{bankAccount}': put: summary: 'Update bank account' operationId: updateBankAccount description: 'Update a bank account' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Bank Accounts' requestBody: required: false content: application/json: schema: type: object properties: agency: type: string description: Agency. example: 'Example Agency' account: type: string description: Account. example: 4105402-1 bank_id: type: string description: 'Bank id. The uuid of an existing record in the banks table.' example: 0e96d1e8-651f-3480-92a9-9cb48c374389 type: type: string description: Type. example: 'Example Type' enum: - corrente - poupança holder_type: type: string description: 'Holder type.' example: 'Example Holder type' enum: - pf - pj alias: type: string description: Alias. example: 'Example Alias' nullable: true balance: type: number description: Balance. example: 1.0 limit: type: number description: Limit. example: 1.0 nullable: true get: summary: 'Show bank account' operationId: showBankAccount description: 'Show a bank account' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 7adb6673-1a45-3f9b-b846-d12cfc8cd3a6 agency: '9846' account: 7563297-8 type: poupança balance: 6717.7 holder_type: pj alias: veniam limit: 2779.69 bank: id: null name: null code: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 7adb6673-1a45-3f9b-b846-d12cfc8cd3a6 agency: type: string example: '9846' account: type: string example: 7563297-8 type: type: string example: poupança balance: type: number example: 6717.7 holder_type: type: string example: pj alias: type: string example: veniam limit: type: number example: 2779.69 bank: type: object properties: id: type: string example: null name: type: string example: null code: type: string example: null created_at: type: string example: null updated_at: type: string example: null tags: - 'Bank Accounts' delete: summary: 'Delete bank account' operationId: deleteBankAccount description: 'Delete a bank account' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Bank Accounts' parameters: - in: path name: bankAccount description: '' example: 19 required: true schema: type: integer /api/banks: get: summary: 'List banks' operationId: listBanks description: 'List all banks' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: 'Permission name' required: false schema: type: string description: 'Search query.' example: 'Permission name' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 21689d48-080d-339b-942a-bd7714e722b7 name: Ávila-Verdugo code: '367' - id: 153c4603-153b-323a-9f54-b7012a072511 name: 'Saito e Vega' code: '413' links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 21689d48-080d-339b-942a-bd7714e722b7 name: Ávila-Verdugo code: '367' - id: 153c4603-153b-323a-9f54-b7012a072511 name: 'Saito e Vega' code: '413' items: type: object properties: id: type: string example: 21689d48-080d-339b-942a-bd7714e722b7 name: type: string example: Ávila-Verdugo code: type: string example: '367' links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Banks post: summary: 'Create bank' operationId: createBank description: 'Create a new bank' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Banks requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Name. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' code: type: string description: 'Code. O campo value não pode ser superior a 255 caracteres.' example: 'Example Code' required: - name - code '/api/banks/{bank}': put: summary: 'Update bank' operationId: updateBank description: 'Update a bank' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Banks requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Name. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' code: type: string description: 'Code. O campo value não pode ser superior a 255 caracteres.' example: 'Example Code' get: summary: 'Show bank' operationId: showBank description: 'Show a bank' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: b8487ccc-0955-3e1f-8b85-44d6a9e1f791 name: Aragão-Caldeira code: '67' properties: data: type: object properties: id: type: string example: b8487ccc-0955-3e1f-8b85-44d6a9e1f791 name: type: string example: Aragão-Caldeira code: type: string example: '67' tags: - Banks delete: summary: 'Delete bank' operationId: deleteBank description: 'Delete a bank' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Banks parameters: - in: path name: bank description: 'The bank.' example: 1 required: true schema: type: integer '/api/cep/{cep}': get: summary: 'Search CEP' operationId: searchCEP description: 'Search for address information by CEP (Brazilian postal code)' parameters: [] responses: 200: description: '' content: application/json: schema: oneOf: - description: 'CEP found successfully' type: object example: data: cep: '01001000' street: 'Praça da Sé' district: Sé city: 'São Paulo' state: SP complement: 'lado ímpar' ibge: '3550308' ddd: '11' siafi: '7107' properties: data: type: object properties: cep: type: string example: '01001000' street: type: string example: 'Praça da Sé' district: type: string example: Sé city: type: string example: 'São Paulo' state: type: string example: SP complement: type: string example: 'lado ímpar' ibge: type: string example: '3550308' ddd: type: string example: '11' siafi: type: string example: '7107' - description: 'CEP not found' type: object example: data: cep: '99999999' street: null district: null city: null state: null complement: null ibge: null ddd: null siafi: null properties: data: type: object properties: cep: type: string example: '99999999' street: type: string example: null district: type: string example: null city: type: string example: null state: type: string example: null complement: type: string example: null ibge: type: string example: null ddd: type: string example: null siafi: type: string example: null tags: - CEP parameters: - in: path name: cep description: 'CEP to search for' example: '01001000' required: true schema: type: string /api/cash-flows/summary: get: summary: 'Get cash flow summary' operationId: getCashFlowSummary description: 'Get cash flow summary' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: Salary required: false schema: type: string description: 'Search query.' example: Salary nullable: true - in: query name: cash_session description: 'Cash session. The uuid of an existing record in the cash_sessions table.' example: uuid required: false schema: type: string description: 'Cash session. The uuid of an existing record in the cash_sessions table.' example: uuid nullable: true - in: query name: type description: 'Cash flow type.' example: entrada required: false schema: type: string description: 'Cash flow type.' example: entrada enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste nullable: true - in: query name: description description: 'Description .' example: 'Accusamus voluptates et voluptatem dignissimos.' required: false schema: type: string description: 'Description .' example: 'Accusamus voluptates et voluptatem dignissimos.' - in: query name: categories description: 'The uuid of an existing record in the transaction_categories table.' example: - quo required: false schema: type: array description: 'The uuid of an existing record in the transaction_categories table.' example: - quo items: type: string - in: query name: date_start description: 'Start date. O campo value deve ser uma data válida.' example: '2021-01-01' required: false schema: type: string description: 'Start date. O campo value deve ser uma data válida.' example: '2021-01-01' nullable: true - in: query name: date_end description: 'End date. O campo value deve ser uma data válida.' example: '2021-01-31' required: false schema: type: string description: 'End date. O campo value deve ser uma data válida.' example: '2021-01-31' nullable: true - in: query name: bank_accounts description: 'The uuid of an existing record in the bank_accounts table.' example: - dolorem required: false schema: type: array description: 'The uuid of an existing record in the bank_accounts table.' example: - dolorem items: type: string - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - vel required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - vel items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - id required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - id items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - nihil required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - nihil items: type: string responses: 200: description: '' content: application/json: schema: type: object example: data: total_income: number total_expense: number total_fee: number total_balance: number properties: data: type: object properties: total_income: type: string example: number total_expense: type: string example: number total_fee: type: string example: number total_balance: type: string example: number tags: - 'Cash Flow' /api/cash-flows: get: summary: 'List cash flow' operationId: listCashFlow description: 'List all cash flow' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: Salary required: false schema: type: string description: 'Search query.' example: Salary nullable: true - in: query name: cash_session description: 'Cash session. The uuid of an existing record in the cash_sessions table.' example: uuid required: false schema: type: string description: 'Cash session. The uuid of an existing record in the cash_sessions table.' example: uuid nullable: true - in: query name: type description: 'Cash flow type.' example: entrada required: false schema: type: string description: 'Cash flow type.' example: entrada enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste nullable: true - in: query name: description description: 'Description .' example: 'Quia eaque cupiditate maxime sequi.' required: false schema: type: string description: 'Description .' example: 'Quia eaque cupiditate maxime sequi.' - in: query name: categories description: 'The uuid of an existing record in the transaction_categories table.' example: - doloremque required: false schema: type: array description: 'The uuid of an existing record in the transaction_categories table.' example: - doloremque items: type: string - in: query name: date_start description: 'Start date. O campo value deve ser uma data válida.' example: '2021-01-01' required: false schema: type: string description: 'Start date. O campo value deve ser uma data válida.' example: '2021-01-01' nullable: true - in: query name: date_end description: 'End date. O campo value deve ser uma data válida.' example: '2021-01-31' required: false schema: type: string description: 'End date. O campo value deve ser uma data válida.' example: '2021-01-31' nullable: true - in: query name: bank_accounts description: 'The uuid of an existing record in the bank_accounts table.' example: - dolore required: false schema: type: array description: 'The uuid of an existing record in the bank_accounts table.' example: - dolore items: type: string - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - quis required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - quis items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - officiis required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - officiis items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - modi required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - modi items: type: string responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 11f72e1f-5f71-3eb0-8198-5d950944dce4 code: FC-86097427 type: pagamento amount: -4032.6 description: 'Voluptate dolorum sint sit laboriosam culpa reiciendis tempore dicta.' transaction_date: '2013-12-21T02:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null - id: c1d164b7-2d0b-3469-a575-2b3fd016b709 code: FC-35728003 type: juros amount: -9808.98 description: 'Eaque saepe debitis in est et ut.' transaction_date: '2001-10-12T03:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 11f72e1f-5f71-3eb0-8198-5d950944dce4 code: FC-86097427 type: pagamento amount: -4032.6 description: 'Voluptate dolorum sint sit laboriosam culpa reiciendis tempore dicta.' transaction_date: '2013-12-21T02:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null - id: c1d164b7-2d0b-3469-a575-2b3fd016b709 code: FC-35728003 type: juros amount: -9808.98 description: 'Eaque saepe debitis in est et ut.' transaction_date: '2001-10-12T03:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null items: type: object properties: id: type: string example: 11f72e1f-5f71-3eb0-8198-5d950944dce4 code: type: string example: FC-86097427 type: type: string example: pagamento amount: type: number example: -4032.6 description: type: string example: 'Voluptate dolorum sint sit laboriosam culpa reiciendis tempore dicta.' transaction_date: type: string example: '2013-12-21T02:00:00.000000Z' transaction_category: type: object properties: id: type: string example: null name: type: string example: null type: type: string example: null created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Cash Flow' post: summary: 'Create cash flow' operationId: createCashFlow description: 'Create a new cash flow' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Cash Flow' requestBody: required: true content: application/json: schema: type: object properties: type: type: string description: Type. example: 'Example Type' enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste cash_session_id: type: string description: 'Cash session id. The uuid of an existing record in the cash_sessions table.' example: 15897815-5c58-3868-898d-3875ca19b50b transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: 564917b0-81d7-31bb-864c-244f3a1a709f bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: 7eb1516f-298f-3030-b522-59ae663bc2af nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: 4cb82342-7a9c-37c0-bff3-dc21ec04761e nullable: true supplier_id: type: string description: 'Supplier id. The uuid of an existing record in the suppliers table.' example: 1d169a40-59e2-3ace-bd77-3e25bc9e3756 nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: a20c6245-1204-397a-9cc0-06f18366352a nullable: true amount: type: number description: Amount. example: 1.0 description: type: string description: Description. example: 'Example Description' nullable: true transaction_date: type: string description: 'Transaction date. O campo value deve ser uma data válida.' example: '2024-01-01' required: - type - cash_session_id - amount - transaction_date '/api/cash-flows/{cashFlow}': get: summary: 'Show cash flow' operationId: showCashFlow description: 'Show a cash flow' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: aac67305-3fed-36ef-b1dc-65ce711f4031 code: FC-27220877 type: transferência amount: -7786.03 description: 'Modi esse fuga porro.' transaction_date: '2025-11-19T03:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: aac67305-3fed-36ef-b1dc-65ce711f4031 code: type: string example: FC-27220877 type: type: string example: transferência amount: type: number example: -7786.03 description: type: string example: 'Modi esse fuga porro.' transaction_date: type: string example: '2025-11-19T03:00:00.000000Z' transaction_category: type: object properties: id: type: string example: null name: type: string example: null type: type: string example: null created_at: type: string example: null updated_at: type: string example: null tags: - 'Cash Flow' put: summary: 'Update cash flow' operationId: updateCashFlow description: 'Update a cash flow' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Cash Flow' requestBody: required: false content: application/json: schema: type: object properties: type: type: string description: Type. example: 'Example Type' enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste cash_session_id: type: string description: 'Cash session id. The uuid of an existing record in the cash_sessions table.' example: 22c21bdc-2571-35d8-9a2c-0b0e08771b77 transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: 28549b0b-b780-3bb1-8439-ebab5a312607 bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: 3d4f156a-019c-358c-9989-603d7a4936d7 nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: 89086758-821b-3080-b6d4-ed221bd5a3cf nullable: true supplier_id: type: string description: 'Supplier id. The uuid of an existing record in the suppliers table.' example: fe6808e9-d59d-30c3-af71-fe19b88c7457 nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: f0c57f32-4320-33da-a76a-2c4301b09515 nullable: true amount: type: number description: Amount. example: 1.0 description: type: string description: Description. example: 'Example Description' nullable: true transaction_date: type: string description: 'Transaction date. O campo value deve ser uma data válida.' example: '2024-01-01' delete: summary: 'Delete cash flow' operationId: deleteCashFlow description: 'Delete a cash flow' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Cash Flow' parameters: - in: path name: cashFlow description: '' example: 15 required: true schema: type: integer /api/cash-sessions: get: summary: 'List cash session' operationId: listCashSession description: 'List all cash session' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 836dd81a-ce3a-3498-bff3-824882d5fc10 code: null opened_by: null opened_at: '2016-03-25T22:12:19.000000Z' closed_by: null closed_at: '1998-02-02T09:42:53.000000Z' opening_balance: 9741.61 closing_balance: 9245.58 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1988-12-21T01:33:54.000000Z' updated_at: '1971-10-04T18:41:18.000000Z' - id: ded2308f-b0d4-3ec2-aacc-3a97c0287b50 code: null opened_by: null opened_at: '1995-09-19T08:39:49.000000Z' closed_by: null closed_at: '1972-10-20T00:46:01.000000Z' opening_balance: 5476.09 closing_balance: 5753.54 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1976-05-27T22:38:32.000000Z' updated_at: '1986-06-15T18:03:33.000000Z' links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 836dd81a-ce3a-3498-bff3-824882d5fc10 code: null opened_by: null opened_at: '2016-03-25T22:12:19.000000Z' closed_by: null closed_at: '1998-02-02T09:42:53.000000Z' opening_balance: 9741.61 closing_balance: 9245.58 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1988-12-21T01:33:54.000000Z' updated_at: '1971-10-04T18:41:18.000000Z' - id: ded2308f-b0d4-3ec2-aacc-3a97c0287b50 code: null opened_by: null opened_at: '1995-09-19T08:39:49.000000Z' closed_by: null closed_at: '1972-10-20T00:46:01.000000Z' opening_balance: 5476.09 closing_balance: 5753.54 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1976-05-27T22:38:32.000000Z' updated_at: '1986-06-15T18:03:33.000000Z' items: type: object properties: id: type: string example: 836dd81a-ce3a-3498-bff3-824882d5fc10 code: type: string example: null opened_by: type: string example: null opened_at: type: string example: '2016-03-25T22:12:19.000000Z' closed_by: type: string example: null closed_at: type: string example: '1998-02-02T09:42:53.000000Z' opening_balance: type: number example: 9741.61 closing_balance: type: number example: 9245.58 total_income: type: integer example: 0 total_expense: type: integer example: 0 total_balance: type: integer example: 0 status: type: string example: Aberto created_at: type: string example: '1988-12-21T01:33:54.000000Z' updated_at: type: string example: '1971-10-04T18:41:18.000000Z' links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Cash Session' /api/cash-sessions/open: post: summary: 'Open cash session' operationId: openCashSession description: 'Open a new cash session' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 4ea006df-01a5-3c3f-a5ef-520289947879 code: null opened_by: null opened_at: '1984-02-14T15:46:48.000000Z' closed_by: null closed_at: '1994-08-26T08:55:27.000000Z' opening_balance: 9120.88 closing_balance: 299.82 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1973-12-10T09:51:34.000000Z' updated_at: '2009-06-09T11:58:35.000000Z' properties: data: type: object properties: id: type: string example: 4ea006df-01a5-3c3f-a5ef-520289947879 code: type: string example: null opened_by: type: string example: null opened_at: type: string example: '1984-02-14T15:46:48.000000Z' closed_by: type: string example: null closed_at: type: string example: '1994-08-26T08:55:27.000000Z' opening_balance: type: number example: 9120.88 closing_balance: type: number example: 299.82 total_income: type: integer example: 0 total_expense: type: integer example: 0 total_balance: type: integer example: 0 status: type: string example: Aberto created_at: type: string example: '1973-12-10T09:51:34.000000Z' updated_at: type: string example: '2009-06-09T11:58:35.000000Z' tags: - 'Cash Session' '/api/cash-sessions/close/{uuid}': post: summary: 'Close cash session' operationId: closeCashSession description: 'Close a cash session' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Cash Session' parameters: - in: path name: uuid description: '' example: 0c4c0715-9c11-3451-9ed6-747de9768ff7 required: true schema: type: string '/api/cash-sessions/{uuid}': get: summary: 'Show cash session' operationId: showCashSession description: 'Show a cash session' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 192f8c08-1f86-3980-81b7-c852fa19bba5 code: null opened_by: null opened_at: '1986-10-23T19:20:27.000000Z' closed_by: null closed_at: '2001-05-16T16:47:54.000000Z' opening_balance: 3049.3 closing_balance: 8650.64 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1991-03-16T08:20:27.000000Z' updated_at: '1978-06-19T12:51:30.000000Z' properties: data: type: object properties: id: type: string example: 192f8c08-1f86-3980-81b7-c852fa19bba5 code: type: string example: null opened_by: type: string example: null opened_at: type: string example: '1986-10-23T19:20:27.000000Z' closed_by: type: string example: null closed_at: type: string example: '2001-05-16T16:47:54.000000Z' opening_balance: type: number example: 3049.3 closing_balance: type: number example: 8650.64 total_income: type: integer example: 0 total_expense: type: integer example: 0 total_balance: type: integer example: 0 status: type: string example: Aberto created_at: type: string example: '1991-03-16T08:20:27.000000Z' updated_at: type: string example: '1978-06-19T12:51:30.000000Z' tags: - 'Cash Session' delete: summary: 'Delete cash session' operationId: deleteCashSession description: 'Delete a cash session' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Cash Session' parameters: - in: path name: uuid description: '' example: 598fc51b-d320-3372-a2e1-6c13a3842aaa required: true schema: type: integer /api/customers: get: summary: 'List customers' operationId: listCustomers description: 'List all customers' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: 'Customer name' required: false schema: type: string description: 'Search query.' example: 'Customer name' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: fea4d50c-3031-3010-984a-9ce089a1ecfd name: 'Sra. Thalita Suzana Jimenes Filho' email: kevin62@example.net phone: '(16) 93274-6759' document: 467.467.578-20 type: pj responsible: 'Dr. Marco Ferminiano Campos Jr.' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents_count: 0 - id: ba4ff3c5-ca07-34c7-9889-e545f9de953d name: 'Sra. Giovanna Regina Salas Filho' email: garcia.maria@example.org phone: '(63) 94969-5262' document: 575.116.364-89 type: pf responsible: 'Sr. Gabriel de Souza Flores Sobrinho' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents_count: 0 links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: fea4d50c-3031-3010-984a-9ce089a1ecfd name: 'Sra. Thalita Suzana Jimenes Filho' email: kevin62@example.net phone: '(16) 93274-6759' document: 467.467.578-20 type: pj responsible: 'Dr. Marco Ferminiano Campos Jr.' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents_count: 0 - id: ba4ff3c5-ca07-34c7-9889-e545f9de953d name: 'Sra. Giovanna Regina Salas Filho' email: garcia.maria@example.org phone: '(63) 94969-5262' document: 575.116.364-89 type: pf responsible: 'Sr. Gabriel de Souza Flores Sobrinho' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents_count: 0 items: type: object properties: id: type: string example: fea4d50c-3031-3010-984a-9ce089a1ecfd name: type: string example: 'Sra. Thalita Suzana Jimenes Filho' email: type: string example: kevin62@example.net phone: type: string example: '(16) 93274-6759' document: type: string example: 467.467.578-20 type: type: string example: pj responsible: type: string example: 'Dr. Marco Ferminiano Campos Jr.' image: type: object properties: id: type: string example: null url: type: string example: null address: type: object properties: street: type: string example: null number: type: string example: null complement: type: string example: null neighborhood: type: string example: null city: type: string example: null state: type: string example: null zip_code: type: string example: null documents_count: type: integer example: 0 links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Customers post: summary: 'Create customer' operationId: createCustomer description: 'Create a new customer' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Customers requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' email: type: string description: 'E-mail. O campo value deve ser um endereço de e-mail válido.' example: user@example.com phone: type: string description: Telefone. example: '(11) 99999-9999' document: type: string description: CPF/CNPJ. example: 'Example Document' type: type: string description: Tipo. example: 'Example Type' enum: - pf - pj responsible: type: string description: Responsável. example: 'Example Responsible' nullable: true image: type: object description: Imagem. example: - example1 - example2 properties: path: type: string description: 'Caminho da imagem. This field is required when image is present.' example: 'Example Image path' name: type: string description: 'Nome da imagem.' example: 'Example Name' nullable: true extension: type: string description: 'Extensão da imagem.' example: 'Example Image extension' nullable: true size: type: string description: 'Tamanho da imagem.' example: 'Example Image size' nullable: true address: type: object description: Endereço. example: - example1 - example2 properties: street: type: string description: Rua. example: 'Example Address street' number: type: string description: Número. example: 'Example Address number' complement: type: string description: Complemento. example: 'Example Address complement' neighborhood: type: string description: Bairro. example: 'Example Address neighborhood' city: type: string description: Cidade. example: 'Example Address city' state: type: string description: Estado. example: 'Example Address state' zip_code: type: string description: CEP. example: 'Example Address zip code' required: - street - number - neighborhood - city - state - zip_code required: - name - document - type - address '/api/customers/{id}': get: summary: 'Get customer' operationId: getCustomer description: 'Get a customer' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: a8f7ffb6-7149-3bfc-8fba-deed76148b79 name: 'Lia Ferreira Jr.' email: wpacheco@example.net phone: '(38) 95300-7281' document: 987.161.741-00 type: pj responsible: 'Dr. Pablo Montenegro Zambrano' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents_count: 0 properties: data: type: object properties: id: type: string example: a8f7ffb6-7149-3bfc-8fba-deed76148b79 name: type: string example: 'Lia Ferreira Jr.' email: type: string example: wpacheco@example.net phone: type: string example: '(38) 95300-7281' document: type: string example: 987.161.741-00 type: type: string example: pj responsible: type: string example: 'Dr. Pablo Montenegro Zambrano' image: type: object properties: id: type: string example: null url: type: string example: null address: type: object properties: street: type: string example: null number: type: string example: null complement: type: string example: null neighborhood: type: string example: null city: type: string example: null state: type: string example: null zip_code: type: string example: null documents_count: type: integer example: 0 tags: - Customers put: summary: 'Update customer' operationId: updateCustomer description: 'Update a customer' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Customers requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' email: type: string description: 'E-mail. O campo value deve ser um endereço de e-mail válido.' example: user@example.com phone: type: string description: Telefone. example: '(11) 99999-9999' document: type: string description: CPF/CNPJ. example: 'Example Document' type: type: string description: Tipo. example: 'Example Type' enum: - pf - pj responsible: type: string description: Responsável. example: 'Example Responsible' nullable: true image: type: object description: Imagem. example: - example1 - example2 properties: path: type: string description: 'Caminho da imagem. This field is required when image is present.' example: 'Example Image path' name: type: string description: 'Nome da imagem.' example: 'Example Name' nullable: true extension: type: string description: 'Extensão da imagem.' example: 'Example Image extension' nullable: true size: type: string description: 'Tamanho da imagem.' example: 'Example Image size' nullable: true address: type: object description: Endereço. example: - example1 - example2 properties: street: type: string description: Rua. example: 'Example Address street' number: type: string description: Número. example: 'Example Address number' complement: type: string description: Complemento. example: 'Example Address complement' neighborhood: type: string description: Bairro. example: 'Example Address neighborhood' city: type: string description: Cidade. example: 'Example Address city' state: type: string description: Estado. example: 'Example Address state' zip_code: type: string description: CEP. example: 'Example Address zip code' parameters: - in: path name: id description: 'The ID of the customer.' example: 13 required: true schema: type: integer - in: path name: customer description: 'Customer ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/customers/{customer}': delete: summary: 'Delete customer' operationId: deleteCustomer description: 'Delete a customer' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Customers parameters: - in: path name: customer description: 'Customer ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/document-categories: get: summary: 'List document categories' operationId: listDocumentCategories description: 'List all document categories' parameters: - in: query name: q description: 'Search query.' example: Contracts required: false schema: type: string description: 'Search query.' example: Contracts nullable: true - in: query name: module description: 'Filter by module.' example: employee required: false schema: type: string description: 'Filter by module.' example: employee nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 81c0bf69-b3ac-3c4a-9bd4-379a1912ba7b name: 'Sr. Horácio Cauan Saraiva' description: 'Maiores tenetur rerum et vitae neque. Fuga porro ut exercitationem harum neque sed. Vitae inventore iure molestiae natus sint unde omnis.' module: document - id: 88678bff-51e9-3cc2-b820-a39bff99c739 name: 'Dayana Barreto Ramires' description: 'Sit nesciunt ut quae qui magni. In sed repellat provident sunt aut animi. Omnis est soluta dolor perferendis. Qui quis provident consequuntur.' module: document links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 81c0bf69-b3ac-3c4a-9bd4-379a1912ba7b name: 'Sr. Horácio Cauan Saraiva' description: 'Maiores tenetur rerum et vitae neque. Fuga porro ut exercitationem harum neque sed. Vitae inventore iure molestiae natus sint unde omnis.' module: document - id: 88678bff-51e9-3cc2-b820-a39bff99c739 name: 'Dayana Barreto Ramires' description: 'Sit nesciunt ut quae qui magni. In sed repellat provident sunt aut animi. Omnis est soluta dolor perferendis. Qui quis provident consequuntur.' module: document items: type: object properties: id: type: string example: 81c0bf69-b3ac-3c4a-9bd4-379a1912ba7b name: type: string example: 'Sr. Horácio Cauan Saraiva' description: type: string example: 'Maiores tenetur rerum et vitae neque. Fuga porro ut exercitationem harum neque sed. Vitae inventore iure molestiae natus sint unde omnis.' module: type: string example: document links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Document Categories' post: summary: 'Create document category' operationId: createDocumentCategory description: 'Create a new document category' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Document Categories' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Name. example: 'Example Name' description: type: string description: Description. example: 'Example Description' module: type: string description: Module. example: 'Example Module' required: - name - module '/api/document-categories/{documentCategory}': get: summary: 'Show document category' operationId: showDocumentCategory description: 'Show a document category' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: ab31f0ac-fb73-37f1-be9f-cc3e089583aa name: 'Deivid Chaves Espinoza Filho' description: 'Aperiam sit nobis accusantium qui qui. Ratione enim id aperiam repudiandae. Dicta sit dolorem perferendis quia necessitatibus. Quos ut quo suscipit expedita.' module: document properties: data: type: object properties: id: type: string example: ab31f0ac-fb73-37f1-be9f-cc3e089583aa name: type: string example: 'Deivid Chaves Espinoza Filho' description: type: string example: 'Aperiam sit nobis accusantium qui qui. Ratione enim id aperiam repudiandae. Dicta sit dolorem perferendis quia necessitatibus. Quos ut quo suscipit expedita.' module: type: string example: document tags: - 'Document Categories' put: summary: 'Update document category' operationId: updateDocumentCategory description: 'Update a document category' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Document Categories' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Name. example: 'Example Name' description: type: string description: Description. example: 'Example Description' module: type: string description: Module. example: 'Example Module' required: - name - module delete: summary: 'Delete document category' operationId: deleteDocumentCategory description: 'Delete a document category' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Document Categories' parameters: - in: path name: documentCategory description: 'Document category UUID' example: mollitia required: true schema: type: string /api/documents: get: summary: 'List documents' operationId: listDocuments description: 'List all documents' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: '' example: 'Document name' required: false schema: type: string description: '' example: 'Document name' nullable: true - in: query name: categories description: 'The uuid of an existing record in the document_categories table.' example: - eaque required: false schema: type: array description: 'The uuid of an existing record in the document_categories table.' example: - eaque items: type: string - in: query name: documentable_type description: 'Type of the related documentable entity. The type of an existing record in the documentables table.' example: et required: false schema: type: string description: 'Type of the related documentable entity. The type of an existing record in the documentables table.' example: et nullable: true - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - praesentium required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - praesentium items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - qui required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - qui items: type: string responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 911425fd-f601-3a60-b269-43f4e30c0267 name: 'Eric Salas Esteves Sobrinho' file: id: null url: null extension: null created_at: null updated_at: null - id: 524c7c64-b0f8-3edb-a04a-59bb21f8880b name: 'Jonas Leon Correia Jr.' file: id: null url: null extension: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 911425fd-f601-3a60-b269-43f4e30c0267 name: 'Eric Salas Esteves Sobrinho' file: id: null url: null extension: null created_at: null updated_at: null - id: 524c7c64-b0f8-3edb-a04a-59bb21f8880b name: 'Jonas Leon Correia Jr.' file: id: null url: null extension: null created_at: null updated_at: null items: type: object properties: id: type: string example: 911425fd-f601-3a60-b269-43f4e30c0267 name: type: string example: 'Eric Salas Esteves Sobrinho' file: type: object properties: id: type: string example: null url: type: string example: null extension: type: string example: null created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Documents post: summary: 'Create document' operationId: createDocument description: 'Create a new document' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Documents requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' category_id: type: string description: 'Categoria. The uuid of an existing record in the document_categories table.' example: 16015213-e605-3abc-bcdc-4244ca596d35 file: type: object description: Arquivo. example: - example1 - example2 properties: path: type: string description: 'Caminho do arquivo. This field is required when file is present.' example: 'Example File path' name: type: string description: 'Nome do arquivo.' example: 'Example Name' extension: type: string description: 'Extensão do arquivo.' example: 'Example File extension' size: type: string description: 'Tamanho do arquivo.' example: 'Example File size' required: - name - extension - size documentable_type: type: string description: 'Tipo de relacionado do documento.' example: 'Example Documentable type' enum: - customer - work - work_location - supplier - employee documentable_id: type: string description: 'Relacionado do documento.' example: 'Example Documentable id' required: - name - category_id - file - documentable_type - documentable_id '/api/documents/{id}': get: summary: 'Get document' operationId: getDocument description: 'Get a document' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: fc6639a6-5396-399b-976d-02fa175eb5f2 name: 'Srta. Ariane Domingues' file: id: null url: null extension: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: fc6639a6-5396-399b-976d-02fa175eb5f2 name: type: string example: 'Srta. Ariane Domingues' file: type: object properties: id: type: string example: null url: type: string example: null extension: type: string example: null created_at: type: string example: null updated_at: type: string example: null tags: - Documents put: summary: 'Update document' operationId: updateDocument description: 'Update a document' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Documents requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' category_id: type: string description: 'Categoria. The uuid of an existing record in the document_categories table.' example: d6250efa-8200-3930-ba21-e8ef29bf9c72 file: type: object description: Arquivo. example: - example1 - example2 properties: path: type: string description: 'Caminho do arquivo. This field is required when file is present.' example: 'Example File path' name: type: string description: 'Nome do arquivo.' example: 'Example Name' extension: type: string description: 'Extensão do arquivo.' example: 'Example File extension' size: type: string description: 'Tamanho do arquivo.' example: 'Example File size' documentable_type: type: string description: 'Documentable type.' example: 'Example Documentable type' enum: - customer - work - work_location - supplier - employee documentable_id: type: string description: 'Documentable id.' example: 'Example Documentable id' parameters: - in: path name: id description: 'The ID of the document.' example: 17 required: true schema: type: integer - in: path name: document description: 'Document ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/documents/{document}': delete: summary: 'Delete document' operationId: deleteDocument description: 'Delete a document' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Documents parameters: - in: path name: document description: 'Document ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/employee-roles: get: summary: 'List employee roles' operationId: listEmployeeRoles description: 'List all employee roles' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: Manager required: false schema: type: string description: 'Search query.' example: Manager nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 2c2a8bdb-ad15-4702-b23b-e62e8e67df7f name: ut description: null created_at: null updated_at: null - id: d80c7cc7-09b0-40c9-80a3-2f51aa82a58c name: tempora description: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 2c2a8bdb-ad15-4702-b23b-e62e8e67df7f name: ut description: null created_at: null updated_at: null - id: d80c7cc7-09b0-40c9-80a3-2f51aa82a58c name: tempora description: null created_at: null updated_at: null items: type: object properties: id: type: string example: 2c2a8bdb-ad15-4702-b23b-e62e8e67df7f name: type: string example: ut description: type: string example: null created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Employee Roles' post: summary: 'Create employee role' operationId: createEmployeeRole description: 'Create a new employee role' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Employee Roles' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' description: type: string description: Descrição. example: 'Example Description' nullable: true required: - name '/api/employee-roles/{employeeRole}': get: summary: 'Show employee role' operationId: showEmployeeRole description: 'Show an employee role' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 42ed66bb-564d-4454-9be7-4f4fe10eb025 name: odit description: 'Perferendis laborum inventore in ea ullam.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 42ed66bb-564d-4454-9be7-4f4fe10eb025 name: type: string example: odit description: type: string example: 'Perferendis laborum inventore in ea ullam.' created_at: type: string example: null updated_at: type: string example: null tags: - 'Employee Roles' put: summary: 'Update employee role' operationId: updateEmployeeRole description: 'Update an employee role' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Employee Roles' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' description: type: string description: Descrição. example: 'Example Description' nullable: true delete: summary: 'Delete employee role' operationId: deleteEmployeeRole description: 'Delete an employee role' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Employee Roles' parameters: - in: path name: employeeRole description: 'Employee Role UUID' example: rerum required: true schema: type: string /api/employees: get: summary: 'List employees' operationId: listEmployees description: 'List all employees' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: 'João Silva' required: false schema: type: string description: 'Search query.' example: 'João Silva' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 9beb9730-0924-4e1c-8d51-9f898680919e name: 'José das Neves' cpf: 492.007.449-92 rg: null ctps: '865679545' phone: '(28) 3193-5999' birthdate: null email: heloise48@example.com address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null employee_role: id: null name: null created_at: null updated_at: null - id: 953340d2-3e61-4645-9ddd-d52e5ce3fa74 name: 'Sr. Inácio Santana Santiago' cpf: 858.570.458-49 rg: null ctps: '899918033' phone: '(99) 3810-2253' birthdate: null email: miranda39@example.org address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null employee_role: id: null name: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 9beb9730-0924-4e1c-8d51-9f898680919e name: 'José das Neves' cpf: 492.007.449-92 rg: null ctps: '865679545' phone: '(28) 3193-5999' birthdate: null email: heloise48@example.com address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null employee_role: id: null name: null created_at: null updated_at: null - id: 953340d2-3e61-4645-9ddd-d52e5ce3fa74 name: 'Sr. Inácio Santana Santiago' cpf: 858.570.458-49 rg: null ctps: '899918033' phone: '(99) 3810-2253' birthdate: null email: miranda39@example.org address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null employee_role: id: null name: null created_at: null updated_at: null items: type: object properties: id: type: string example: 9beb9730-0924-4e1c-8d51-9f898680919e name: type: string example: 'José das Neves' cpf: type: string example: 492.007.449-92 rg: type: string example: null ctps: type: string example: '865679545' phone: type: string example: '(28) 3193-5999' birthdate: type: string example: null email: type: string example: heloise48@example.com address: type: object properties: street: type: string example: null number: type: string example: null complement: type: string example: null neighborhood: type: string example: null city: type: string example: null state: type: string example: null zip_code: type: string example: null employee_role: type: object properties: id: type: string example: null name: type: string example: null created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Employees post: summary: 'Create employee' operationId: createEmployee description: 'Create a new employee' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Employees requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' cpf: type: string description: 'CPF. O campo value deve ser 14 caracteres.' example: 'Example Cpf' rg: type: string description: 'RG. O campo value não pode ser superior a 20 caracteres.' example: 'Example Rg' nullable: true ctps: type: string description: 'CTPS. O campo value não pode ser superior a 20 caracteres.' example: 'Example Ctps' nullable: true phone: type: string description: 'Telefone. O campo value não pode ser superior a 20 caracteres.' example: '(11) 99999-9999' nullable: true birthdate: type: string description: 'Data de Nascimento. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true email: type: string description: 'E-mail. O campo value deve ser um endereço de e-mail válido.' example: user@example.com nullable: true employee_role_id: type: string description: 'Cargo. The uuid of an existing record in the employee_roles table.' example: d53896b6-58fc-48ec-84e3-3ea1cd997080 address: type: object description: Endereço. example: - example1 - example2 properties: street: type: string description: Rua. example: 'Example Address street' nullable: true number: type: string description: Número. example: 'Example Address number' nullable: true complement: type: string description: Complemento. example: 'Example Address complement' nullable: true neighborhood: type: string description: Bairro. example: 'Example Address neighborhood' nullable: true city: type: string description: Cidade. example: 'Example Address city' nullable: true state: type: string description: Estado. example: 'Example Address state' nullable: true zip_code: type: string description: CEP. example: 'Example Address zip code' nullable: true nullable: true required: - name - cpf - employee_role_id '/api/employees/{id}': get: summary: 'Show employee' operationId: showEmployee description: 'Show an employee' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 0efdb39d-e41e-418c-8158-524b3ef4b07b name: 'Sandra Ariane Balestero Jr.' cpf: 465.898.151-00 rg: '968196152' ctps: '358698736' phone: null birthdate: '1998-06-29' email: hlovato@example.com address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null employee_role: id: null name: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 0efdb39d-e41e-418c-8158-524b3ef4b07b name: type: string example: 'Sandra Ariane Balestero Jr.' cpf: type: string example: 465.898.151-00 rg: type: string example: '968196152' ctps: type: string example: '358698736' phone: type: string example: null birthdate: type: string example: '1998-06-29' email: type: string example: hlovato@example.com address: type: object properties: street: type: string example: null number: type: string example: null complement: type: string example: null neighborhood: type: string example: null city: type: string example: null state: type: string example: null zip_code: type: string example: null employee_role: type: object properties: id: type: string example: null name: type: string example: null created_at: type: string example: null updated_at: type: string example: null tags: - Employees put: summary: 'Update employee' operationId: updateEmployee description: 'Update an employee' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Employees requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' cpf: type: string description: 'CPF. O campo value deve ser 14 caracteres.' example: 'Example Cpf' rg: type: string description: 'RG. O campo value não pode ser superior a 20 caracteres.' example: 'Example Rg' nullable: true ctps: type: string description: 'CTPS. O campo value não pode ser superior a 20 caracteres.' example: 'Example Ctps' nullable: true phone: type: string description: 'Telefone. O campo value não pode ser superior a 20 caracteres.' example: '(11) 99999-9999' nullable: true birthdate: type: string description: 'Data de Nascimento. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true email: type: string description: 'E-mail. O campo value deve ser um endereço de e-mail válido.' example: user@example.com nullable: true employee_role_id: type: string description: 'Cargo. The uuid of an existing record in the employee_roles table.' example: 686a3d2e-743b-47e0-97b4-44ce47311c15 address: type: object description: Endereço. example: - example1 - example2 properties: street: type: string description: Rua. example: 'Example Address street' number: type: string description: Número. example: 'Example Address number' complement: type: string description: Complemento. example: 'Example Address complement' neighborhood: type: string description: Bairro. example: 'Example Address neighborhood' city: type: string description: Cidade. example: 'Example Address city' state: type: string description: Estado. example: 'Example Address state' zip_code: type: string description: CEP. example: 'Example Address zip code' parameters: - in: path name: id description: 'The ID of the employee.' example: 5 required: true schema: type: integer - in: path name: employee description: 'Employee ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/employees/{employee}': delete: summary: 'Delete employee' operationId: deleteEmployee description: 'Delete an employee' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Employees parameters: - in: path name: employee description: 'Employee ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/reports/cash-flow: get: summary: '' operationId: getApiReportsCashFlow description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] /api/reports/accounts-payable-receivable: get: summary: '' operationId: getApiReportsAccountsPayableReceivable description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Endpoints security: [] /api/up: get: summary: '' operationId: getApiUp description: '' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'API is running' properties: message: type: string example: 'API is running' tags: - Endpoints security: [] '/api/files/{uuid}': delete: summary: 'Delete file' operationId: deleteFile description: 'Delete a file' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Files parameters: - in: path name: uuid description: '' example: 74509f1e-ea5a-3c22-b4ab-87f928cd4cc3 required: true schema: type: integer '/api/files/{uuid}/info': get: summary: 'Get file info' operationId: getFileInfo description: 'Get file information' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: uuid: string name: string size: integer type: string extension: string path: string properties: uuid: type: string example: string name: type: string example: string size: type: string example: integer type: type: string example: string extension: type: string example: string path: type: string example: string tags: - Files parameters: - in: path name: uuid description: '' example: 00729e01-dccb-39fb-a7a4-77c88b8f10af required: true schema: type: integer '/api/files/{uuid}/download': get: summary: 'Generate download URL' operationId: generateDownloadURL description: 'Generate a signed URL for downloading a file' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: url: string filename: string size: integer type: string properties: url: type: string example: string filename: type: string example: string size: type: string example: integer type: type: string example: string tags: - Files parameters: - in: path name: uuid description: 'The UUID of the file to download' example: cbe898a6-3f7b-3c1b-b7c6-06cf7dc5cc8f required: true schema: type: string /api/files/generate-upload-url: post: summary: 'Generate upload URL' operationId: generateUploadURL description: 'Generate a signed URL for uploading a file' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: url: string path: string headers: array properties: url: type: string example: string path: type: string example: string headers: type: string example: array tags: - Files requestBody: required: true content: application/json: schema: type: object properties: path: type: string description: Path. example: 'Example Path' mimetype: type: string description: Mimetype. example: 'Example Mimetype' public: type: boolean description: Public. example: false required: - path - mimetype - public /api/files/generate-bulk-upload-url: post: summary: 'Generate bulk upload URL' operationId: generateBulkUploadURL description: 'Generate signed URLs for uploading multiple files' parameters: [] responses: 200: description: '' content: application/json: schema: type: array items: type: object properties: url: type: string example: string path: type: string example: string headers: type: string example: array example: - url: string path: string headers: array tags: - Files requestBody: required: true content: application/json: schema: type: object properties: files: type: array description: Files. example: - null - null items: type: object properties: path: type: string description: 'Files * path.' example: 'Example Files * path' mimetype: type: string description: 'Files * mimetype.' example: 'Example Files * mimetype' public: type: boolean description: 'Files * public.' example: false required: - path - mimetype - public required: - files /api/imports/nfe/products: post: summary: 'Create NFe Import' operationId: createNFeImport description: 'Upload and process a Brazilian NFe (Nota Fiscal Eletrônica) XML file. The file should be uploaded to S3 first, then this endpoint processes it asynchronously.' parameters: [] responses: 201: description: 'Import created successfully' content: application/json: schema: type: object example: import_id: 9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a status: pending channel: import-progress.9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a properties: import_id: type: string example: 9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a status: type: string example: pending channel: type: string example: import-progress.9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a 404: description: 'File not found in S3' content: application/json: schema: type: object example: error: 'Arquivo não encontrado no S3' properties: error: type: string example: 'Arquivo não encontrado no S3' 422: description: 'Invalid XML or not a valid NFe' content: application/json: schema: type: object example: error: 'Arquivo XML inválido ou não é uma NFe' properties: error: type: string example: 'Arquivo XML inválido ou não é uma NFe' tags: - Import requestBody: required: true content: application/json: schema: type: object properties: s3_file_path: type: string description: 'Path to the NFe XML file in S3 storage' example: imports/nfe_12345.xml original_filename: type: string description: 'Original filename of the uploaded NFe' example: nota_fiscal_001.xml import_type: type: string description: 'Type of import (currently only "nfe" is supported)' example: nfe required: - s3_file_path - original_filename - import_type /api/imports: get: summary: 'List User Imports' operationId: listUserImports description: 'List all NFe imports for the authenticated user with filtering and pagination options.' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of imports per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of imports per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 - in: query name: status description: 'Filter imports by status (pending, processing, completed, failed).' example: completed required: false schema: type: string description: 'Filter imports by status (pending, processing, completed, failed).' example: completed enum: - pending - processing - completed - failed - in: query name: import_type description: 'Filter imports by type.' example: nfe required: false schema: type: string description: 'Filter imports by type.' example: nfe enum: - initial_load - stock_update - nfe responses: 200: description: 'Imports retrieved successfully' content: application/json: schema: type: object example: data: - id: 9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a status: completed import_type: nfe original_filename: nota_fiscal_001.xml nfe_number: '123456' nfe_date: '2023-12-01' total_products: 15 processed_products: 15 progress_percentage: 100.0 imported_at: '2023-12-01T10:30:00.000Z' supplier: name: 'Fornecedor Ltda' document: '12345678000199' properties: data: type: array example: - id: 9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a status: completed import_type: nfe original_filename: nota_fiscal_001.xml nfe_number: '123456' nfe_date: '2023-12-01' total_products: 15 processed_products: 15 progress_percentage: 100 imported_at: '2023-12-01T10:30:00.000Z' supplier: name: 'Fornecedor Ltda' document: '12345678000199' items: type: object properties: id: type: string example: 9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a status: type: string example: completed import_type: type: string example: nfe original_filename: type: string example: nota_fiscal_001.xml nfe_number: type: string example: '123456' nfe_date: type: string example: '2023-12-01' total_products: type: integer example: 15 processed_products: type: integer example: 15 progress_percentage: type: number example: 100.0 imported_at: type: string example: '2023-12-01T10:30:00.000Z' supplier: type: object properties: name: type: string example: 'Fornecedor Ltda' document: type: string example: '12345678000199' tags: - Import '/api/imports/{importId}': get: summary: 'Get Import Details' operationId: getImportDetails description: 'Retrieve detailed information about a specific NFe import, including progress and supplier data.' parameters: [] responses: 200: description: 'Import details retrieved successfully' content: application/json: schema: type: object example: import_id: 9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a status: completed import_type: nfe original_filename: nota_fiscal_001.xml nfe_number: '123456' nfe_date: '2023-12-01' total_products: 15 processed_products: 10 progress_percentage: 66.67 imported_by: 'João Silva' imported_at: '2023-12-01T10:30:00.000Z' supplier: id: supplier-uuid name: 'Fornecedor Ltda' document: '12345678000199' channel: import-progress.9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a properties: import_id: type: string example: 9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a status: type: string example: completed import_type: type: string example: nfe original_filename: type: string example: nota_fiscal_001.xml nfe_number: type: string example: '123456' nfe_date: type: string example: '2023-12-01' total_products: type: integer example: 15 processed_products: type: integer example: 10 progress_percentage: type: number example: 66.67 imported_by: type: string example: 'João Silva' imported_at: type: string example: '2023-12-01T10:30:00.000Z' supplier: type: object properties: id: type: string example: supplier-uuid name: type: string example: 'Fornecedor Ltda' document: type: string example: '12345678000199' channel: type: string example: import-progress.9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a tags: - Import parameters: - in: path name: importId description: '' example: aut required: true schema: type: string '/api/imports/{importId}/products': get: summary: 'Get Import Products' operationId: getImportProducts description: 'List all products from a specific NFe import with filtering and pagination options.' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of products per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of products per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 - in: query name: status description: 'Filter products by processing status (pending, processed).' example: pending required: false schema: type: string description: 'Filter products by processing status (pending, processed).' example: pending enum: - pending - processed nullable: true - in: query name: q description: 'Search products by name / code / EAN. O campo value não pode ser superior a 255 caracteres.' example: 'Produto ABC' required: false schema: type: string description: 'Search products by name / code / EAN. O campo value não pode ser superior a 255 caracteres.' example: 'Produto ABC' nullable: true responses: 200: description: 'Products retrieved successfully' content: application/json: schema: type: object example: import: id: 9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a total_products: 15 processed_products: 10 progress_percentage: 66.67 products: data: - id: product-uuid supplier_product_code: ABC123 ean_code: '7891234567890' name: 'Nome do Produto' unit: UN quantity: 10 unit_price: 15.5 total_price: 155.0 is_processed: false system_product: null linked_at: null linked_by: null pagination: current_page: 1 per_page: 15 total: 15 last_page: 1 properties: import: type: object properties: id: type: string example: 9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a total_products: type: integer example: 15 processed_products: type: integer example: 10 progress_percentage: type: number example: 66.67 products: type: object properties: data: type: array example: - id: product-uuid supplier_product_code: ABC123 ean_code: '7891234567890' name: 'Nome do Produto' unit: UN quantity: 10 unit_price: 15.5 total_price: 155 is_processed: false system_product: null linked_at: null linked_by: null items: type: object properties: id: type: string example: product-uuid supplier_product_code: type: string example: ABC123 ean_code: type: string example: '7891234567890' name: type: string example: 'Nome do Produto' unit: type: string example: UN quantity: type: integer example: 10 unit_price: type: number example: 15.5 total_price: type: number example: 155.0 is_processed: type: boolean example: false system_product: type: string example: null linked_at: type: string example: null linked_by: type: string example: null pagination: type: object properties: current_page: type: integer example: 1 per_page: type: integer example: 15 total: type: integer example: 15 last_page: type: integer example: 1 tags: - Import parameters: - in: path name: importId description: '' example: rerum required: true schema: type: string '/api/imports/{importId}/products/link': post: summary: 'Link Products' operationId: linkProducts description: 'Inicia, de forma assíncrona, a vinculação de produtos do fornecedor a produtos do sistema ou criação de novos itens no estoque. Retorna 202 com o canal para acompanhar o progresso.' parameters: [] responses: 202: description: 'Linking accepted and started asynchronously' content: application/json: schema: type: object example: message: 'Vinculação de produtos iniciada com sucesso' total_mappings: 2 channel: 'imports.{import-uuid}' properties: message: type: string example: 'Vinculação de produtos iniciada com sucesso' total_mappings: type: integer example: 2 channel: type: string example: 'imports.{import-uuid}' 422: description: 'Error linking products' content: application/json: schema: type: object example: error: 'Erro ao vincular produtos: Product not found' properties: error: type: string example: 'Erro ao vincular produtos: Product not found' tags: - Import requestBody: required: true content: application/json: schema: type: object properties: mappings: type: array description: 'Array of product mappings' example: - aut items: type: string required: - mappings parameters: - in: path name: importId description: '' example: iure required: true schema: type: string /api/notifications: get: summary: 'List notifications' operationId: listNotifications description: 'List user notifications' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 - in: query name: module description: 'Filter by module name. O campo value não pode ser superior a 100 caracteres.' example: CashFlow required: false schema: type: string description: 'Filter by module name. O campo value não pode ser superior a 100 caracteres.' example: CashFlow nullable: true - in: query name: type description: 'Filter by type (ex.: info, success, warning, error). O campo value não pode ser superior a 100 caracteres.' example: success required: false schema: type: string description: 'Filter by type (ex.: info, success, warning, error). O campo value não pode ser superior a 100 caracteres.' example: success nullable: true - in: query name: priority description: 'Filter by priority number. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 255.' example: 10 required: false schema: type: integer description: 'Filter by priority number. O campo value deve ser pelo menos 0. O campo value não pode ser superior a 255.' example: 10 nullable: true - in: query name: unread_only description: 'Only unread notifications when true.' example: true required: false schema: type: boolean description: 'Only unread notifications when true.' example: true nullable: true - in: query name: read_status description: 'Filter by read status (all, read, unread).' example: unread required: false schema: type: string description: 'Filter by read status (all, read, unread).' example: unread enum: - all - read - unread nullable: true - in: query name: date_start description: 'Filter notifications created from this date (YYYY-MM-DD). O campo value deve ser uma data válida.' example: '2024-01-01' required: false schema: type: string description: 'Filter notifications created from this date (YYYY-MM-DD). O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true - in: query name: date_end description: 'Filter notifications created until this date (YYYY-MM-DD). O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a date_start.' example: '2024-12-31' required: false schema: type: string description: 'Filter notifications created until this date (YYYY-MM-DD). O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a date_start.' example: '2024-12-31' nullable: true - in: query name: q description: 'Search by title/message. O campo value não pode ser superior a 255 caracteres.' example: 'erro faturamento' required: false schema: type: string description: 'Search by title/message. O campo value não pode ser superior a 255 caracteres.' example: 'erro faturamento' nullable: true responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Notifications /api/notifications/mark-as-read: post: summary: 'Mark notifications as read' operationId: markNotificationsAsRead description: 'Mark one or many notifications as read' parameters: [] responses: { } tags: - Notifications requestBody: required: true content: application/json: schema: type: object properties: notifications: type: array description: 'notificação. O campo value deve ser um UUID válido.' example: - 'Example Notifications *' items: type: string required: - notifications /api/notifications/mark-as-unread: post: summary: 'Mark notifications as unread' operationId: markNotificationsAsUnread description: 'Mark one or many notifications as unread' parameters: [] responses: { } tags: - Notifications requestBody: required: true content: application/json: schema: type: object properties: notifications: type: array description: 'notificação. O campo value deve ser um UUID válido.' example: - 'Example Notifications *' items: type: string required: - notifications /api/notifications/mark-all-as-read: post: summary: 'Mark all notifications as read' operationId: markAllNotificationsAsRead description: 'Mark all user notifications as read' parameters: [] responses: { } tags: - Notifications /api/notifications/unread-count: get: summary: 'Unread notifications count' operationId: unreadNotificationsCount description: 'Count of unread notifications for the user' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Notifications /api/payment-receipts: get: summary: 'List payment receipts' operationId: listPaymentReceipts description: 'List all payment receipts with filters' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 - in: query name: q description: 'Search query (searches in receiver name, document, and receipt number).' example: 'João Silva' required: false schema: type: string description: 'Search query (searches in receiver name, document, and receipt number).' example: 'João Silva' nullable: true - in: query name: employee_id description: 'Filter by employee UUID. The uuid of an existing record in the employees table.' example: a01edd80-bf3e-40f7-8613-ccb4be5831b3 required: false schema: type: string description: 'Filter by employee UUID. The uuid of an existing record in the employees table.' example: a01edd80-bf3e-40f7-8613-ccb4be5831b3 - in: query name: receiver_type description: 'Filter by receiver type.' example: employee required: false schema: type: string description: 'Filter by receiver type.' example: employee enum: - employee - custom - in: query name: start_date description: 'Filter by issue date (start). O campo value deve ser uma data válida.' example: '2025-01-01' required: false schema: type: string description: 'Filter by issue date (start). O campo value deve ser uma data válida.' example: '2025-01-01' - in: query name: end_date description: 'Filter by issue date (end). O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a start_date.' example: '2025-12-31' required: false schema: type: string description: 'Filter by issue date (end). O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a start_date.' example: '2025-12-31' - in: query name: min_amount description: 'Filter by minimum amount. O campo value deve ser pelo menos 0.' example: 100.0 required: false schema: type: number description: 'Filter by minimum amount. O campo value deve ser pelo menos 0.' example: 100.0 - in: query name: max_amount description: 'Filter by maximum amount. O campo value deve ser pelo menos 0.' example: 1000.0 required: false schema: type: number description: 'Filter by maximum amount. O campo value deve ser pelo menos 0.' example: 1000.0 - in: query name: payment_method description: 'Filter by payment method.' example: PIX required: false schema: type: string description: 'Filter by payment method.' example: PIX - in: query name: city description: 'Filter by city.' example: 'São Paulo' required: false schema: type: string description: 'Filter by city.' example: 'São Paulo' - in: query name: search description: '' example: magni required: false schema: type: string description: '' example: magni - in: query name: document description: '' example: quisquam required: false schema: type: string description: '' example: quisquam - in: query name: work_id description: 'Filter by work UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the works table.' example: a01edd80-bf3e-40f7-8613-ccb4be5831b3 required: false schema: type: string description: 'Filter by work UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the works table.' example: a01edd80-bf3e-40f7-8613-ccb4be5831b3 nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1becbf85-58f2-3c22-93b7-2664bc69ead7 receipt_number: REC-7558 receiver_type: employee receiver: id: null name: 'Mavis Hand' document: 570.344.918-36 payment: amount: 2339.34 amount_in_words: 'Valor por extenso de teste' method: 'Transferência Bancária' description: 'Nisi nihil eaque eos veritatis impedit impedit voluptatibus.' issuer: name: 'Hudson, Heidenreich and Bosco' document: 36.582.121/5692-89 issue: date: '2026-01-06' city: 'Port Winonaside' state: SC created_by: id: a0fe5a55-9283-4a44-a003-efbf7b4f98a4 name: 'Naomie Olson' created_at: null updated_at: null - id: 2d4ddb4f-1e88-30d5-a82d-301e7716f874 receipt_number: REC-3191 receiver_type: custom receiver: id: null name: 'Lou Harris' document: 181.218.219-71 payment: amount: 8233.23 amount_in_words: 'Valor por extenso de teste' method: Dinheiro description: 'Fugit ut sint aliquid nesciunt qui totam quia natus.' issuer: name: 'Howell, Friesen and Tromp' document: 44.214.430/9278-26 issue: date: '2026-01-27' city: Emmanuelstad state: CE created_by: id: a0fe5a55-9be3-42d6-8f92-3dcfeeea720a name: 'Chadrick Kuhlman' created_at: null updated_at: null pagination: total: 2 count: 2 per_page: 10 current_page: 1 total_pages: 1 has_more_pages: false links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 1becbf85-58f2-3c22-93b7-2664bc69ead7 receipt_number: REC-7558 receiver_type: employee receiver: id: null name: 'Mavis Hand' document: 570.344.918-36 payment: amount: 2339.34 amount_in_words: 'Valor por extenso de teste' method: 'Transferência Bancária' description: 'Nisi nihil eaque eos veritatis impedit impedit voluptatibus.' issuer: name: 'Hudson, Heidenreich and Bosco' document: 36.582.121/5692-89 issue: date: '2026-01-06' city: 'Port Winonaside' state: SC created_by: id: a0fe5a55-9283-4a44-a003-efbf7b4f98a4 name: 'Naomie Olson' created_at: null updated_at: null - id: 2d4ddb4f-1e88-30d5-a82d-301e7716f874 receipt_number: REC-3191 receiver_type: custom receiver: id: null name: 'Lou Harris' document: 181.218.219-71 payment: amount: 8233.23 amount_in_words: 'Valor por extenso de teste' method: Dinheiro description: 'Fugit ut sint aliquid nesciunt qui totam quia natus.' issuer: name: 'Howell, Friesen and Tromp' document: 44.214.430/9278-26 issue: date: '2026-01-27' city: Emmanuelstad state: CE created_by: id: a0fe5a55-9be3-42d6-8f92-3dcfeeea720a name: 'Chadrick Kuhlman' created_at: null updated_at: null items: type: object properties: id: type: string example: 1becbf85-58f2-3c22-93b7-2664bc69ead7 receipt_number: type: string example: REC-7558 receiver_type: type: string example: employee receiver: type: object properties: id: type: string example: null name: type: string example: 'Mavis Hand' document: type: string example: 570.344.918-36 payment: type: object properties: amount: type: number example: 2339.34 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: 'Transferência Bancária' description: type: string example: 'Nisi nihil eaque eos veritatis impedit impedit voluptatibus.' issuer: type: object properties: name: type: string example: 'Hudson, Heidenreich and Bosco' document: type: string example: 36.582.121/5692-89 issue: type: object properties: date: type: string example: '2026-01-06' city: type: string example: 'Port Winonaside' state: type: string example: SC created_by: type: object properties: id: type: string example: a0fe5a55-9283-4a44-a003-efbf7b4f98a4 name: type: string example: 'Naomie Olson' created_at: type: string example: null updated_at: type: string example: null pagination: type: object properties: total: type: integer example: 2 count: type: integer example: 2 per_page: type: integer example: 10 current_page: type: integer example: 1 total_pages: type: integer example: 1 has_more_pages: type: boolean example: false links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Payment Receipts' post: summary: 'Create payment receipt' operationId: createPaymentReceipt description: 'Create a new payment receipt' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Payment Receipts' requestBody: required: true content: application/json: schema: type: object properties: receiver_type: type: string description: 'Tipo de Recebedor.' example: 'Example Receiver type' enum: - employee - custom employee_id: type: string description: 'Funcionário. This field is required when receiver_type is employee. The uuid of an existing record in the employees table.' example: 918547a1-b468-4c4a-846a-3c1cf2c126a7 nullable: true receiver_name: type: string description: 'Nome do Recebedor. This field is required when receiver_type is custom. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' nullable: true receiver_document: type: string description: 'Documento do Recebedor. This field is required when receiver_type is custom. O campo value não pode ser superior a 255 caracteres.' example: 'Example Receiver document' nullable: true amount: type: number description: 'Valor. O campo value deve ser pelo menos 0.01.' example: 1.0 amount_in_words: type: string description: 'Valor por Extenso.' example: 'Example Amount in words' payment_method: type: string description: 'Método de Pagamento. O campo value não pode ser superior a 255 caracteres.' example: 'Example Payment method' description: type: string description: Descrição. example: 'Example Description' issuer_name: type: string description: 'Nome do Emissor. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' issuer_document: type: string description: 'Documento do Emissor. O campo value não pode ser superior a 255 caracteres.' example: 'Example Issuer document' issue_date: type: string description: 'Data de Emissão. O campo value deve ser uma data válida. O campo value deve ser uma data anterior ou igual a today.' example: '2024-01-01' city: type: string description: 'Cidade. O campo value não pode ser superior a 255 caracteres.' example: 'Example City' state: type: string description: 'Estado. O campo value não pode ser superior a 2 caracteres.' example: 'Example State' work_id: type: string description: 'Obra. O campo value deve ser um UUID válido. The uuid of an existing record in the works table.' example: 0bb15b7a-395e-3bb8-a621-189d202d5701 nullable: true required: - receiver_type - amount - payment_method - description - issuer_name - issuer_document - issue_date - city - state '/api/payment-receipts/{receipt}': get: summary: 'Show payment receipt' operationId: showPaymentReceipt description: 'Show a payment receipt' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: b7b4da15-5980-359f-bebb-03843a9e80a2 receipt_number: REC-8450 receiver_type: custom receiver: id: null name: 'Aiyana Fadel' document: 146.025.660-73 payment: amount: 9513.2 amount_in_words: 'Valor por extenso de teste' method: Dinheiro description: 'Et rem quisquam fugiat error.' issuer: name: Jenkins-Vandervort document: 27.617.602/2300-16 issue: date: '2026-01-14' city: 'South Nicoside' state: SP created_by: id: a0fe5a55-a2a6-4cf7-a655-f5d7a07184e1 name: 'Freddie Daniel PhD' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: b7b4da15-5980-359f-bebb-03843a9e80a2 receipt_number: type: string example: REC-8450 receiver_type: type: string example: custom receiver: type: object properties: id: type: string example: null name: type: string example: 'Aiyana Fadel' document: type: string example: 146.025.660-73 payment: type: object properties: amount: type: number example: 9513.2 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: Dinheiro description: type: string example: 'Et rem quisquam fugiat error.' issuer: type: object properties: name: type: string example: Jenkins-Vandervort document: type: string example: 27.617.602/2300-16 issue: type: object properties: date: type: string example: '2026-01-14' city: type: string example: 'South Nicoside' state: type: string example: SP created_by: type: object properties: id: type: string example: a0fe5a55-a2a6-4cf7-a655-f5d7a07184e1 name: type: string example: 'Freddie Daniel PhD' created_at: type: string example: null updated_at: type: string example: null tags: - 'Payment Receipts' put: summary: 'Update payment receipt' operationId: updatePaymentReceipt description: 'Update a payment receipt' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Payment Receipts' requestBody: required: false content: application/json: schema: type: object properties: receiver_type: type: string description: 'Tipo de Recebedor.' example: 'Example Receiver type' enum: - employee - custom employee_id: type: string description: 'Funcionário. This field is required when receiver_type is employee. The uuid of an existing record in the employees table.' example: a1d92ee8-55ec-4ff7-8ff1-517fd04961a1 nullable: true receiver_name: type: string description: 'Nome do Recebedor. This field is required when receiver_type is custom. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' nullable: true receiver_document: type: string description: 'Documento do Recebedor. This field is required when receiver_type is custom. O campo value não pode ser superior a 255 caracteres.' example: 'Example Receiver document' nullable: true amount: type: number description: 'Valor. O campo value deve ser pelo menos 0.01.' example: 1.0 amount_in_words: type: string description: 'Valor por Extenso.' example: 'Example Amount in words' payment_method: type: string description: 'Método de Pagamento. O campo value não pode ser superior a 255 caracteres.' example: 'Example Payment method' description: type: string description: Descrição. example: 'Example Description' issuer_name: type: string description: 'Nome do Emissor. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' issuer_document: type: string description: 'Documento do Emissor. O campo value não pode ser superior a 255 caracteres.' example: 'Example Issuer document' issue_date: type: string description: 'Data de Emissão. O campo value deve ser uma data válida. O campo value deve ser uma data anterior ou igual a today.' example: '2024-01-01' city: type: string description: 'Cidade. O campo value não pode ser superior a 255 caracteres.' example: 'Example City' state: type: string description: 'Estado. O campo value não pode ser superior a 2 caracteres.' example: 'Example State' work_id: type: string description: 'Obra. O campo value deve ser um UUID válido. The uuid of an existing record in the works table.' example: 3207b730-5f94-3958-b61f-91e3041eb5f0 nullable: true delete: summary: 'Delete payment receipt' operationId: deletePaymentReceipt description: 'Delete a payment receipt' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Payment Receipts' parameters: - in: path name: receipt description: 'Payment Receipt ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/employees/{employee_id}/receipts': get: summary: 'List employee receipts' operationId: listEmployeeReceipts description: 'List all payment receipts for a specific employee' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 2b110533-5f3b-3ef4-a1d2-bb189a09d80a receipt_number: REC-1811 receiver_type: custom receiver: id: null name: 'Matteo Schulist' document: 596.327.587-29 payment: amount: 214.48 amount_in_words: 'Valor por extenso de teste' method: PIX description: 'Nisi et saepe illo id et assumenda.' issuer: name: 'Boyle, Mueller and Gulgowski' document: 60.068.733/7303-30 issue: date: '2026-01-19' city: 'North Maxine' state: MG created_by: id: a0fe5a55-b8fa-43bb-8773-1f0bfbad4cac name: 'Prof. Nico Sporer IV' created_at: null updated_at: null - id: df66270f-0e26-303d-907a-ad5ec71b203e receipt_number: REC-2221 receiver_type: employee receiver: id: null name: 'Rhett Aufderhar' document: 643.754.130-10 payment: amount: 9173.85 amount_in_words: 'Valor por extenso de teste' method: 'Transferência Bancária' description: 'Corrupti necessitatibus sed qui similique eum omnis.' issuer: name: Braun-Shields document: 29.330.409/0587-90 issue: date: '2026-01-30' city: Nikkomouth state: SC created_by: id: a0fe5a55-bb92-4b4f-be1e-5563bd005b3d name: 'Prof. Rachael Haag' created_at: null updated_at: null pagination: total: 2 count: 2 per_page: 10 current_page: 1 total_pages: 1 has_more_pages: false links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 2b110533-5f3b-3ef4-a1d2-bb189a09d80a receipt_number: REC-1811 receiver_type: custom receiver: id: null name: 'Matteo Schulist' document: 596.327.587-29 payment: amount: 214.48 amount_in_words: 'Valor por extenso de teste' method: PIX description: 'Nisi et saepe illo id et assumenda.' issuer: name: 'Boyle, Mueller and Gulgowski' document: 60.068.733/7303-30 issue: date: '2026-01-19' city: 'North Maxine' state: MG created_by: id: a0fe5a55-b8fa-43bb-8773-1f0bfbad4cac name: 'Prof. Nico Sporer IV' created_at: null updated_at: null - id: df66270f-0e26-303d-907a-ad5ec71b203e receipt_number: REC-2221 receiver_type: employee receiver: id: null name: 'Rhett Aufderhar' document: 643.754.130-10 payment: amount: 9173.85 amount_in_words: 'Valor por extenso de teste' method: 'Transferência Bancária' description: 'Corrupti necessitatibus sed qui similique eum omnis.' issuer: name: Braun-Shields document: 29.330.409/0587-90 issue: date: '2026-01-30' city: Nikkomouth state: SC created_by: id: a0fe5a55-bb92-4b4f-be1e-5563bd005b3d name: 'Prof. Rachael Haag' created_at: null updated_at: null items: type: object properties: id: type: string example: 2b110533-5f3b-3ef4-a1d2-bb189a09d80a receipt_number: type: string example: REC-1811 receiver_type: type: string example: custom receiver: type: object properties: id: type: string example: null name: type: string example: 'Matteo Schulist' document: type: string example: 596.327.587-29 payment: type: object properties: amount: type: number example: 214.48 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: PIX description: type: string example: 'Nisi et saepe illo id et assumenda.' issuer: type: object properties: name: type: string example: 'Boyle, Mueller and Gulgowski' document: type: string example: 60.068.733/7303-30 issue: type: object properties: date: type: string example: '2026-01-19' city: type: string example: 'North Maxine' state: type: string example: MG created_by: type: object properties: id: type: string example: a0fe5a55-b8fa-43bb-8773-1f0bfbad4cac name: type: string example: 'Prof. Nico Sporer IV' created_at: type: string example: null updated_at: type: string example: null pagination: type: object properties: total: type: integer example: 2 count: type: integer example: 2 per_page: type: integer example: 10 current_page: type: integer example: 1 total_pages: type: integer example: 1 has_more_pages: type: boolean example: false links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Payment Receipts' parameters: - in: path name: employee_id description: 'The ID of the employee.' example: 12 required: true schema: type: integer - in: path name: employee description: 'Employee ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/permission-groups: get: summary: 'List permission groups' operationId: listPermissionGroups description: 'List all permission groups' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: b5cb0617-9514-314c-b33d-2d5c355608fa name: dolor-voluptatem-suscipit display_name: 'dolorem voluptates amet' created_at: null updated_at: null - id: 10d874fe-4de4-3e57-accb-0c9dfa40821e name: cupiditate-ullam display_name: 'vitae qui voluptas' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: b5cb0617-9514-314c-b33d-2d5c355608fa name: dolor-voluptatem-suscipit display_name: 'dolorem voluptates amet' created_at: null updated_at: null - id: 10d874fe-4de4-3e57-accb-0c9dfa40821e name: cupiditate-ullam display_name: 'vitae qui voluptas' created_at: null updated_at: null items: type: object properties: id: type: string example: b5cb0617-9514-314c-b33d-2d5c355608fa name: type: string example: dolor-voluptatem-suscipit display_name: type: string example: 'dolorem voluptates amet' created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Permission Groups' post: summary: 'Create permission group' operationId: createPermissionGroup description: 'Create a new permission group' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Permission Groups' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Name. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' display_name: type: string description: 'Display name. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' required: - name - display_name '/api/permission-groups/{permissionGroup}': put: summary: 'Update permission group' operationId: updatePermissionGroup description: 'Update a permission group' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Permission Groups' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Name. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' display_name: type: string description: 'Display name. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' get: summary: 'Show permission group' operationId: showPermissionGroup description: 'Show a permission group' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: bd307914-5a80-3b36-a1c7-d311048b469f name: molestiae-laboriosam display_name: 'at dignissimos nulla' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: bd307914-5a80-3b36-a1c7-d311048b469f name: type: string example: molestiae-laboriosam display_name: type: string example: 'at dignissimos nulla' created_at: type: string example: null updated_at: type: string example: null tags: - 'Permission Groups' delete: summary: 'Delete permission group' operationId: deletePermissionGroup description: 'Delete a permission group' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Permission Groups' parameters: - in: path name: permissionGroup description: '' example: 1 required: true schema: type: integer /api/product-brands: get: summary: 'List product brands' operationId: listProductBrands description: 'List all product brands' parameters: - in: query name: q description: '' example: Structure required: false schema: type: string description: '' example: Structure nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 75e713fb-0890-35eb-bef6-3e792c254fe7 name: 'Dr. Fabiano Denis Fontes Jr.' created_at: null updated_at: null - id: 5eb19425-edfa-3cfd-9748-96c81a0d7faa name: 'Srta. Tatiana Arruda Fonseca' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 75e713fb-0890-35eb-bef6-3e792c254fe7 name: 'Dr. Fabiano Denis Fontes Jr.' created_at: null updated_at: null - id: 5eb19425-edfa-3cfd-9748-96c81a0d7faa name: 'Srta. Tatiana Arruda Fonseca' created_at: null updated_at: null items: type: object properties: id: type: string example: 75e713fb-0890-35eb-bef6-3e792c254fe7 name: type: string example: 'Dr. Fabiano Denis Fontes Jr.' created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Product Brands' post: summary: 'Create product brand' operationId: createProductBrand description: 'Create a new product brand' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Product Brands' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' required: - name '/api/product-brands/{productBrand}': get: summary: 'Show product brand' operationId: showProductBrand description: 'Show a product brand' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 2d57a584-e4ab-3423-a1c8-2012e03eef36 name: 'Cristóvão Richard Casanova' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 2d57a584-e4ab-3423-a1c8-2012e03eef36 name: type: string example: 'Cristóvão Richard Casanova' created_at: type: string example: null updated_at: type: string example: null tags: - 'Product Brands' put: summary: 'Update product brand' operationId: updateProductBrand description: 'Update a product brand' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Product Brands' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' required: - name delete: summary: 'Delete product brand' operationId: deleteProductBrand description: 'Delete a product brand' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Product Brands' parameters: - in: path name: productBrand description: 'Product brand UUID' example: rerum required: true schema: type: string /api/product-families: get: summary: 'List product families' operationId: listProductFamilies description: 'List all product families' parameters: - in: query name: q description: '' example: Structure required: false schema: type: string description: '' example: Structure nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 27d67f9d-98fd-326e-9795-248f2184e9db name: 'Deivid da Cruz Uchoa Sobrinho' created_at: null updated_at: null - id: c0db01d5-fd95-334c-ace8-4a45f6e03b5d name: 'Noelí Valência Neto' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 27d67f9d-98fd-326e-9795-248f2184e9db name: 'Deivid da Cruz Uchoa Sobrinho' created_at: null updated_at: null - id: c0db01d5-fd95-334c-ace8-4a45f6e03b5d name: 'Noelí Valência Neto' created_at: null updated_at: null items: type: object properties: id: type: string example: 27d67f9d-98fd-326e-9795-248f2184e9db name: type: string example: 'Deivid da Cruz Uchoa Sobrinho' created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Product Families' post: summary: 'Create product family' operationId: createProductFamily description: 'Create a new product family' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Product Families' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' required: - name '/api/product-families/{productFamily}': get: summary: 'Show product family' operationId: showProductFamily description: 'Show a product family' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: e4957dbe-edae-34b6-a13b-9fc9145e2808 name: 'Sr. Wellington Azevedo Madeira' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: e4957dbe-edae-34b6-a13b-9fc9145e2808 name: type: string example: 'Sr. Wellington Azevedo Madeira' created_at: type: string example: null updated_at: type: string example: null tags: - 'Product Families' put: summary: 'Update product family' operationId: updateProductFamily description: 'Update a product family' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Product Families' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' required: - name delete: summary: 'Delete product family' operationId: deleteProductFamily description: 'Delete a product family' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Product Families' parameters: - in: path name: productFamily description: 'Product family UUID' example: praesentium required: true schema: type: string /api/product-quantity-lists: get: summary: 'List product quantity lists' operationId: listProductQuantityLists description: 'List all product quantity lists' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 7adedfe0-665a-3329-ac0f-485af29c6dca name: 'Vero neque voluptates repellat.' description: 'Fugit qui rerum nihil architecto sapiente vel unde. Aut amet necessitatibus ut blanditiis. Omnis ut enim amet dolorem porro quod vel. Impedit inventore perspiciatis aspernatur error molestiae beatae et. Cum accusamus magnam asperiores maxime.' work: id: a0fe5a56-2ec5-4a2c-8a23-4e636220fe4f name: 'Leonardo Ferreira Jr.' user: id: a0fe5a56-33a2-4074-a76f-accb334f39ad name: 'Troy Kuvalis' created_at: null updated_at: null - id: da633ec5-b821-3b27-89c8-1f212356451e name: 'Deserunt expedita incidunt.' description: null work: id: a0fe5a56-3701-49db-a92e-683da566e08a name: 'Dr. Vinícius Salazar da Cruz Jr.' user: id: a0fe5a56-39c3-4307-932a-3f94defa8dea name: 'Russ McClure' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 7adedfe0-665a-3329-ac0f-485af29c6dca name: 'Vero neque voluptates repellat.' description: 'Fugit qui rerum nihil architecto sapiente vel unde. Aut amet necessitatibus ut blanditiis. Omnis ut enim amet dolorem porro quod vel. Impedit inventore perspiciatis aspernatur error molestiae beatae et. Cum accusamus magnam asperiores maxime.' work: id: a0fe5a56-2ec5-4a2c-8a23-4e636220fe4f name: 'Leonardo Ferreira Jr.' user: id: a0fe5a56-33a2-4074-a76f-accb334f39ad name: 'Troy Kuvalis' created_at: null updated_at: null - id: da633ec5-b821-3b27-89c8-1f212356451e name: 'Deserunt expedita incidunt.' description: null work: id: a0fe5a56-3701-49db-a92e-683da566e08a name: 'Dr. Vinícius Salazar da Cruz Jr.' user: id: a0fe5a56-39c3-4307-932a-3f94defa8dea name: 'Russ McClure' created_at: null updated_at: null items: type: object properties: id: type: string example: 7adedfe0-665a-3329-ac0f-485af29c6dca name: type: string example: 'Vero neque voluptates repellat.' description: type: string example: 'Fugit qui rerum nihil architecto sapiente vel unde. Aut amet necessitatibus ut blanditiis. Omnis ut enim amet dolorem porro quod vel. Impedit inventore perspiciatis aspernatur error molestiae beatae et. Cum accusamus magnam asperiores maxime.' work: type: object properties: id: type: string example: a0fe5a56-2ec5-4a2c-8a23-4e636220fe4f name: type: string example: 'Leonardo Ferreira Jr.' user: type: object properties: id: type: string example: a0fe5a56-33a2-4074-a76f-accb334f39ad name: type: string example: 'Troy Kuvalis' created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Product Quantity Lists' requestBody: required: false content: application/json: schema: type: object properties: q: type: string description: Busca. example: 'Example Q' nullable: true work_id: type: string description: 'Obra. The uuid of an existing record in the works table.' example: 37bd900f-865e-3ff1-8fbc-c38e003c7a3b nullable: true user_id: type: string description: 'Usuário. The uuid of an existing record in the users table.' example: 7a8fcb24-08da-3fe2-b4c5-2541b49a23c4 nullable: true responsible_id: type: string description: 'Responsável. The uuid of an existing record in the users table.' example: f1b11af5-d70b-36ff-afa1-f342118ebcf6 nullable: true per_page: type: integer description: 'Itens por página. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 1 sort: type: string description: Ordenação. example: 'Example Sort' sort_desc: type: boolean description: 'Ordem decrescente.' example: false post: summary: 'Create product quantity list' operationId: createProductQuantityList description: 'Create a new product quantity list' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Quantity Lists' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' nullable: true description: type: string description: Descrição. example: 'Example Description' nullable: true work_id: type: string description: 'Obra. The uuid of an existing record in the works table.' example: a448b074-340f-335d-8ccc-b50375b9f045 items: type: array description: Itens. example: - null - null items: type: object properties: product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 7e62242d-6d31-3431-bee7-0659b2e720e9 quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Items * observation' nullable: true required: - product_id - quantity required: - work_id '/api/product-quantity-lists/{productQuantityList}': get: summary: 'Show product quantity list' operationId: showProductQuantityList description: 'Show a product quantity list' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: eb83995d-8a55-3fa5-93aa-c576abe7e53d name: 'Veniam ut voluptatibus.' description: 'Incidunt soluta et veniam deleniti cupiditate iure. Architecto cumque soluta illo libero. Autem ab ut corrupti ut voluptas velit voluptates.' work: id: a0fe5a56-3f70-4a93-bba1-d88784976881 name: 'Raquel Soto Jr.' user: id: a0fe5a56-4217-45ae-8a47-e09971d5b05e name: 'Grover Lesch' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: eb83995d-8a55-3fa5-93aa-c576abe7e53d name: type: string example: 'Veniam ut voluptatibus.' description: type: string example: 'Incidunt soluta et veniam deleniti cupiditate iure. Architecto cumque soluta illo libero. Autem ab ut corrupti ut voluptas velit voluptates.' work: type: object properties: id: type: string example: a0fe5a56-3f70-4a93-bba1-d88784976881 name: type: string example: 'Raquel Soto Jr.' user: type: object properties: id: type: string example: a0fe5a56-4217-45ae-8a47-e09971d5b05e name: type: string example: 'Grover Lesch' created_at: type: string example: null updated_at: type: string example: null tags: - 'Product Quantity Lists' put: summary: 'Update product quantity list' operationId: updateProductQuantityList description: 'Update a product quantity list. Can include items to replace all items in the list.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Quantity Lists' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' nullable: true description: type: string description: Descrição. example: 'Example Description' nullable: true items: type: array description: Itens. example: - null - null items: type: object properties: id: type: string description: 'ID do Item. The uuid of an existing record in the product_quantity_list_items table.' example: c5fb4283-b02d-322b-ae60-c4158fdd386a product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: acd4c14d-a501-30d1-bb1a-4f5f2e6fc06b quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Items * observation' nullable: true required: - product_id - quantity delete: summary: 'Delete product quantity list' operationId: deleteProductQuantityList description: 'Delete a product quantity list' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Product Quantity Lists' parameters: - in: path name: productQuantityList description: 'Product Quantity List UUID' example: necessitatibus required: true schema: type: string '/api/product-quantity-lists/{productQuantityList}/items': get: summary: 'List items' operationId: listItems description: 'List all items from a product quantity list with pagination' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: b2e86d61-8572-3421-a6fd-f1ce381f611c product: id: a0fe5a56-540b-4f13-85cf-47b62c9969f7 name: 'Aparecida Duarte Neto' code: PRD-371762 unit: id: a0fe5a56-524e-435c-8af7-f10d9358821b name: 'Dr. Maísa Queirós' abbreviation: 'Sr. Isaac Pontes Filho' quantity: 76.2701 observation: null created_at: null updated_at: null - id: 9de5423c-cd4e-30ef-beda-5f5e84b50044 product: id: a0fe5a56-610b-4cfa-bd68-6ad03524e3a6 name: 'Dr. Elizabeth Serna Ortiz Filho' code: PRD-149033 unit: id: a0fe5a56-5ffe-404d-b7b1-ffe833f31c63 name: 'Tiago Francisco Rangel' abbreviation: 'Sr. Samuel Maurício Toledo Neto' quantity: 939.033 observation: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: b2e86d61-8572-3421-a6fd-f1ce381f611c product: id: a0fe5a56-540b-4f13-85cf-47b62c9969f7 name: 'Aparecida Duarte Neto' code: PRD-371762 unit: id: a0fe5a56-524e-435c-8af7-f10d9358821b name: 'Dr. Maísa Queirós' abbreviation: 'Sr. Isaac Pontes Filho' quantity: 76.2701 observation: null created_at: null updated_at: null - id: 9de5423c-cd4e-30ef-beda-5f5e84b50044 product: id: a0fe5a56-610b-4cfa-bd68-6ad03524e3a6 name: 'Dr. Elizabeth Serna Ortiz Filho' code: PRD-149033 unit: id: a0fe5a56-5ffe-404d-b7b1-ffe833f31c63 name: 'Tiago Francisco Rangel' abbreviation: 'Sr. Samuel Maurício Toledo Neto' quantity: 939.033 observation: null created_at: null updated_at: null items: type: object properties: id: type: string example: b2e86d61-8572-3421-a6fd-f1ce381f611c product: type: object properties: id: type: string example: a0fe5a56-540b-4f13-85cf-47b62c9969f7 name: type: string example: 'Aparecida Duarte Neto' code: type: string example: PRD-371762 unit: type: object properties: id: type: string example: a0fe5a56-524e-435c-8af7-f10d9358821b name: type: string example: 'Dr. Maísa Queirós' abbreviation: type: string example: 'Sr. Isaac Pontes Filho' quantity: type: number example: 76.2701 observation: type: string example: null created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Product Quantity Lists' requestBody: required: false content: application/json: schema: type: object properties: per_page: type: integer description: 'Itens por página. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 1 q: type: string description: 'Busca. O campo value não pode ser superior a 255 caracteres.' example: 'Example Q' post: summary: 'Add items to list' operationId: addItemsToList description: 'Add one or more product items to the list' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: array properties: data: type: string example: array tags: - 'Product Quantity Lists' requestBody: required: true content: application/json: schema: type: object properties: items: type: array description: 'Itens. O campo value deve ter pelo menos 1 itens.' example: - null - null items: type: object properties: product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 890b7f32-13ec-3140-b2c5-57c27334d93e quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Items * observation' nullable: true required: - product_id - quantity required: - items delete: summary: 'Remove items' operationId: removeItems description: 'Remove one or more product items from the list' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: deleted: integer properties: deleted: type: string example: integer tags: - 'Product Quantity Lists' requestBody: required: true content: application/json: schema: type: object properties: items: type: array description: 'Item. The uuid of an existing record in the product_quantity_list_items table.' example: - 9c61d5e1-b9ff-34fe-a855-601ea2e15137 items: type: string required: - items parameters: - in: path name: productQuantityList description: 'Product Quantity List UUID' example: sed required: true schema: type: string '/api/product-quantity-lists/items/{id}': put: summary: 'Update item' operationId: updateItem description: 'Update a product item in the list' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Quantity Lists' requestBody: required: false content: application/json: schema: type: object properties: quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Observation' nullable: true parameters: - in: path name: id description: 'The ID of the item.' example: ipsum required: true schema: type: string - in: path name: item description: 'Product Quantity List Item UUID' example: hic required: true schema: type: string '/api/product-quantity-lists/{productQuantityList}/sync-items': put: summary: 'Sync items' operationId: syncItems description: 'Replace all items in the list' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Quantity Lists' requestBody: required: true content: application/json: schema: type: object properties: items: type: array description: Itens. example: - null - null items: type: object properties: id: type: string description: 'ID do Item. The uuid of an existing record in the product_quantity_list_items table.' example: cbd0367e-8466-335d-9a1c-1f283f08b4ea product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 060fc3e6-4bc4-376a-91fc-a6f6cf61a2a3 quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Items * observation' nullable: true required: - product_id - quantity required: - items parameters: - in: path name: productQuantityList description: 'Product Quantity List UUID' example: et required: true schema: type: string '/api/product-requests/items/{item}/fulfill': post: summary: 'Fulfill item' operationId: fulfillItem description: 'Fulfill a product request item via transfer or allocation' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Request Fulfillment' requestBody: required: true content: application/json: schema: type: object properties: fulfillment_type: type: string description: 'Tipo de atendimento.' example: 'Example Fulfillment type' enum: - transfer - entry stock_id: type: string description: 'Estoque de destino. This field is required when fulfillment_type is transfer. The uuid of an existing record in the stocks table.' example: 7fa54529-c48a-34b4-8164-7930e131ff53 nullable: true quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 source_stock_id: type: string description: 'Estoque de origem. This field is required when fulfillment_type is transfer. The value and stock_id must be different. The uuid of an existing record in the stocks table.' example: 460ac283-80df-3700-ae7b-ae810c7b01e9 nullable: true reason: type: string description: 'Motivo. O campo value não pode ser superior a 500 caracteres.' example: 'Example Reason' nullable: true required: - fulfillment_type - quantity parameters: - in: path name: item description: 'Product Request Item UUID' example: labore required: true schema: type: string '/api/product-requests/items/{item}/fulfillments': get: summary: 'List item fulfillments' operationId: listItemFulfillments description: 'List all fulfillments for a product request item' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 34539a81-225c-3ea2-8621-6ddcbc69a93f quantity: 56.6834 fulfilled_at: '2026-01-21T05:56:57.000000Z' created_at: null - id: 5d95a1d0-69be-3bbe-96d0-b1be34ccf269 quantity: 75.3034 fulfilled_at: '2026-01-12T06:04:18.000000Z' created_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 34539a81-225c-3ea2-8621-6ddcbc69a93f quantity: 56.6834 fulfilled_at: '2026-01-21T05:56:57.000000Z' created_at: null - id: 5d95a1d0-69be-3bbe-96d0-b1be34ccf269 quantity: 75.3034 fulfilled_at: '2026-01-12T06:04:18.000000Z' created_at: null items: type: object properties: id: type: string example: 34539a81-225c-3ea2-8621-6ddcbc69a93f quantity: type: number example: 56.6834 fulfilled_at: type: string example: '2026-01-21T05:56:57.000000Z' created_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Product Request Fulfillment' requestBody: required: false content: application/json: schema: type: object properties: per_page: type: integer description: 'Per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 1 nullable: true page: type: integer description: 'Page. O campo value deve ser pelo menos 1.' example: 1 nullable: true parameters: - in: path name: item description: 'Product Request Item UUID' example: quisquam required: true schema: type: string '/api/product-requests/items/{id}': get: summary: 'Get item with fulfillment details' operationId: getItemWithFulfillmentDetails description: 'Get a single product request item with its fulfillment details' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: a6de3819-98e6-37ed-bf04-4c7c3a683448 product: id: a0fe5a59-51b1-431b-8062-3e20f76fbe5b name: 'Sr. Diego Bonilha Vasques' code: PRD-757465 unit: id: a0fe5a59-507e-43b4-85db-d16e9ce9a86d name: 'Flávia Verdugo' abbreviation: 'Léia Santiago Saito Jr.' quantity: 377.4986 quantity_fulfilled: 0 quantity_pending: 377.4986 is_fulfilled: false is_partially_fulfilled: false observation: 'Qui autem alias reprehenderit nobis itaque maiores.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: a6de3819-98e6-37ed-bf04-4c7c3a683448 product: type: object properties: id: type: string example: a0fe5a59-51b1-431b-8062-3e20f76fbe5b name: type: string example: 'Sr. Diego Bonilha Vasques' code: type: string example: PRD-757465 unit: type: object properties: id: type: string example: a0fe5a59-507e-43b4-85db-d16e9ce9a86d name: type: string example: 'Flávia Verdugo' abbreviation: type: string example: 'Léia Santiago Saito Jr.' quantity: type: number example: 377.4986 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 377.4986 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: 'Qui autem alias reprehenderit nobis itaque maiores.' created_at: type: string example: null updated_at: type: string example: null tags: - 'Product Request Fulfillment' put: summary: 'Update item' operationId: updateItem description: 'Update a product item in the request' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Requests' requestBody: required: false content: application/json: schema: type: object properties: quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Observation' nullable: true parameters: - in: path name: id description: 'The ID of the item.' example: sunt required: true schema: type: string - in: path name: item description: 'Product Request Item UUID' example: ullam required: true schema: type: string '/api/product-requests/{productRequest}/pending-items': get: summary: 'List pending items' operationId: listPendingItems description: 'List all pending items from a product request' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: b6a2c86b-fe66-39f0-b50f-8a3b6d5666fd product: id: a0fe5a59-6692-4cf6-be76-ad9f97bbab34 name: 'Alexa Ávila Barreto Neto' code: PRD-731747 unit: id: a0fe5a59-6556-4995-9ee4-9629358c06c3 name: 'Cléber Sebastião Faria' abbreviation: 'Lara Fonseca Alves' quantity: 199.9573 quantity_fulfilled: 0 quantity_pending: 199.9573 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: 751cd274-0ba1-374a-af21-95c591a94043 product: id: a0fe5a59-7d7c-44ae-94b2-994ac77f5424 name: 'Dr. Ian Padrão Sobrinho' code: PRD-833794 unit: id: a0fe5a59-7c52-45cb-8901-45893f9cc224 name: 'Sra. Stefany Galindo Jr.' abbreviation: 'Fernando Pedro Romero Neto' quantity: 888.9575 quantity_fulfilled: 0 quantity_pending: 888.9575 is_fulfilled: false is_partially_fulfilled: false observation: 'Deleniti in aliquid facilis et consequuntur non.' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: b6a2c86b-fe66-39f0-b50f-8a3b6d5666fd product: id: a0fe5a59-6692-4cf6-be76-ad9f97bbab34 name: 'Alexa Ávila Barreto Neto' code: PRD-731747 unit: id: a0fe5a59-6556-4995-9ee4-9629358c06c3 name: 'Cléber Sebastião Faria' abbreviation: 'Lara Fonseca Alves' quantity: 199.9573 quantity_fulfilled: 0 quantity_pending: 199.9573 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: 751cd274-0ba1-374a-af21-95c591a94043 product: id: a0fe5a59-7d7c-44ae-94b2-994ac77f5424 name: 'Dr. Ian Padrão Sobrinho' code: PRD-833794 unit: id: a0fe5a59-7c52-45cb-8901-45893f9cc224 name: 'Sra. Stefany Galindo Jr.' abbreviation: 'Fernando Pedro Romero Neto' quantity: 888.9575 quantity_fulfilled: 0 quantity_pending: 888.9575 is_fulfilled: false is_partially_fulfilled: false observation: 'Deleniti in aliquid facilis et consequuntur non.' created_at: null updated_at: null items: type: object properties: id: type: string example: b6a2c86b-fe66-39f0-b50f-8a3b6d5666fd product: type: object properties: id: type: string example: a0fe5a59-6692-4cf6-be76-ad9f97bbab34 name: type: string example: 'Alexa Ávila Barreto Neto' code: type: string example: PRD-731747 unit: type: object properties: id: type: string example: a0fe5a59-6556-4995-9ee4-9629358c06c3 name: type: string example: 'Cléber Sebastião Faria' abbreviation: type: string example: 'Lara Fonseca Alves' quantity: type: number example: 199.9573 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 199.9573 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: null created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Product Request Fulfillment' requestBody: required: false content: application/json: schema: type: object properties: per_page: type: integer description: 'Per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 1 nullable: true page: type: integer description: 'Page. O campo value deve ser pelo menos 1.' example: 1 nullable: true parameters: - in: path name: productRequest description: 'Product Request UUID' example: modi required: true schema: type: string '/api/product-requests/pending-by-product/{product}': get: summary: 'List pending items by product' operationId: listPendingItemsByProduct description: 'List all pending product request items for a specific product' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: a5968b1a-e753-364b-ab53-964b0597fe66 product: id: a0fe5a59-924d-410e-9441-d779beb1bdf1 name: 'Dr. Heloísa Marin Jr.' code: PRD-743383 unit: id: a0fe5a59-9120-40d0-b847-59930e857e9a name: 'Sra. Isadora Chaves' abbreviation: 'Hosana Suelen Guerra Neto' quantity: 825.6572 quantity_fulfilled: 0 quantity_pending: 825.6572 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: 0f608365-44ce-3c8e-a80e-574c89208351 product: id: a0fe5a59-a137-4dab-8e87-53e625bd973b name: 'Dr. Júlia Ramos Assunção' code: PRD-755925 unit: id: a0fe5a59-a02c-4871-88a1-a2dd737e4b94 name: 'Noel Serna Sandoval Filho' abbreviation: 'Luiz Hernani da Cruz' quantity: 806.7745 quantity_fulfilled: 0 quantity_pending: 806.7745 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null properties: data: type: array example: - id: a5968b1a-e753-364b-ab53-964b0597fe66 product: id: a0fe5a59-924d-410e-9441-d779beb1bdf1 name: 'Dr. Heloísa Marin Jr.' code: PRD-743383 unit: id: a0fe5a59-9120-40d0-b847-59930e857e9a name: 'Sra. Isadora Chaves' abbreviation: 'Hosana Suelen Guerra Neto' quantity: 825.6572 quantity_fulfilled: 0 quantity_pending: 825.6572 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: 0f608365-44ce-3c8e-a80e-574c89208351 product: id: a0fe5a59-a137-4dab-8e87-53e625bd973b name: 'Dr. Júlia Ramos Assunção' code: PRD-755925 unit: id: a0fe5a59-a02c-4871-88a1-a2dd737e4b94 name: 'Noel Serna Sandoval Filho' abbreviation: 'Luiz Hernani da Cruz' quantity: 806.7745 quantity_fulfilled: 0 quantity_pending: 806.7745 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null items: type: object properties: id: type: string example: a5968b1a-e753-364b-ab53-964b0597fe66 product: type: object properties: id: type: string example: a0fe5a59-924d-410e-9441-d779beb1bdf1 name: type: string example: 'Dr. Heloísa Marin Jr.' code: type: string example: PRD-743383 unit: type: object properties: id: type: string example: a0fe5a59-9120-40d0-b847-59930e857e9a name: type: string example: 'Sra. Isadora Chaves' abbreviation: type: string example: 'Hosana Suelen Guerra Neto' quantity: type: number example: 825.6572 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 825.6572 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: null created_at: type: string example: null updated_at: type: string example: null tags: - 'Product Request Fulfillment' parameters: - in: path name: product description: 'Product UUID' example: soluta required: true schema: type: string /api/product-requests: get: summary: 'List product requests' operationId: listProductRequests description: 'List all product requests' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 20630e51-c7ae-377c-ba0c-ca664cd1274e code: null name: 'Illo ipsa sed et.' description: 'Porro neque eaque dignissimos est enim reprehenderit. Qui possimus illum autem quia fugit. In impedit iusto accusantium aspernatur dolores quis sit soluta. Nobis aliquid aut error est.' work: id: a0fe5a57-5a49-4337-b288-937e7172066a name: 'Renato Madeira Saraiva' user: id: a0fe5a57-5cdf-4563-b38b-5ecd98f8c5a0 name: 'Prof. Rey Aufderhar IV' status: id: a0fe5a57-5f5f-4cb1-ad63-794d98f13fe3 description: 'Verônica Jimenes' color: '#c0b5d9' text_color: '#8fa7fc' priority: high priority_label: Alta needed_at: null approved_at: null rejection_reason: null created_at: null updated_at: null - id: 55c749c7-e931-3b47-8608-9ecb1cf53df0 code: null name: 'Ut ut ad.' description: null work: id: a0fe5a57-62c2-409d-a4da-a23628b215cd name: 'Sr. Sebastião Delgado Sobrinho' user: id: a0fe5a57-6535-4cce-aa57-9cee8de41e48 name: 'Mr. Louie Hoppe' status: id: a0fe5a57-66e2-4db2-bb44-97ca44cd3da0 description: 'Srta. Agustina Carmona' color: '#3e3cbe' text_color: '#0f6e16' priority: urgent priority_label: Urgente needed_at: null approved_at: null rejection_reason: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 20630e51-c7ae-377c-ba0c-ca664cd1274e code: null name: 'Illo ipsa sed et.' description: 'Porro neque eaque dignissimos est enim reprehenderit. Qui possimus illum autem quia fugit. In impedit iusto accusantium aspernatur dolores quis sit soluta. Nobis aliquid aut error est.' work: id: a0fe5a57-5a49-4337-b288-937e7172066a name: 'Renato Madeira Saraiva' user: id: a0fe5a57-5cdf-4563-b38b-5ecd98f8c5a0 name: 'Prof. Rey Aufderhar IV' status: id: a0fe5a57-5f5f-4cb1-ad63-794d98f13fe3 description: 'Verônica Jimenes' color: '#c0b5d9' text_color: '#8fa7fc' priority: high priority_label: Alta needed_at: null approved_at: null rejection_reason: null created_at: null updated_at: null - id: 55c749c7-e931-3b47-8608-9ecb1cf53df0 code: null name: 'Ut ut ad.' description: null work: id: a0fe5a57-62c2-409d-a4da-a23628b215cd name: 'Sr. Sebastião Delgado Sobrinho' user: id: a0fe5a57-6535-4cce-aa57-9cee8de41e48 name: 'Mr. Louie Hoppe' status: id: a0fe5a57-66e2-4db2-bb44-97ca44cd3da0 description: 'Srta. Agustina Carmona' color: '#3e3cbe' text_color: '#0f6e16' priority: urgent priority_label: Urgente needed_at: null approved_at: null rejection_reason: null created_at: null updated_at: null items: type: object properties: id: type: string example: 20630e51-c7ae-377c-ba0c-ca664cd1274e code: type: string example: null name: type: string example: 'Illo ipsa sed et.' description: type: string example: 'Porro neque eaque dignissimos est enim reprehenderit. Qui possimus illum autem quia fugit. In impedit iusto accusantium aspernatur dolores quis sit soluta. Nobis aliquid aut error est.' work: type: object properties: id: type: string example: a0fe5a57-5a49-4337-b288-937e7172066a name: type: string example: 'Renato Madeira Saraiva' user: type: object properties: id: type: string example: a0fe5a57-5cdf-4563-b38b-5ecd98f8c5a0 name: type: string example: 'Prof. Rey Aufderhar IV' status: type: object properties: id: type: string example: a0fe5a57-5f5f-4cb1-ad63-794d98f13fe3 description: type: string example: 'Verônica Jimenes' color: type: string example: '#c0b5d9' text_color: type: string example: '#8fa7fc' priority: type: string example: high priority_label: type: string example: Alta needed_at: type: string example: null approved_at: type: string example: null rejection_reason: type: string example: null created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Product Requests' requestBody: required: false content: application/json: schema: type: object properties: sort_by: type: string description: 'Sort by.' example: 'Example Sort by' nullable: true sort_desc: type: boolean description: 'Sort desc.' example: false nullable: true page: type: integer description: 'Page. O campo value deve ser pelo menos 1.' example: 1 nullable: true per_page: type: integer description: 'Per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 1 nullable: true q: type: string description: Busca. example: 'Example Q' nullable: true work_id: type: string description: 'Obra. The uuid of an existing record in the works table.' example: 40370f0d-e85e-30a1-866a-73edf97049e5 nullable: true work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: 4399a48a-90b9-3095-b867-0947576d04a5 nullable: true user_id: type: string description: 'Usuário. The uuid of an existing record in the users table.' example: aa2de154-55b0-385c-a5bc-ee80acc3b43e nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: c8215ceb-ada3-3d4b-9c41-c7d3e184ef2f nullable: true priority: type: string description: Prioridade. example: 'Example Priority' enum: - low - medium - high - urgent nullable: true needed_at_from: type: string description: 'Data de necessidade inicial. O campo value deve ser uma data válida.' example: 'Example Needed at from' nullable: true needed_at_to: type: string description: 'Data de necessidade final. O campo value deve ser uma data válida.' example: 'Example Needed at to' nullable: true responsible_id: type: string description: 'Responsável. The uuid of an existing record in the users table.' example: ec28ae5f-afc6-3695-9cf7-8e86ff6f777f nullable: true post: summary: 'Create product request' operationId: createProductRequest description: 'Create a new product request' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Requests' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' nullable: true description: type: string description: Descrição. example: 'Example Description' nullable: true work_id: type: string description: 'Obra. The uuid of an existing record in the works table.' example: 8c5c512f-5912-38ea-8506-fe549afa82a7 work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: b2dbb2da-69e0-3ae6-8c19-a2b89f1eb103 nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: c47c7c49-9cb0-3e32-8031-5962f3100877 nullable: true priority: type: string description: Prioridade. example: 'Example Priority' enum: - low - medium - high - urgent needed_at: type: string description: 'Data de necessidade. O campo value deve ser uma data válida.' example: 'Example Needed at' nullable: true items: type: array description: Itens. example: - null - null items: type: object properties: product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 5945d16a-78b9-3850-b348-3eac634f8abf quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Items * observation' nullable: true required: - product_id - quantity required: - work_id '/api/product-requests/{productRequest}': get: summary: 'Show product request' operationId: showProductRequest description: 'Show a product request' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: f3bbef15-f355-31d3-8325-fbbc670d0452 code: null name: 'Libero eaque quia eum.' description: 'In delectus et ipsa molestiae qui molestiae. Dolorem pariatur error quam rerum quisquam. Id voluptas debitis excepturi architecto facilis in est. Labore accusantium aut quo quo molestiae nisi natus.' work: id: a0fe5a57-6db8-49a5-96d9-876b1425b9bd name: 'Dr. Pedro da Silva Alves Neto' user: id: a0fe5a57-7050-44e1-a952-fbdb90e8f9d9 name: 'Prof. Nickolas Treutel III' status: id: a0fe5a57-71eb-4bd2-bbdb-709d6a2ff558 description: 'Thaís Aline Madeira' color: '#62cd0b' text_color: '#c5fa37' priority: low priority_label: Baixa needed_at: '2026-02-20' approved_at: null rejection_reason: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: f3bbef15-f355-31d3-8325-fbbc670d0452 code: type: string example: null name: type: string example: 'Libero eaque quia eum.' description: type: string example: 'In delectus et ipsa molestiae qui molestiae. Dolorem pariatur error quam rerum quisquam. Id voluptas debitis excepturi architecto facilis in est. Labore accusantium aut quo quo molestiae nisi natus.' work: type: object properties: id: type: string example: a0fe5a57-6db8-49a5-96d9-876b1425b9bd name: type: string example: 'Dr. Pedro da Silva Alves Neto' user: type: object properties: id: type: string example: a0fe5a57-7050-44e1-a952-fbdb90e8f9d9 name: type: string example: 'Prof. Nickolas Treutel III' status: type: object properties: id: type: string example: a0fe5a57-71eb-4bd2-bbdb-709d6a2ff558 description: type: string example: 'Thaís Aline Madeira' color: type: string example: '#62cd0b' text_color: type: string example: '#c5fa37' priority: type: string example: low priority_label: type: string example: Baixa needed_at: type: string example: '2026-02-20' approved_at: type: string example: null rejection_reason: type: string example: null created_at: type: string example: null updated_at: type: string example: null tags: - 'Product Requests' put: summary: 'Update product request' operationId: updateProductRequest description: 'Update a product request. Can include items to replace all items in the request.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Requests' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' nullable: true description: type: string description: Descrição. example: 'Example Description' nullable: true work_id: type: string description: 'Obra. The uuid of an existing record in the works table.' example: cb2e6eba-b322-35bd-ac55-1dccb7f9e53b work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: 15bb88dc-6138-36a3-9cca-fbea1994f2bf nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: 87497cef-bee9-3c26-bf5b-f36260e66073 priority: type: string description: Prioridade. example: 'Example Priority' enum: - low - medium - high - urgent needed_at: type: string description: 'Data de necessidade. O campo value deve ser uma data válida.' example: 'Example Needed at' nullable: true items: type: array description: Itens. example: - null - null items: type: object properties: id: type: string description: 'ID do Item. The uuid of an existing record in the product_request_items table.' example: 9ed1a899-88a6-3dac-8dd0-041e5bd098af product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 68677d1a-0762-33d2-ad54-9e6303c82ae0 quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Items * observation' nullable: true required: - product_id - quantity delete: summary: 'Delete product request' operationId: deleteProductRequest description: 'Delete a product request' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Product Requests' parameters: - in: path name: productRequest description: 'Product Request UUID' example: maxime required: true schema: type: string '/api/product-requests/{productRequest}/items': get: summary: 'List items' operationId: listItems description: 'List all items from a product request with pagination' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 29904e55-9be0-3c20-b479-e8b08650be5a product: id: a0fe5a57-8d0b-41d4-aa25-fd48656d7107 name: 'Anita Branco' code: PRD-185728 unit: id: a0fe5a57-8be2-48d4-a020-1aa4419dda95 name: 'Sebastião Franco Casanova Jr.' abbreviation: 'Mauro Henrique de Freitas Sobrinho' quantity: 736.6417 quantity_fulfilled: 0 quantity_pending: 736.6417 is_fulfilled: false is_partially_fulfilled: false observation: 'At quo voluptatem et veniam deserunt natus mollitia est.' created_at: null updated_at: null - id: a0d58854-9686-3084-9471-d6dfdb9d68f0 product: id: a0fe5a57-9dc5-48e8-82a8-9c11f97792eb name: 'Sra. Daiane Zambrano Flores' code: PRD-427690 unit: id: a0fe5a57-9c2b-4b32-8133-7fb2b7181268 name: 'Dr. Evandro Queirós' abbreviation: 'Sra. Stephany Simone Valentin Jr.' quantity: 525.3459 quantity_fulfilled: 0 quantity_pending: 525.3459 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 29904e55-9be0-3c20-b479-e8b08650be5a product: id: a0fe5a57-8d0b-41d4-aa25-fd48656d7107 name: 'Anita Branco' code: PRD-185728 unit: id: a0fe5a57-8be2-48d4-a020-1aa4419dda95 name: 'Sebastião Franco Casanova Jr.' abbreviation: 'Mauro Henrique de Freitas Sobrinho' quantity: 736.6417 quantity_fulfilled: 0 quantity_pending: 736.6417 is_fulfilled: false is_partially_fulfilled: false observation: 'At quo voluptatem et veniam deserunt natus mollitia est.' created_at: null updated_at: null - id: a0d58854-9686-3084-9471-d6dfdb9d68f0 product: id: a0fe5a57-9dc5-48e8-82a8-9c11f97792eb name: 'Sra. Daiane Zambrano Flores' code: PRD-427690 unit: id: a0fe5a57-9c2b-4b32-8133-7fb2b7181268 name: 'Dr. Evandro Queirós' abbreviation: 'Sra. Stephany Simone Valentin Jr.' quantity: 525.3459 quantity_fulfilled: 0 quantity_pending: 525.3459 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null items: type: object properties: id: type: string example: 29904e55-9be0-3c20-b479-e8b08650be5a product: type: object properties: id: type: string example: a0fe5a57-8d0b-41d4-aa25-fd48656d7107 name: type: string example: 'Anita Branco' code: type: string example: PRD-185728 unit: type: object properties: id: type: string example: a0fe5a57-8be2-48d4-a020-1aa4419dda95 name: type: string example: 'Sebastião Franco Casanova Jr.' abbreviation: type: string example: 'Mauro Henrique de Freitas Sobrinho' quantity: type: number example: 736.6417 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 736.6417 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: 'At quo voluptatem et veniam deserunt natus mollitia est.' created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Product Requests' requestBody: required: false content: application/json: schema: type: object properties: q: type: string description: Busca. example: 'Example Q' nullable: true per_page: type: integer description: 'Itens por página. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 1 post: summary: 'Add items to request' operationId: addItemsToRequest description: 'Add one or more product items to the request' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: array properties: data: type: string example: array tags: - 'Product Requests' requestBody: required: true content: application/json: schema: type: object properties: items: type: array description: 'Itens. O campo value deve ter pelo menos 1 itens.' example: - null - null items: type: object properties: product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 323c33d9-6f81-3872-b2f9-39314e569391 quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Items * observation' nullable: true required: - product_id - quantity required: - items delete: summary: 'Remove items' operationId: removeItems description: 'Remove one or more product items from the request' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: deleted: integer properties: deleted: type: string example: integer tags: - 'Product Requests' requestBody: required: true content: application/json: schema: type: object properties: items: type: array description: 'Item. The uuid of an existing record in the product_request_items table.' example: - 2451ad32-e7e6-3ead-8bc1-aff4abd50c21 items: type: string required: - items parameters: - in: path name: productRequest description: 'Product Request UUID' example: corporis required: true schema: type: string '/api/product-requests/{productRequest}/approve': post: summary: 'Approve product request' operationId: approveProductRequest description: 'Approve a product request' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Requests' parameters: - in: path name: productRequest description: 'Product Request UUID' example: dolorum required: true schema: type: string '/api/product-requests/{productRequest}/reject': post: summary: 'Reject product request' operationId: rejectProductRequest description: 'Reject a product request with a reason' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Requests' requestBody: required: true content: application/json: schema: type: object properties: reason: type: string description: 'Motivo da rejeição. O campo value não pode ser superior a 1000 caracteres.' example: 'Example Reason' required: - reason parameters: - in: path name: productRequest description: 'Product Request UUID' example: et required: true schema: type: string '/api/product-requests/{productRequest}/sync-items': put: summary: 'Sync items' operationId: syncItems description: 'Replace all items in the request' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Requests' requestBody: required: true content: application/json: schema: type: object properties: items: type: array description: Itens. example: - null - null items: type: object properties: id: type: string description: 'ID do Item. The uuid of an existing record in the product_request_items table.' example: fa21eede-fb2b-39a3-b392-1913f79f10cc product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 85f117eb-3d35-31e3-9fc9-cfd87c2ee23b quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Items * observation' nullable: true required: - product_id - quantity required: - items parameters: - in: path name: productRequest description: 'Product Request UUID' example: repellat required: true schema: type: string /api/products: get: summary: 'List products' operationId: listProducts description: 'List all products' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: Brick required: false schema: type: string description: 'Search query.' example: Brick nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: f3755390-7b1d-371b-9054-53d95ff76e6d name: 'Dr. Tomás Toledo Filho' code: PRD-972111 stock: 241514 product_family: id: a0fe5a55-d5d3-4580-8ed2-f9b8072a17ea name: 'Sr. Elias Fábio Deverso' product_brand: id: a0fe5a55-d8e8-4444-acaa-302e4566583e name: 'Lavínia Olívia Balestero Sobrinho' unit: id: a0fe5a55-db7d-4b2d-85f4-bd19a5679b98 name: 'Sra. Cristiana Zamana Valentin Sobrinho' abbreviation: 'Dr. Luciano Duarte Chaves Jr.' image: id: null url: null description: 'Ea accusamus praesentium qui aperiam.' created_at: null updated_at: null - id: e8637b3c-644c-3c83-90a1-7c02d032b4b6 name: 'Dr. Késia Ferreira Sobrinho' code: PRD-669103 stock: 32 product_family: id: a0fe5a55-dfa6-41ba-b523-ab7086d1b75f name: 'Wesley Flores Fernandes' product_brand: id: a0fe5a55-e146-4014-99bc-0cc8ecadb10a name: 'Dr. Regina Gabi Casanova' unit: id: a0fe5a55-e2f1-4ca1-acf7-2ccabacf37f1 name: 'Dr. Giovana Uchoa Marés' abbreviation: 'Afonso Santiago Gil Jr.' image: id: null url: null description: 'Et voluptate eveniet ullam et temporibus iure aut.' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: f3755390-7b1d-371b-9054-53d95ff76e6d name: 'Dr. Tomás Toledo Filho' code: PRD-972111 stock: 241514 product_family: id: a0fe5a55-d5d3-4580-8ed2-f9b8072a17ea name: 'Sr. Elias Fábio Deverso' product_brand: id: a0fe5a55-d8e8-4444-acaa-302e4566583e name: 'Lavínia Olívia Balestero Sobrinho' unit: id: a0fe5a55-db7d-4b2d-85f4-bd19a5679b98 name: 'Sra. Cristiana Zamana Valentin Sobrinho' abbreviation: 'Dr. Luciano Duarte Chaves Jr.' image: id: null url: null description: 'Ea accusamus praesentium qui aperiam.' created_at: null updated_at: null - id: e8637b3c-644c-3c83-90a1-7c02d032b4b6 name: 'Dr. Késia Ferreira Sobrinho' code: PRD-669103 stock: 32 product_family: id: a0fe5a55-dfa6-41ba-b523-ab7086d1b75f name: 'Wesley Flores Fernandes' product_brand: id: a0fe5a55-e146-4014-99bc-0cc8ecadb10a name: 'Dr. Regina Gabi Casanova' unit: id: a0fe5a55-e2f1-4ca1-acf7-2ccabacf37f1 name: 'Dr. Giovana Uchoa Marés' abbreviation: 'Afonso Santiago Gil Jr.' image: id: null url: null description: 'Et voluptate eveniet ullam et temporibus iure aut.' created_at: null updated_at: null items: type: object properties: id: type: string example: f3755390-7b1d-371b-9054-53d95ff76e6d name: type: string example: 'Dr. Tomás Toledo Filho' code: type: string example: PRD-972111 stock: type: integer example: 241514 product_family: type: object properties: id: type: string example: a0fe5a55-d5d3-4580-8ed2-f9b8072a17ea name: type: string example: 'Sr. Elias Fábio Deverso' product_brand: type: object properties: id: type: string example: a0fe5a55-d8e8-4444-acaa-302e4566583e name: type: string example: 'Lavínia Olívia Balestero Sobrinho' unit: type: object properties: id: type: string example: a0fe5a55-db7d-4b2d-85f4-bd19a5679b98 name: type: string example: 'Sra. Cristiana Zamana Valentin Sobrinho' abbreviation: type: string example: 'Dr. Luciano Duarte Chaves Jr.' image: type: object properties: id: type: string example: null url: type: string example: null description: type: string example: 'Ea accusamus praesentium qui aperiam.' created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Products post: summary: 'Create product' operationId: createProduct description: 'Create a new product' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Products requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' product_family_id: type: string description: 'Família do Produto. The uuid of an existing record in the product_families table.' example: 12eec4c5-c6c9-3e3b-a650-4f517910f924 product_brand_id: type: string description: 'Marca do Produto. The uuid of an existing record in the product_brands table.' example: 9f94f1c4-512c-3b13-ba4d-d357055ae699 unit_id: type: string description: 'Unidade. The uuid of an existing record in the units table.' example: b6f67c33-7960-3d54-be91-262ed741f720 description: type: string description: Descrição. example: 'Example Description' nullable: true stock: type: number description: 'Estoque. O campo value deve ser pelo menos 0.' example: 1.0 required: - name - product_family_id - product_brand_id - unit_id - stock '/api/products/{id}': get: summary: 'Show product' operationId: showProduct description: 'Show a product' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 09f758fb-0b57-3932-b58c-2650680430d2 name: 'Ivan Neves Neto' code: PRD-822709 stock: 583 product_family: id: a0fe5a55-ea0d-490a-90c4-448b86b93d73 name: 'Franco Queirós Sobrinho' product_brand: id: a0fe5a55-ebf8-4eae-899d-15c4b3dce46e name: 'Dr. Jean Santos Jr.' unit: id: a0fe5a55-edd8-4ade-b4f4-1eda3e333f42 name: 'Milene de Souza Reis Sobrinho' abbreviation: 'André Urias Dominato Jr.' image: id: null url: null description: 'Iusto necessitatibus non aut.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 09f758fb-0b57-3932-b58c-2650680430d2 name: type: string example: 'Ivan Neves Neto' code: type: string example: PRD-822709 stock: type: integer example: 583 product_family: type: object properties: id: type: string example: a0fe5a55-ea0d-490a-90c4-448b86b93d73 name: type: string example: 'Franco Queirós Sobrinho' product_brand: type: object properties: id: type: string example: a0fe5a55-ebf8-4eae-899d-15c4b3dce46e name: type: string example: 'Dr. Jean Santos Jr.' unit: type: object properties: id: type: string example: a0fe5a55-edd8-4ade-b4f4-1eda3e333f42 name: type: string example: 'Milene de Souza Reis Sobrinho' abbreviation: type: string example: 'André Urias Dominato Jr.' image: type: object properties: id: type: string example: null url: type: string example: null description: type: string example: 'Iusto necessitatibus non aut.' created_at: type: string example: null updated_at: type: string example: null tags: - Products put: summary: 'Update product ' operationId: updateProduct description: 'Update a product ' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Products requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' product_family_id: type: string description: 'Família do Produto. The uuid of an existing record in the product_families table.' example: 0f7de137-2ea1-3361-a352-e04002bf2171 product_brand_id: type: string description: 'Marca do Produto. The uuid of an existing record in the product_brands table.' example: 8641c926-40d4-3b79-951a-2cd0e7bee75e unit_id: type: string description: 'Unidade. The uuid of an existing record in the units table.' example: 2ef93c8e-7b87-3a92-8da7-b8b14b1a620e stock: type: number description: 'Estoque. O campo value deve ser pelo menos 0.' example: 1.0 description: type: string description: Descrição. example: 'Example Description' nullable: true parameters: - in: path name: id description: 'The ID of the product.' example: 1 required: true schema: type: integer - in: path name: product description: 'Product UUID' example: cupiditate required: true schema: type: string '/api/products/{product}': delete: summary: 'Delete product' operationId: deleteProduct description: 'Delete a product' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Products parameters: - in: path name: product description: 'Product UUID' example: quia required: true schema: type: string /api/sectors: get: summary: 'List sectors' operationId: listSectors description: 'List all sectors' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: Tecnologia required: false schema: type: string description: 'Search query.' example: Tecnologia nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 52adea07-df0b-3a74-9618-fedeae3738e5 name: 'sint recusandae' slug: null description: 'Vero consequatur et atque possimus. Voluptas ipsa eum alias repellat nemo est. Voluptatem sapiente molestiae et beatae officia ut.' abbreviation: rsb created_at: null updated_at: null - id: 32a5681e-eb79-3460-aa11-fd776b236d16 name: 'quo occaecati' slug: null description: 'Voluptatum nihil non perferendis vero ex cum qui. Ea nihil et labore cumque expedita consequatur itaque. Qui sed nisi delectus veniam et.' abbreviation: gdw created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 52adea07-df0b-3a74-9618-fedeae3738e5 name: 'sint recusandae' slug: null description: 'Vero consequatur et atque possimus. Voluptas ipsa eum alias repellat nemo est. Voluptatem sapiente molestiae et beatae officia ut.' abbreviation: rsb created_at: null updated_at: null - id: 32a5681e-eb79-3460-aa11-fd776b236d16 name: 'quo occaecati' slug: null description: 'Voluptatum nihil non perferendis vero ex cum qui. Ea nihil et labore cumque expedita consequatur itaque. Qui sed nisi delectus veniam et.' abbreviation: gdw created_at: null updated_at: null items: type: object properties: id: type: string example: 52adea07-df0b-3a74-9618-fedeae3738e5 name: type: string example: 'sint recusandae' slug: type: string example: null description: type: string example: 'Vero consequatur et atque possimus. Voluptas ipsa eum alias repellat nemo est. Voluptatem sapiente molestiae et beatae officia ut.' abbreviation: type: string example: rsb created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Sectors post: summary: 'Create sector' operationId: createSector description: 'Create a new sector' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Sectors requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' slug: type: string description: 'Slug. O campo value não pode ser superior a 255 caracteres.' example: 'Example Slug' description: type: string description: Descrição. example: 'Example Description' nullable: true abbreviation: type: string description: 'Abreviação. O campo value não pode ser superior a 10 caracteres.' example: 'Example Abbreviation' nullable: true image: type: object description: Imagem. example: - example1 - example2 properties: path: type: string description: 'Caminho da imagem. O campo value não pode ser superior a 255 caracteres.' example: 'Example Image path' nullable: true url: type: string description: 'URL da imagem. Must be a valid URL.' example: 'https://example.com' nullable: true name: type: string description: 'Nome da imagem. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' nullable: true size: type: string description: 'Tamanho da imagem. O campo value não pode ser superior a 50 caracteres.' example: 'Example Image size' nullable: true extension: type: string description: 'Extensão da imagem. O campo value não pode ser superior a 10 caracteres.' example: 'Example Image extension' nullable: true nullable: true required: - name '/api/sectors/{id}': get: summary: 'Get sector' operationId: getSector description: 'Get a sector' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 471268b0-9723-3d70-b311-d882e7ddce31 name: 'nostrum iusto' slug: null description: null abbreviation: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 471268b0-9723-3d70-b311-d882e7ddce31 name: type: string example: 'nostrum iusto' slug: type: string example: null description: type: string example: null abbreviation: type: string example: null created_at: type: string example: null updated_at: type: string example: null tags: - Sectors put: summary: 'Update sector' operationId: updateSector description: 'Update a sector' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Sectors requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' slug: type: string description: 'Slug. O campo value não pode ser superior a 255 caracteres.' example: 'Example Slug' description: type: string description: Descrição. example: 'Example Description' nullable: true abbreviation: type: string description: 'Abreviação. O campo value não pode ser superior a 10 caracteres.' example: 'Example Abbreviation' nullable: true image: type: object description: Imagem. example: - example1 - example2 properties: path: type: string description: 'Caminho da imagem. O campo value não pode ser superior a 255 caracteres.' example: 'Example Image path' nullable: true url: type: string description: 'URL da imagem. Must be a valid URL.' example: 'https://example.com' nullable: true name: type: string description: 'Nome da imagem. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' nullable: true size: type: string description: 'Tamanho da imagem. O campo value não pode ser superior a 50 caracteres.' example: 'Example Image size' nullable: true extension: type: string description: 'Extensão da imagem. O campo value não pode ser superior a 10 caracteres.' example: 'Example Image extension' nullable: true nullable: true delete: summary: 'Delete sector' operationId: deleteSector description: 'Delete a sector' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Sectors parameters: - in: path name: id description: 'The ID of the sector.' example: 12 required: true schema: type: integer - in: path name: sector description: 'Sector ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/sectors/{sector}/users': get: summary: 'List sector users' operationId: listSectorUsers description: 'List all users assigned to a sector' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 91c03aff-e18c-3960-9c34-8a4907e97350 name: 'Marcel Beier' username: ryann.heaney email: lon.robel@example.org image: id: null url: null sectors: [] roles: [] - id: 4d793472-61e1-3ad0-8aec-4319e4331b8f name: "Dr. Adolphus O'Keefe" username: pdoyle email: fdeckow@example.com image: id: null url: null sectors: [] roles: [] links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 91c03aff-e18c-3960-9c34-8a4907e97350 name: 'Marcel Beier' username: ryann.heaney email: lon.robel@example.org image: id: null url: null sectors: [] roles: [] - id: 4d793472-61e1-3ad0-8aec-4319e4331b8f name: "Dr. Adolphus O'Keefe" username: pdoyle email: fdeckow@example.com image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: 91c03aff-e18c-3960-9c34-8a4907e97350 name: type: string example: 'Marcel Beier' username: type: string example: ryann.heaney email: type: string example: lon.robel@example.org image: type: object properties: id: type: string example: null url: type: string example: null sectors: type: array example: [] roles: type: array example: [] links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Sectors parameters: - in: path name: sector description: 'Sector UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/sectors/{sector}/users/attach': post: summary: 'Attach users to sector' operationId: attachUsersToSector description: 'Attach users to a sector without removing existing ones. Expects an array of user UUIDs in the "users" field.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Users attached successfully' properties: message: type: string example: 'Users attached successfully' tags: - Sectors requestBody: required: false content: application/json: schema: type: object properties: users: type: array description: 'UUID do usuário. The uuid of an existing record in the users table.' example: - c6a2cbbb-3904-3621-8988-a1d31b58cf9e items: type: string parameters: - in: path name: sector description: 'Sector UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/sectors/{sector}/users/detach': post: summary: 'Detach users from sector' operationId: detachUsersFromSector description: 'Remove specific users from a sector. Expects an array of user UUIDs in the "users" field.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Users detached successfully' properties: message: type: string example: 'Users detached successfully' tags: - Sectors requestBody: required: false content: application/json: schema: type: object properties: users: type: array description: 'UUID do usuário. The uuid of an existing record in the users table.' example: - c8a9ee18-296c-3547-9238-e87a10f6d499 items: type: string parameters: - in: path name: sector description: 'Sector UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/sectors/{sector}/users/sync': post: summary: 'Sync sector users' operationId: syncSectorUsers description: 'Replace all sector users with the provided list. Expects an array of user UUIDs in the "users" field.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Users synchronized successfully' properties: message: type: string example: 'Users synchronized successfully' tags: - Sectors requestBody: required: false content: application/json: schema: type: object properties: users: type: array description: 'UUID do usuário. The uuid of an existing record in the users table.' example: - c3a26ac0-edfd-3080-842c-b0c5ab663e78 items: type: string parameters: - in: path name: sector description: 'Sector UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/status-modules: get: summary: 'List status modules' operationId: listStatusModules description: 'List all modules that have status functionality' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - name: 'tempora mollitia' slug: dolorum-est-magnam-a-sed-sint-impedit - name: 'sapiente iure' slug: rerum-est-eos-iste-culpa-neque properties: data: type: array example: - name: 'tempora mollitia' slug: dolorum-est-magnam-a-sed-sint-impedit - name: 'sapiente iure' slug: rerum-est-eos-iste-culpa-neque items: type: object properties: name: type: string example: 'tempora mollitia' slug: type: string example: dolorum-est-magnam-a-sed-sint-impedit tags: - 'Status Modules' /api/statuses: get: summary: 'List statuses' operationId: listStatuses description: 'List all statuses' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: 'Em andamento' required: false schema: type: string description: 'Search query.' example: 'Em andamento' nullable: true - in: query name: module description: 'Filter by module slug. The slug of an existing record in the status_modules table.' example: work required: false schema: type: string description: 'Filter by module slug. The slug of an existing record in the status_modules table.' example: work nullable: true - in: query name: sector_id description: 'Filter by sector UUID. The uuid of an existing record in the sectors table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: false schema: type: string description: 'Filter by sector UUID. The uuid of an existing record in the sectors table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 274386de-38e8-3860-b164-c3171da3b084 description: 'Sr. Nero de Aguiar' abbreviation: quod color: '#a28fa6' text_color: '#a496cf' module: name: 'Solicitação de Produtos' slug: product_request created_at: null updated_at: null - id: 7fcc245a-9685-382e-9d1f-9f64424827fd description: 'Dr. Giovanna Laura Queirós Filho' abbreviation: voluptas color: '#4d4a83' text_color: '#57c2a7' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 274386de-38e8-3860-b164-c3171da3b084 description: 'Sr. Nero de Aguiar' abbreviation: quod color: '#a28fa6' text_color: '#a496cf' module: name: 'Solicitação de Produtos' slug: product_request created_at: null updated_at: null - id: 7fcc245a-9685-382e-9d1f-9f64424827fd description: 'Dr. Giovanna Laura Queirós Filho' abbreviation: voluptas color: '#4d4a83' text_color: '#57c2a7' created_at: null updated_at: null items: type: object properties: id: type: string example: 274386de-38e8-3860-b164-c3171da3b084 description: type: string example: 'Sr. Nero de Aguiar' abbreviation: type: string example: quod color: type: string example: '#a28fa6' text_color: type: string example: '#a496cf' module: type: object properties: name: type: string example: 'Solicitação de Produtos' slug: type: string example: product_request created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Statuses post: summary: 'Create status' operationId: createStatus description: 'Create a new status' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Statuses requestBody: required: true content: application/json: schema: type: object properties: description: type: string description: 'Descrição. O campo value não pode ser superior a 255 caracteres.' example: 'Example Description' abbreviation: type: string description: 'Abreviação. O campo value não pode ser superior a 255 caracteres.' example: 'Example Abbreviation' module: type: string description: Módulo. example: 'Example Module' sector_id: type: string description: 'Setor. The uuid of an existing record in the sectors table.' example: 07e8f149-56cd-3822-83a8-aaf5c272920c color: type: string description: Cor. example: 'Example Color' nullable: true text_color: type: string description: 'Cor do texto.' example: 'Example Text color' nullable: true order: type: integer description: 'Ordem. O campo value deve ser pelo menos 0.' example: 1 nullable: true is_initial: type: boolean description: 'Status inicial.' example: false nullable: true is_final: type: boolean description: 'Status final.' example: false nullable: true required: - description - abbreviation - module - sector_id '/api/statuses/{id}': get: summary: 'Get status' operationId: getStatus description: 'Get a status' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: c7a9b650-6ccd-30fa-bde8-9656fc9db417 description: 'Sr. Christian Ortega Souza' abbreviation: assumenda color: '#563658' text_color: '#9603a7' module: name: 'Solicitação de Produtos' slug: product_request created_at: null updated_at: null properties: data: type: object properties: id: type: string example: c7a9b650-6ccd-30fa-bde8-9656fc9db417 description: type: string example: 'Sr. Christian Ortega Souza' abbreviation: type: string example: assumenda color: type: string example: '#563658' text_color: type: string example: '#9603a7' module: type: object properties: name: type: string example: 'Solicitação de Produtos' slug: type: string example: product_request created_at: type: string example: null updated_at: type: string example: null tags: - Statuses put: summary: 'Update status' operationId: updateStatus description: 'Update a status' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Statuses requestBody: required: false content: application/json: schema: type: object properties: description: type: string description: 'Descrição. O campo value não pode ser superior a 255 caracteres.' example: 'Example Description' abbreviation: type: string description: 'Abreviação. O campo value não pode ser superior a 255 caracteres.' example: 'Example Abbreviation' module: type: string description: Módulo. example: 'Example Module' sector_id: type: string description: 'Setor. The uuid of an existing record in the sectors table.' example: 120fe5a0-fc60-3ed4-8552-ee325eb538bb color: type: string description: Cor. example: 'Example Color' nullable: true text_color: type: string description: 'Cor do texto.' example: 'Example Text color' nullable: true order: type: integer description: 'Ordem. O campo value deve ser pelo menos 0.' example: 1 is_initial: type: boolean description: 'Status inicial.' example: false is_final: type: boolean description: 'Status final.' example: false parameters: - in: path name: id description: 'The ID of the status.' example: 1 required: true schema: type: integer - in: path name: status description: 'Status ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/statuses/{status}': delete: summary: 'Delete status' operationId: deleteStatus description: 'Delete a status' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Statuses parameters: - in: path name: status description: 'Status ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/stocks/available-for-transfer: get: summary: 'List stocks available for transfer' operationId: listStocksAvailableForTransfer description: 'Returns a list of stock items from other works that have the specified product available for transfer' parameters: - in: query name: product_id description: 'Product UUID to search for. O campo value deve ser um UUID válido. The uuid of an existing record in the products table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string description: 'Product UUID to search for. O campo value deve ser um UUID válido. The uuid of an existing record in the products table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 - in: query name: exclude_work_id description: 'Work UUID to exclude from results (usually the requesting work). O campo value deve ser um UUID válido. The uuid of an existing record in the works table.' example: 019556e7-2e9f-777c-a177-30bbf0646c33 required: false schema: type: string description: 'Work UUID to exclude from results (usually the requesting work). O campo value deve ser um UUID válido. The uuid of an existing record in the works table.' example: 019556e7-2e9f-777c-a177-30bbf0646c33 nullable: true - in: query name: min_quantity description: 'Minimum quantity available. O campo value deve ser pelo menos 0.0001.' example: 1.0 required: false schema: type: number description: 'Minimum quantity available. O campo value deve ser pelo menos 0.0001.' example: 1.0 nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: cd71d7bb-09ec-30df-8d51-17742e327657 quantity: 947.4738 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 524f02ae-2058-3933-9802-43cd02be0fce quantity: 132.8627 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null properties: data: type: array example: - id: cd71d7bb-09ec-30df-8d51-17742e327657 quantity: 947.4738 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 524f02ae-2058-3933-9802-43cd02be0fce quantity: 132.8627 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null items: type: object properties: id: type: string example: cd71d7bb-09ec-30df-8d51-17742e327657 quantity: type: number example: 947.4738 min_quantity: type: string example: null max_quantity: type: string example: null below_minimum: type: boolean example: false above_maximum: type: boolean example: false created_at: type: string example: null updated_at: type: string example: null tags: - Stock /api/stocks: get: summary: 'List stocks' operationId: listStocks description: 'Returns a paginated list of stocks' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 10 required: false schema: type: integer description: 'Number of items per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 10 - in: query name: q description: 'Search by stock name. O campo value não pode ser superior a 255 caracteres.' example: 'Main Stock' required: false schema: type: string description: 'Search by stock name. O campo value não pode ser superior a 255 caracteres.' example: 'Main Stock' nullable: true - in: query name: module description: 'Filter by module type (e.g., work, customer). O campo value não pode ser superior a 100 caracteres.' example: work required: false schema: type: string description: 'Filter by module type (e.g., work, customer). O campo value não pode ser superior a 100 caracteres.' example: work nullable: true - in: query name: is_active description: 'Filter by active status.' example: true required: false schema: type: boolean description: 'Filter by active status.' example: true nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 643dbd85-a7a3-3788-b3ae-37f4682779f7 name: 'Estoque Rodrigues Ltda.' module: work is_active: true is_main: false created_at: null updated_at: null - id: 5ca7293c-125f-39ca-9269-7eced22525ee name: 'Estoque Soto Comercial Ltda.' module: work is_active: true is_main: false created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 643dbd85-a7a3-3788-b3ae-37f4682779f7 name: 'Estoque Rodrigues Ltda.' module: work is_active: true is_main: false created_at: null updated_at: null - id: 5ca7293c-125f-39ca-9269-7eced22525ee name: 'Estoque Soto Comercial Ltda.' module: work is_active: true is_main: false created_at: null updated_at: null items: type: object properties: id: type: string example: 643dbd85-a7a3-3788-b3ae-37f4682779f7 name: type: string example: 'Estoque Rodrigues Ltda.' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Stock post: summary: 'Create stock' operationId: createStock description: 'Creates a new stock linked to a module' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: e63fe2d4-7738-3e98-8858-e4df1bbfa30d name: 'Estoque Grego Ltda.' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: e63fe2d4-7738-3e98-8858-e4df1bbfa30d name: type: string example: 'Estoque Grego Ltda.' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null updated_at: type: string example: null tags: - Stock requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' module: type: string description: 'módulo. O campo value não pode ser superior a 255 caracteres.' example: 'Example Module' id: type: string description: identificador. example: 'Example Id' is_active: type: boolean description: ativo. example: false required: - name - module - id /api/stocks/main: get: summary: 'Get main stock' operationId: getMainStock description: 'Returns the main stock' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: a853b31e-e7c1-3644-bccd-5284f32a8192 name: 'Estoque Santana e Domingues' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: a853b31e-e7c1-3644-bccd-5284f32a8192 name: type: string example: 'Estoque Santana e Domingues' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null updated_at: type: string example: null tags: - Stock '/api/stocks/{id}': get: summary: 'Show stock' operationId: showStock description: 'Returns details of a specific stock' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 34e368ff-ae92-355e-8401-9f2dc807d05b name: 'Estoque Balestero-Godói' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 34e368ff-ae92-355e-8401-9f2dc807d05b name: type: string example: 'Estoque Balestero-Godói' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null updated_at: type: string example: null tags: - Stock put: summary: 'Update stock' operationId: updateStock description: 'Updates an existing stock' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: aac07f0d-55d2-31cd-9957-c83394f11822 name: 'Estoque Rezende-Ferminiano' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: aac07f0d-55d2-31cd-9957-c83394f11822 name: type: string example: 'Estoque Rezende-Ferminiano' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null updated_at: type: string example: null tags: - Stock requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' is_active: type: boolean description: ativo. example: false delete: summary: 'Delete stock' operationId: deleteStock description: 'Removes a stock (soft delete)' parameters: [] responses: { } tags: - Stock parameters: - in: path name: id description: 'The ID of the stock.' example: 1 required: true schema: type: integer - in: path name: stock description: 'Stock UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/stocks/{stock}/items': get: summary: 'List stock items' operationId: listStockItems description: 'Returns a paginated list of items/products in a stock' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 10 required: false schema: type: integer description: 'Number of items per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 10 - in: query name: q description: 'Search by product name. O campo value não pode ser superior a 255 caracteres.' example: Cement required: false schema: type: string description: 'Search by product name. O campo value não pode ser superior a 255 caracteres.' example: Cement nullable: true - in: query name: below_minimum description: 'Filter items below minimum quantity.' example: true required: false schema: type: boolean description: 'Filter items below minimum quantity.' example: true nullable: true - in: query name: above_maximum description: 'Filter items above maximum quantity.' example: false required: false schema: type: boolean description: 'Filter items above maximum quantity.' example: false nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: debbc399-9a6b-3527-9af0-8c5372245e14 quantity: 481.3322 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: de91186a-9764-36be-aae8-c5c8e9dc9a8f quantity: 19.303 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: debbc399-9a6b-3527-9af0-8c5372245e14 quantity: 481.3322 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: de91186a-9764-36be-aae8-c5c8e9dc9a8f quantity: 19.303 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null items: type: object properties: id: type: string example: debbc399-9a6b-3527-9af0-8c5372245e14 quantity: type: number example: 481.3322 min_quantity: type: string example: null max_quantity: type: string example: null below_minimum: type: boolean example: false above_maximum: type: boolean example: false created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Stock parameters: - in: path name: stock description: 'Stock UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/stocks/{stock_id}/items/{id}': patch: summary: 'Update stock item' operationId: updateStockItem description: 'Updates min/max quantity thresholds for a stock item' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: f6bf0986-8f3c-3cfd-b7f1-9ef44b32653e quantity: 597.109 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: f6bf0986-8f3c-3cfd-b7f1-9ef44b32653e quantity: type: number example: 597.109 min_quantity: type: string example: null max_quantity: type: string example: null below_minimum: type: boolean example: false above_maximum: type: boolean example: false created_at: type: string example: null updated_at: type: string example: null tags: - Stock requestBody: required: false content: application/json: schema: type: object properties: min_quantity: type: number description: 'Minimum quantity threshold for low stock alert. O campo value deve ser pelo menos 0.' example: 10.0 nullable: true max_quantity: type: number description: 'Maximum quantity threshold for over stock alert. O campo value deve ser pelo menos 0.' example: 100.0 nullable: true parameters: - in: path name: stock_id description: 'The ID of the stock.' example: 1 required: true schema: type: integer - in: path name: id description: 'The ID of the item.' example: dolor required: true schema: type: string - in: path name: stock description: 'Stock UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string - in: path name: item description: 'Stock item UUID' example: 019556e7-3a1b-888d-b288-41ccf0757d43 required: true schema: type: string '/api/stocks/{stock}/summary': get: summary: 'Stock summary' operationId: stockSummary description: 'Returns a summary with totals and alerts for the stock' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: total_products: 15 total_quantity: 1250.5 items_below_minimum: 3 items_above_maximum: 1 properties: data: type: object properties: total_products: type: integer example: 15 total_quantity: type: number example: 1250.5 items_below_minimum: type: integer example: 3 items_above_maximum: type: integer example: 1 tags: - Stock parameters: - in: path name: stock description: 'Stock UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/stocks/{stock_id}/movements': get: summary: 'List movements' operationId: listMovements description: 'Returns a paginated list of movements for a stock' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 10 required: false schema: type: integer description: 'Number of items per page. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 10 - in: query name: type description: 'Filter by movement type (entry, consumption, transfer_in, transfer_out, adjustment_up, adjustment_down). O campo value não pode ser superior a 50 caracteres.' example: entry required: false schema: type: string description: 'Filter by movement type (entry, consumption, transfer_in, transfer_out, adjustment_up, adjustment_down). O campo value não pode ser superior a 50 caracteres.' example: entry nullable: true - in: query name: product_id description: 'Filter by product UUID. O campo value deve ser um UUID válido.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: false schema: type: string description: 'Filter by product UUID. O campo value deve ser um UUID válido.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 nullable: true - in: query name: date_start description: 'Filter movements from this date (YYYY-MM-DD). O campo value deve ser uma data válida.' example: '2024-01-01' required: false schema: type: string description: 'Filter movements from this date (YYYY-MM-DD). O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true - in: query name: date_end description: 'Filter movements until this date (YYYY-MM-DD). O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a date_start.' example: '2024-12-31' required: false schema: type: string description: 'Filter movements until this date (YYYY-MM-DD). O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a date_start.' example: '2024-12-31' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 01205e02-966f-3e5c-a3a4-8ca2e37b56a1 code: MOV-095391 type: 'entrada transferência' type_name: TRANSFER_IN is_entry: true is_exit: false quantity: 29.9644 previous_quantity: 651.5154 new_quantity: 681.4798 reason: null movement_date: '2026-01-16T22:05:56.000000Z' created_at: null - id: ccabef2c-2553-34cd-9f94-0c536fee6b08 code: MOV-015852 type: devolução type_name: RETURN is_entry: true is_exit: false quantity: 66.1574 previous_quantity: 693.3235 new_quantity: 759.4809 reason: null movement_date: '2026-01-30T12:31:02.000000Z' created_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 01205e02-966f-3e5c-a3a4-8ca2e37b56a1 code: MOV-095391 type: 'entrada transferência' type_name: TRANSFER_IN is_entry: true is_exit: false quantity: 29.9644 previous_quantity: 651.5154 new_quantity: 681.4798 reason: null movement_date: '2026-01-16T22:05:56.000000Z' created_at: null - id: ccabef2c-2553-34cd-9f94-0c536fee6b08 code: MOV-015852 type: devolução type_name: RETURN is_entry: true is_exit: false quantity: 66.1574 previous_quantity: 693.3235 new_quantity: 759.4809 reason: null movement_date: '2026-01-30T12:31:02.000000Z' created_at: null items: type: object properties: id: type: string example: 01205e02-966f-3e5c-a3a4-8ca2e37b56a1 code: type: string example: MOV-095391 type: type: string example: 'entrada transferência' type_name: type: string example: TRANSFER_IN is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 29.9644 previous_quantity: type: number example: 651.5154 new_quantity: type: number example: 681.4798 reason: type: string example: null movement_date: type: string example: '2026-01-16T22:05:56.000000Z' created_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Stock Movements' post: summary: 'Create movement' operationId: createMovement description: 'Creates a new entry or exit movement in the stock' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: caf8e5b6-c108-3c47-833d-ee4aba609f1e code: MOV-535089 type: 'ajuste entrada' type_name: ADJUSTMENT_IN is_entry: true is_exit: false quantity: 43.274 previous_quantity: 664.2579 new_quantity: 707.5319 reason: null movement_date: '2026-02-03T16:28:23.000000Z' created_at: null properties: data: type: object properties: id: type: string example: caf8e5b6-c108-3c47-833d-ee4aba609f1e code: type: string example: MOV-535089 type: type: string example: 'ajuste entrada' type_name: type: string example: ADJUSTMENT_IN is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 43.274 previous_quantity: type: number example: 664.2579 new_quantity: type: number example: 707.5319 reason: type: string example: null movement_date: type: string example: '2026-02-03T16:28:23.000000Z' created_at: type: string example: null tags: - 'Stock Movements' requestBody: required: true content: application/json: schema: type: object properties: product_id: type: string description: 'produto. The uuid of an existing record in the products table.' example: f46e5198-f7a7-34b1-8e1f-d7ba446c1fb2 type: type: string description: 'tipo de movimentação.' example: 'Example Type' enum: - compra - produção - devolução - consumo - venda - perda - vencido - alocação quantity: type: number description: quantidade. example: 1.0 reason: type: string description: 'motivo. O campo value não pode ser superior a 500 caracteres.' example: 'Example Reason' nullable: true reference_type: type: string description: 'tipo de referência. O campo value não pode ser superior a 255 caracteres.' example: 'Example Reference type' nullable: true reference_id: type: integer description: referência. example: 1 nullable: true movement_date: type: string description: 'data da movimentação. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true required: - product_id - type - quantity parameters: - in: path name: stock_id description: 'The ID of the stock.' example: 1 required: true schema: type: integer - in: path name: stock description: 'Stock UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/stocks/{stock}/movements/transfer': post: summary: 'Transfer between stocks' operationId: transferBetweenStocks description: 'Transfers products from one stock to another' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: 187a8459-b960-37d8-9136-4e555b5ff77c code: MOV-565344 type: consumo type_name: CONSUMPTION is_entry: false is_exit: true quantity: 50.2305 previous_quantity: 509.8281 new_quantity: 459.5976 reason: 'Repellendus veniam et cupiditate illum odit rerum ut ratione.' movement_date: '2026-01-19T08:12:56.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 187a8459-b960-37d8-9136-4e555b5ff77c code: type: string example: MOV-565344 type: type: string example: consumo type_name: type: string example: CONSUMPTION is_entry: type: boolean example: false is_exit: type: boolean example: true quantity: type: number example: 50.2305 previous_quantity: type: number example: 509.8281 new_quantity: type: number example: 459.5976 reason: type: string example: 'Repellendus veniam et cupiditate illum odit rerum ut ratione.' movement_date: type: string example: '2026-01-19T08:12:56.000000Z' created_at: type: string example: null tags: - 'Stock Movements' requestBody: required: true content: application/json: schema: type: object properties: product_id: type: string description: 'produto. The uuid of an existing record in the products table.' example: 4b21876e-41c2-3a28-af15-6b0d53d3e7c7 destination_stock_id: type: string description: 'estoque de destino. The value and stock must be different. The uuid of an existing record in the stocks table.' example: bc50e127-3de5-31c5-98d0-d0ef5eb456fc quantity: type: number description: quantidade. example: 1.0 reason: type: string description: 'motivo. O campo value não pode ser superior a 500 caracteres.' example: 'Example Reason' nullable: true movement_date: type: string description: 'data da movimentação. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true required: - product_id - destination_stock_id - quantity parameters: - in: path name: stock description: 'Source stock UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/stocks/{stock}/movements/inventory': post: summary: 'Inventory adjustment' operationId: inventoryAdjustment description: 'Performs inventory adjustment to correct stock quantity' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: d4c00d1c-98cf-3898-abce-3c62458e1d38 code: MOV-514503 type: devolução type_name: RETURN is_entry: true is_exit: false quantity: 38.0588 previous_quantity: 981.2712 new_quantity: 1019.33 reason: null movement_date: '2026-01-29T21:32:42.000000Z' created_at: null properties: data: type: object properties: id: type: string example: d4c00d1c-98cf-3898-abce-3c62458e1d38 code: type: string example: MOV-514503 type: type: string example: devolução type_name: type: string example: RETURN is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 38.0588 previous_quantity: type: number example: 981.2712 new_quantity: type: number example: 1019.33 reason: type: string example: null movement_date: type: string example: '2026-01-29T21:32:42.000000Z' created_at: type: string example: null tags: - 'Stock Movements' requestBody: required: true content: application/json: schema: type: object properties: product_id: type: string description: 'produto. The uuid of an existing record in the products table.' example: f21d10f3-39f7-33d3-95ff-a181b087534f new_quantity: type: number description: 'nova quantidade.' example: 1.0 reason: type: string description: 'motivo. O campo value não pode ser superior a 500 caracteres.' example: 'Example Reason' nullable: true movement_date: type: string description: 'data da movimentação. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true required: - product_id - new_quantity parameters: - in: path name: stock description: 'Stock UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/stock-movements/purchase: post: summary: 'Purchase entry' operationId: purchaseEntry description: 'Registers a purchase entry directly into the main stock' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: 5802dadf-c858-39ae-89dd-6a69f3ed7aa7 code: MOV-372576 type: vencido type_name: EXPIRED is_entry: false is_exit: true quantity: 4.2351 previous_quantity: 798.392 new_quantity: 794.1569 reason: 'Sint culpa at vero repellat dolorum minus.' movement_date: '2026-02-03T05:16:57.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 5802dadf-c858-39ae-89dd-6a69f3ed7aa7 code: type: string example: MOV-372576 type: type: string example: vencido type_name: type: string example: EXPIRED is_entry: type: boolean example: false is_exit: type: boolean example: true quantity: type: number example: 4.2351 previous_quantity: type: number example: 798.392 new_quantity: type: number example: 794.1569 reason: type: string example: 'Sint culpa at vero repellat dolorum minus.' movement_date: type: string example: '2026-02-03T05:16:57.000000Z' created_at: type: string example: null tags: - 'Stock Movements' requestBody: required: true content: application/json: schema: type: object properties: product_id: type: string description: 'produto. The uuid of an existing record in the products table.' example: 75ec5a04-c97c-36f8-a8de-f65bb13fe6e0 quantity: type: number description: 'quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 reason: type: string description: 'motivo. O campo value não pode ser superior a 500 caracteres.' example: 'Example Reason' nullable: true movement_date: type: string description: 'data do movimento. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true required: - product_id - quantity '/api/stock-movements/{movement}': get: summary: 'Show movement' operationId: showMovement description: 'Returns details of a specific movement' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 5fcbcf91-1c4e-3f0c-8452-f9b87d6a83b8 code: MOV-055278 type: consumo type_name: CONSUMPTION is_entry: false is_exit: true quantity: 31.1777 previous_quantity: 117.4917 new_quantity: 86.314 reason: 'Voluptatem repellendus cupiditate soluta qui.' movement_date: '2026-01-30T02:06:07.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 5fcbcf91-1c4e-3f0c-8452-f9b87d6a83b8 code: type: string example: MOV-055278 type: type: string example: consumo type_name: type: string example: CONSUMPTION is_entry: type: boolean example: false is_exit: type: boolean example: true quantity: type: number example: 31.1777 previous_quantity: type: number example: 117.4917 new_quantity: type: number example: 86.314 reason: type: string example: 'Voluptatem repellendus cupiditate soluta qui.' movement_date: type: string example: '2026-01-30T02:06:07.000000Z' created_at: type: string example: null tags: - 'Stock Movements' parameters: - in: path name: movement description: 'Movement UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/suppliers: get: summary: 'List suppliers' operationId: listSuppliers description: 'List all suppliers' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: 'Supplier name' required: false schema: type: string description: 'Search query.' example: 'Supplier name' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 9c4b0dff-23f2-3828-b32c-3eaa0fc65ea3 name: 'Sr. Martinho Urias' email: uchoa.livia@example.org phone: '(47) 2039-4368' document: 68.415.649/0001-07 type: pf responsible: 'Luis Alves' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null - id: e343bf64-0cb8-3b6d-ba40-73848ab7202b name: 'Michael Santiago' email: enzo30@example.org phone: '(87) 4201-8558' document: 92.492.129/0001-82 type: pf responsible: 'Clarice Heloise Marques Neto' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 9c4b0dff-23f2-3828-b32c-3eaa0fc65ea3 name: 'Sr. Martinho Urias' email: uchoa.livia@example.org phone: '(47) 2039-4368' document: 68.415.649/0001-07 type: pf responsible: 'Luis Alves' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null - id: e343bf64-0cb8-3b6d-ba40-73848ab7202b name: 'Michael Santiago' email: enzo30@example.org phone: '(87) 4201-8558' document: 92.492.129/0001-82 type: pf responsible: 'Clarice Heloise Marques Neto' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null items: type: object properties: id: type: string example: 9c4b0dff-23f2-3828-b32c-3eaa0fc65ea3 name: type: string example: 'Sr. Martinho Urias' email: type: string example: uchoa.livia@example.org phone: type: string example: '(47) 2039-4368' document: type: string example: 68.415.649/0001-07 type: type: string example: pf responsible: type: string example: 'Luis Alves' image: type: object properties: id: type: string example: null url: type: string example: null address: type: object properties: street: type: string example: null number: type: string example: null complement: type: string example: null neighborhood: type: string example: null city: type: string example: null state: type: string example: null zip_code: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Suppliers post: summary: 'Create supplier' operationId: createSupplier description: 'Create a new supplier' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Suppliers requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' email: type: string description: 'E-mail. O campo value deve ser um endereço de e-mail válido.' example: user@example.com phone: type: string description: Telefone. example: '(11) 99999-9999' document: type: string description: CPF/CNPJ. example: 'Example Document' type: type: string description: Tipo. example: 'Example Type' enum: - pf - pj responsible: type: string description: Responsável. example: 'Example Responsible' nullable: true image: type: object description: Imagem. example: - example1 - example2 properties: path: type: string description: 'Caminho da imagem. This field is required when image is present.' example: 'Example Image path' name: type: string description: 'Nome da imagem.' example: 'Example Name' nullable: true extension: type: string description: 'Extensão da imagem.' example: 'Example Image extension' nullable: true size: type: string description: 'Tamanho da imagem.' example: 'Example Image size' nullable: true address: type: object description: Endereço. example: - example1 - example2 properties: street: type: string description: Rua. example: 'Example Address street' number: type: string description: Número. example: 'Example Address number' complement: type: string description: Complemento. example: 'Example Address complement' neighborhood: type: string description: Bairro. example: 'Example Address neighborhood' city: type: string description: Cidade. example: 'Example Address city' state: type: string description: Estado. example: 'Example Address state' zip_code: type: string description: CEP. example: 'Example Address zip code' required: - street - number - neighborhood - city - state - zip_code required: - name - document - type '/api/suppliers/{id}': get: summary: 'Get supplier' operationId: getSupplier description: 'Get a supplier' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 0c1768fe-3f23-32b8-bb44-4427cde0bb0f name: 'Dr. Dayana Saraiva Cervantes' email: dpaz@example.com phone: '(73) 4947-1233' document: 20.792.315/0001-26 type: pj responsible: 'Violeta Emanuelly Romero Jr.' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null properties: data: type: object properties: id: type: string example: 0c1768fe-3f23-32b8-bb44-4427cde0bb0f name: type: string example: 'Dr. Dayana Saraiva Cervantes' email: type: string example: dpaz@example.com phone: type: string example: '(73) 4947-1233' document: type: string example: 20.792.315/0001-26 type: type: string example: pj responsible: type: string example: 'Violeta Emanuelly Romero Jr.' image: type: object properties: id: type: string example: null url: type: string example: null address: type: object properties: street: type: string example: null number: type: string example: null complement: type: string example: null neighborhood: type: string example: null city: type: string example: null state: type: string example: null zip_code: type: string example: null tags: - Suppliers put: summary: 'Update supplier' operationId: updateSupplier description: 'Update a supplier' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Suppliers requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' email: type: string description: 'E-mail. O campo value deve ser um endereço de e-mail válido.' example: user@example.com phone: type: string description: Telefone. example: '(11) 99999-9999' document: type: string description: CPF/CNPJ. example: 'Example Document' type: type: string description: Tipo. example: 'Example Type' enum: - pf - pj responsible: type: string description: Responsável. example: 'Example Responsible' nullable: true image: type: object description: Imagem. example: - example1 - example2 properties: path: type: string description: 'Caminho da imagem. This field is required when image is present.' example: 'Example Image path' name: type: string description: 'Nome da imagem.' example: 'Example Name' nullable: true extension: type: string description: 'Extensão da imagem.' example: 'Example Image extension' nullable: true size: type: string description: 'Tamanho da imagem.' example: 'Example Image size' nullable: true address: type: object description: Endereço. example: - example1 - example2 properties: street: type: string description: Rua. example: 'Example Address street' number: type: string description: Número. example: 'Example Address number' complement: type: string description: Complemento. example: 'Example Address complement' neighborhood: type: string description: Bairro. example: 'Example Address neighborhood' city: type: string description: Cidade. example: 'Example Address city' state: type: string description: Estado. example: 'Example Address state' zip_code: type: string description: CEP. example: 'Example Address zip code' parameters: - in: path name: id description: 'The ID of the supplier.' example: 19 required: true schema: type: integer - in: path name: supplier description: 'Supplier ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/suppliers/{supplier}': delete: summary: 'Delete supplier' operationId: deleteSupplier description: 'Delete a supplier' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Suppliers parameters: - in: path name: supplier description: 'Supplier ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/system-types: get: summary: 'System Types' operationId: systemTypes description: 'Get the system types' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: bankAccountTypes: key: value fileTypes: key: value legalEntityTypes: key: value transactionTypes: key: value properties: data: type: object properties: bankAccountTypes: type: object properties: key: type: string example: value fileTypes: type: object properties: key: type: string example: value legalEntityTypes: type: object properties: key: type: string example: value transactionTypes: type: object properties: key: type: string example: value tags: - 'System Types' /api/transaction-categories: get: summary: 'List transaction categories' operationId: listTransactionCategories description: 'List all transaction categories' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: Salary required: false schema: type: string description: 'Search query.' example: Salary nullable: true - in: query name: type description: 'Transaction type.' example: entrada required: false schema: type: string description: 'Transaction type.' example: entrada enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 9d34afd9-7f7c-31c9-bd3c-16ab03b20b8e name: 'Filipe Godói Sobrinho' description: 'Dolores et vero et autem esse. Consequuntur assumenda dolores deleniti voluptatum qui magnam. Esse quod dolor nisi magnam. Corrupti repudiandae eaque praesentium tempore nisi fugit.' type: ajuste - id: 3e43b349-262a-3626-8efb-61aaaaf7f551 name: 'Dr. Carlos Marcos Mascarenhas Neto' description: 'Dolorem accusantium aut perferendis nulla sapiente. Autem est minima omnis distinctio voluptate similique aut. Est alias dolorem voluptas illum.' type: pagamento links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 9d34afd9-7f7c-31c9-bd3c-16ab03b20b8e name: 'Filipe Godói Sobrinho' description: 'Dolores et vero et autem esse. Consequuntur assumenda dolores deleniti voluptatum qui magnam. Esse quod dolor nisi magnam. Corrupti repudiandae eaque praesentium tempore nisi fugit.' type: ajuste - id: 3e43b349-262a-3626-8efb-61aaaaf7f551 name: 'Dr. Carlos Marcos Mascarenhas Neto' description: 'Dolorem accusantium aut perferendis nulla sapiente. Autem est minima omnis distinctio voluptate similique aut. Est alias dolorem voluptas illum.' type: pagamento items: type: object properties: id: type: string example: 9d34afd9-7f7c-31c9-bd3c-16ab03b20b8e name: type: string example: 'Filipe Godói Sobrinho' description: type: string example: 'Dolores et vero et autem esse. Consequuntur assumenda dolores deleniti voluptatum qui magnam. Esse quod dolor nisi magnam. Corrupti repudiandae eaque praesentium tempore nisi fugit.' type: type: string example: ajuste links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Transaction Categories' post: summary: 'Create transaction category' operationId: createTransactionCategory description: 'Create a new transaction category' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Transaction Categories' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Name. example: 'Example Name' description: type: string description: Description. example: 'Example Description' type: type: string description: Type. example: 'Example Type' enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste required: - name - type '/api/transaction-categories/{transactionCategory}': get: summary: 'Show transaction category' operationId: showTransactionCategory description: 'Show a transaction category' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 786dabd6-f172-3524-b396-63a9a3daf646 name: 'Dr. Silvana Neves' description: 'Iusto et reprehenderit esse. Sit vero natus sed dolorem ullam. Itaque quasi accusamus laborum id voluptas ea.' type: saque properties: data: type: object properties: id: type: string example: 786dabd6-f172-3524-b396-63a9a3daf646 name: type: string example: 'Dr. Silvana Neves' description: type: string example: 'Iusto et reprehenderit esse. Sit vero natus sed dolorem ullam. Itaque quasi accusamus laborum id voluptas ea.' type: type: string example: saque tags: - 'Transaction Categories' put: summary: 'Update transaction category' operationId: updateTransactionCategory description: 'Update a transaction category' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Transaction Categories' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Name. example: 'Example Name' description: type: string description: Description. example: 'Example Description' type: type: string description: Type. example: 'Example Type' enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste required: - name - type delete: summary: 'Delete transaction category' operationId: deleteTransactionCategory description: 'Delete a transaction category' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Transaction Categories' parameters: - in: path name: transactionCategory description: 'Transaction category UUID' example: impedit required: true schema: type: string /api/units: get: summary: 'List units' operationId: listUnits description: 'List all units' parameters: - in: query name: q description: '' example: Structure required: false schema: type: string description: '' example: Structure nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: d700315a-3313-3a7f-b004-ec77c8e3ee06 name: 'Sandro Máximo Santiago' abbreviation: 'Roberto Zamana' description: 'Vitae quo odit beatae ad.' created_at: null updated_at: null - id: b5326cf0-eb0d-3071-ad5d-c3111b0c78d0 name: 'Srta. Viviane Yohanna Jimenes' abbreviation: 'Dr. Thomas William Rico Sobrinho' description: 'Iure ut sit sit laborum.' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: d700315a-3313-3a7f-b004-ec77c8e3ee06 name: 'Sandro Máximo Santiago' abbreviation: 'Roberto Zamana' description: 'Vitae quo odit beatae ad.' created_at: null updated_at: null - id: b5326cf0-eb0d-3071-ad5d-c3111b0c78d0 name: 'Srta. Viviane Yohanna Jimenes' abbreviation: 'Dr. Thomas William Rico Sobrinho' description: 'Iure ut sit sit laborum.' created_at: null updated_at: null items: type: object properties: id: type: string example: d700315a-3313-3a7f-b004-ec77c8e3ee06 name: type: string example: 'Sandro Máximo Santiago' abbreviation: type: string example: 'Roberto Zamana' description: type: string example: 'Vitae quo odit beatae ad.' created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Units post: summary: 'Create unit' operationId: createUnit description: 'Create a new unit' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Units requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nome da unidade.' example: 'Example Name' abbreviation: type: string description: Abreviação. example: 'Example Abbreviation' description: type: string description: Descrição. example: 'Example Description' nullable: true required: - name - abbreviation '/api/units/{id}': get: summary: 'Show unit' operationId: showUnit description: 'Show a unit' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: e773c4f1-f155-3142-ae07-6759f59f1c1a name: 'Dr. Francisco Murilo Fidalgo' abbreviation: 'Dr. Carlos Bittencourt' description: 'Natus aut voluptatum cumque.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: e773c4f1-f155-3142-ae07-6759f59f1c1a name: type: string example: 'Dr. Francisco Murilo Fidalgo' abbreviation: type: string example: 'Dr. Carlos Bittencourt' description: type: string example: 'Natus aut voluptatum cumque.' created_at: type: string example: null updated_at: type: string example: null tags: - Units put: summary: 'Update unit' operationId: updateUnit description: 'Update a unit' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Units requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nome da unidade.' example: 'Example Name' abbreviation: type: string description: Abreviação. example: 'Example Abbreviation' description: type: string description: Descrição. example: 'Example Description' nullable: true required: - name - abbreviation parameters: - in: path name: id description: 'The ID of the unit.' example: 1 required: true schema: type: integer - in: path name: unit description: 'Unit UUID' example: sed required: true schema: type: string '/api/units/{unit}': delete: summary: 'Delete unit' operationId: deleteUnit description: 'Delete a unit' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Units parameters: - in: path name: unit description: 'Unit UUID' example: et required: true schema: type: string /api/users: get: summary: 'List users' operationId: listUsers description: 'List all users' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query by name or email.' example: 'John Doe' required: false schema: type: string description: 'Search query by name or email.' example: 'John Doe' nullable: true - in: query name: sector_id description: 'Filter by sector UUID. The uuid of an existing record in the sectors table.' example: 123e4567-e89b-12d3-a456-426614174000 required: false schema: type: string description: 'Filter by sector UUID. The uuid of an existing record in the sectors table.' example: 123e4567-e89b-12d3-a456-426614174000 nullable: true - in: query name: role description: 'Filter by role name. The name of an existing record in the roles table.' example: ADMIN required: false schema: type: string description: 'Filter by role name. The name of an existing record in the roles table.' example: ADMIN nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: b293640e-81dd-3023-a80c-b1c4273cf2ff name: 'Aimee Johns IV' username: edwin.howell email: buckridge.maude@example.com image: id: null url: null sectors: [] roles: [] - id: e126642e-bab0-3b09-a6ff-45d12240a013 name: 'Charles Carroll' username: nschmitt email: ggoyette@example.net image: id: null url: null sectors: [] roles: [] links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: b293640e-81dd-3023-a80c-b1c4273cf2ff name: 'Aimee Johns IV' username: edwin.howell email: buckridge.maude@example.com image: id: null url: null sectors: [] roles: [] - id: e126642e-bab0-3b09-a6ff-45d12240a013 name: 'Charles Carroll' username: nschmitt email: ggoyette@example.net image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: b293640e-81dd-3023-a80c-b1c4273cf2ff name: type: string example: 'Aimee Johns IV' username: type: string example: edwin.howell email: type: string example: buckridge.maude@example.com image: type: object properties: id: type: string example: null url: type: string example: null sectors: type: array example: [] roles: type: array example: [] links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Users post: summary: 'Create user' operationId: createUser description: 'Create a new user' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Users requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' email: type: string description: 'E-mail. O campo value deve ser um endereço de e-mail válido.' example: user@example.com username: type: string description: Usuário. example: mayert.rahul image: type: object description: Imagem. example: - example1 - example2 properties: path: type: string description: 'Caminho da imagem. This field is required when image is present.' example: 'Example Image path' name: type: string description: 'Nome da imagem.' example: 'Example Name' nullable: true extension: type: string description: 'Extensão da imagem.' example: 'Example Image extension' nullable: true size: type: string description: 'Tamanho da imagem.' example: 'Example Image size' nullable: true sectors: type: array description: 'UUID do setor. The uuid of an existing record in the sectors table.' example: - ec6625cc-15c4-35a3-b912-c0c282013ce0 items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - 56c5b20a-5817-31c5-9160-cb92779adf41 items: type: string required: - name - email - username '/api/users/{id}': get: summary: 'Get user' operationId: getUser description: 'Get a user' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: e2581fad-98a4-3cbd-a03e-a1a49c72eea8 name: 'Eladio Howe III' username: rice.johnathon email: spinka.vincenzo@example.net image: id: null url: null sectors: [] roles: [] properties: data: type: object properties: id: type: string example: e2581fad-98a4-3cbd-a03e-a1a49c72eea8 name: type: string example: 'Eladio Howe III' username: type: string example: rice.johnathon email: type: string example: spinka.vincenzo@example.net image: type: object properties: id: type: string example: null url: type: string example: null sectors: type: array example: [] roles: type: array example: [] tags: - Users put: summary: 'Update user' operationId: updateUser description: 'Update a user' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Users requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: Nome. example: 'Example Name' email: type: string description: 'E-mail. O campo value deve ser um endereço de e-mail válido.' example: user@example.com username: type: string description: Usuário. example: hermann73 password: type: string description: Password. example: password123 image: type: object description: Imagem. example: - example1 - example2 properties: path: type: string description: 'Caminho da imagem. This field is required when image is present.' example: 'Example Image path' name: type: string description: 'Nome da imagem.' example: 'Example Name' nullable: true extension: type: string description: 'Extensão da imagem.' example: 'Example Image extension' nullable: true size: type: string description: 'Tamanho da imagem.' example: 'Example Image size' nullable: true sectors: type: array description: 'UUID do setor. The uuid of an existing record in the sectors table.' example: - f33cfc36-2b67-386c-8c9e-f7b1d1fee6f3 items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - 2f0d20ea-d3b9-3ea5-aea6-9b94f6dab936 items: type: string parameters: - in: path name: id description: 'The ID of the user.' example: 1 required: true schema: type: integer '/api/users/{user}': delete: summary: 'Delete user' operationId: deleteUser description: 'Delete a user' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Users parameters: - in: path name: user description: 'The user.' example: 1 required: true schema: type: integer '/api/users/{user}/password-reset': put: summary: 'Reset user password' operationId: resetUserPassword description: 'Reset a user password' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Password reset successfully to foobaar' properties: message: type: string example: 'Password reset successfully to foobaar' tags: - Users parameters: - in: path name: user description: 'User ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/users/{user}/permissions': put: summary: 'Attach permissions to user' operationId: attachPermissionsToUser description: 'Attach direct permissions to a user' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Permissions attached successfully' properties: message: type: string example: 'Permissions attached successfully' tags: - Users requestBody: required: false content: application/json: schema: type: object properties: permissions: type: array description: 'UUID da permissão. The uuid of an existing record in the permissions table.' example: - 7663c44d-1fd9-30cf-8779-8e4c9430e72f items: type: string get: summary: 'List user direct permissions' operationId: listUserDirectPermissions description: 'List direct permissions associated with a user' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: null name: sit display_name: 'Tempore aut totam atque.' - id: null name: itaque display_name: 'Aut non commodi hic quia maxime corporis est.' properties: data: type: array example: - id: null name: sit display_name: 'Tempore aut totam atque.' - id: null name: itaque display_name: 'Aut non commodi hic quia maxime corporis est.' items: type: object properties: id: type: string example: null name: type: string example: sit display_name: type: string example: 'Tempore aut totam atque.' tags: - Users parameters: - in: path name: user description: 'The user.' example: 1 required: true schema: type: integer /api/work-locations: get: summary: 'List work locations' operationId: listWorkLocations description: 'List all work locations' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: Tecnologia required: false schema: type: string description: 'Search query.' example: Tecnologia nullable: true - in: query name: work description: 'Work. The uuid of an existing record in the works table.' example: uuid required: false schema: type: string description: 'Work. The uuid of an existing record in the works table.' example: uuid nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 2478ebb0-4dee-3431-8a1f-3790f3b4cdad description: 'Sra. Jaqueline Espinoza Jr.' work: id: null name: null documents: [] created_at: null updated_at: null - id: 86927304-1d30-3b35-a2a6-6fb0e35819c8 description: 'Srta. Analu de Oliveira' work: id: null name: null documents: [] created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 2478ebb0-4dee-3431-8a1f-3790f3b4cdad description: 'Sra. Jaqueline Espinoza Jr.' work: id: null name: null documents: [] created_at: null updated_at: null - id: 86927304-1d30-3b35-a2a6-6fb0e35819c8 description: 'Srta. Analu de Oliveira' work: id: null name: null documents: [] created_at: null updated_at: null items: type: object properties: id: type: string example: 2478ebb0-4dee-3431-8a1f-3790f3b4cdad description: type: string example: 'Sra. Jaqueline Espinoza Jr.' work: type: object properties: id: type: string example: null name: type: string example: null documents: type: array example: [] created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Work Locations' post: summary: 'Create work location' operationId: createWorkLocation description: 'Create a new work location' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Work Locations' requestBody: required: true content: application/json: schema: type: object properties: description: type: string description: 'Descrição. O campo value não pode ser superior a 255 caracteres.' example: 'Example Description' work_id: type: string description: 'Obra. The uuid of an existing record in the works table.' example: 0ff4280b-e9eb-36c4-b000-997a6a14c983 required: - description - work_id '/api/work-locations/{workLocation}': get: summary: 'Get work location' operationId: getWorkLocation description: 'Get a work location' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 9c14fe53-3698-3aad-a4c8-f40eaa17d14a description: 'Eliane de Aguiar Prado' work: id: null name: null documents: [] created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 9c14fe53-3698-3aad-a4c8-f40eaa17d14a description: type: string example: 'Eliane de Aguiar Prado' work: type: object properties: id: type: string example: null name: type: string example: null documents: type: array example: [] created_at: type: string example: null updated_at: type: string example: null tags: - 'Work Locations' put: summary: 'Update work location' operationId: updateWorkLocation description: 'Update a work location' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Work Locations' requestBody: required: false content: application/json: schema: type: object properties: description: type: string description: 'Descrição. O campo value não pode ser superior a 255 caracteres.' example: 'Example Description' work_id: type: string description: 'Obra. The uuid of an existing record in the works table.' example: ad92ef61-f1c6-3d9c-8b97-c3356f1c9e7f delete: summary: 'Delete work location' operationId: deleteWorkLocation description: 'Delete a work location' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - 'Work Locations' parameters: - in: path name: workLocation description: 'Work Location ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/works: get: summary: 'List works' operationId: listWorks description: 'List all works' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: Tecnologia required: false schema: type: string description: 'Search query.' example: Tecnologia nullable: true - in: query name: customer_id description: 'Filter by customer UUID. The uuid of an existing record in the customers table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: false schema: type: string description: 'Filter by customer UUID. The uuid of an existing record in the customers table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 nullable: true - in: query name: status_id description: 'Filter by status UUID. The uuid of an existing record in the statuses table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: false schema: type: string description: 'Filter by status UUID. The uuid of an existing record in the statuses table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 nullable: true - in: query name: responsible_id description: 'Filter by responsible user UUID. Only works if user has "work view-all" permission. The uuid of an existing record in the users table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: false schema: type: string description: 'Filter by responsible user UUID. Only works if user has "work view-all" permission. The uuid of an existing record in the users table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 nullable: true - in: query name: no_responsible description: 'Filter works without any responsible users.' example: true required: false schema: type: boolean description: 'Filter works without any responsible users.' example: true nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: ea2b88cc-acbb-33df-847c-44d638ccc411 name: 'Jaqueline Arruda Rosa' address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents: [] locations: [] product_quantity_lists_count: 0 product_quantity_list_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '2004-08-14 06:12:59.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null - id: 346e7656-ce76-34a5-a565-41f709630bfa name: 'Dr. Gian Mendonça Soto' address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents: [] locations: [] product_quantity_lists_count: 0 product_quantity_list_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '1998-08-24 21:10:14.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: ea2b88cc-acbb-33df-847c-44d638ccc411 name: 'Jaqueline Arruda Rosa' address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents: [] locations: [] product_quantity_lists_count: 0 product_quantity_list_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '2004-08-14 06:12:59.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null - id: 346e7656-ce76-34a5-a565-41f709630bfa name: 'Dr. Gian Mendonça Soto' address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents: [] locations: [] product_quantity_lists_count: 0 product_quantity_list_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '1998-08-24 21:10:14.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null items: type: object properties: id: type: string example: ea2b88cc-acbb-33df-847c-44d638ccc411 name: type: string example: 'Jaqueline Arruda Rosa' address: type: object properties: street: type: string example: null number: type: string example: null complement: type: string example: null neighborhood: type: string example: null city: type: string example: null state: type: string example: null zip_code: type: string example: null documents: type: array example: [] locations: type: array example: [] product_quantity_lists_count: type: integer example: 0 product_quantity_list_items_count: type: integer example: 0 documents_count: type: integer example: 0 locations_documents_count: type: integer example: 0 total_documents_count: type: integer example: 0 started_at: type: object properties: date: type: string example: '2004-08-14 06:12:59.000000' timezone_type: type: integer example: 3 timezone: type: string example: America/Sao_Paulo created_at: type: string example: null updated_at: type: string example: null links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Works post: summary: 'Create work' operationId: createWork description: 'Create a new work' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Works requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' customer_id: type: string description: 'Cliente. The uuid of an existing record in the customers table.' example: ff01b03d-4931-32ed-9c34-4eda75d5386e status_id: type: string description: 'Status id. The uuid of an existing record in the statuses table.' example: 50f92aca-7ccd-3028-9f25-2eb8276617d2 started_at: type: string description: 'Início da obra. O campo value deve ser uma data válida.' example: 'Example Started at' nullable: true address: type: object description: Endereço. example: - example1 - example2 properties: street: type: string description: Rua. example: 'Example Address street' number: type: string description: Número. example: 'Example Address number' complement: type: string description: Complemento. example: 'Example Address complement' neighborhood: type: string description: Bairro. example: 'Example Address neighborhood' city: type: string description: Cidade. example: 'Example Address city' state: type: string description: Estado. example: 'Example Address state' zip_code: type: string description: CEP. example: 'Example Address zip code' required: - street - number - neighborhood - city - state - zip_code required: - name - customer_id - status_id - address '/api/works/{id}': get: summary: 'Get work' operationId: getWork description: 'Get a work' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: a591e4af-34cc-3c14-93d7-e4e4fe9b87fb name: 'Sr. Cristiano de Arruda Jr.' address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents: [] locations: [] product_quantity_lists_count: 0 product_quantity_list_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '1986-09-22 21:47:41.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null properties: data: type: object properties: id: type: string example: a591e4af-34cc-3c14-93d7-e4e4fe9b87fb name: type: string example: 'Sr. Cristiano de Arruda Jr.' address: type: object properties: street: type: string example: null number: type: string example: null complement: type: string example: null neighborhood: type: string example: null city: type: string example: null state: type: string example: null zip_code: type: string example: null documents: type: array example: [] locations: type: array example: [] product_quantity_lists_count: type: integer example: 0 product_quantity_list_items_count: type: integer example: 0 documents_count: type: integer example: 0 locations_documents_count: type: integer example: 0 total_documents_count: type: integer example: 0 started_at: type: object properties: date: type: string example: '1986-09-22 21:47:41.000000' timezone_type: type: integer example: 3 timezone: type: string example: America/Sao_Paulo created_at: type: string example: null updated_at: type: string example: null tags: - Works put: summary: 'Update work' operationId: updateWork description: 'Update a work' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - Works requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'Nome. O campo value não pode ser superior a 255 caracteres.' example: 'Example Name' customer_id: type: string description: 'Cliente. The uuid of an existing record in the customers table.' example: 4de3d39b-c310-3e6e-a2b3-4ecbce7a5665 status_id: type: string description: 'Status id. The uuid of an existing record in the statuses table.' example: 0c6123d3-48e4-3121-bc95-18aae49c655d started_at: type: string description: 'Início da obra. O campo value deve ser uma data válida.' example: 'Example Started at' nullable: true address: type: object description: Endereço. example: - example1 - example2 properties: street: type: string description: Rua. example: 'Example Address street' number: type: string description: Número. example: 'Example Address number' complement: type: string description: Complemento. example: 'Example Address complement' neighborhood: type: string description: Bairro. example: 'Example Address neighborhood' city: type: string description: Cidade. example: 'Example Address city' state: type: string description: Estado. example: 'Example Address state' zip_code: type: string description: CEP. example: 'Example Address zip code' delete: summary: 'Delete work' operationId: deleteWork description: 'Delete a work' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Works parameters: - in: path name: id description: 'The ID of the work.' example: 1 required: true schema: type: integer - in: path name: work description: 'Work ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/works/{work}/responsibles': get: summary: 'List work responsibles' operationId: listWorkResponsibles description: 'List all users responsible for a work' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search by name or email.' example: John required: false schema: type: string description: 'Search by name or email.' example: John nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: a97637c1-ecf6-3836-930b-25ddfdbb304c name: 'Dr. Aiyana Emard I' username: mhuels email: adolphus.volkman@example.net image: id: null url: null sectors: [] roles: [] - id: 65b6b00a-0567-3032-b2e7-e9fdf2dc82d7 name: 'Janie Hoeger' username: lucas.skiles email: murazik.jacynthe@example.net image: id: null url: null sectors: [] roles: [] links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: a97637c1-ecf6-3836-930b-25ddfdbb304c name: 'Dr. Aiyana Emard I' username: mhuels email: adolphus.volkman@example.net image: id: null url: null sectors: [] roles: [] - id: 65b6b00a-0567-3032-b2e7-e9fdf2dc82d7 name: 'Janie Hoeger' username: lucas.skiles email: murazik.jacynthe@example.net image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: a97637c1-ecf6-3836-930b-25ddfdbb304c name: type: string example: 'Dr. Aiyana Emard I' username: type: string example: mhuels email: type: string example: adolphus.volkman@example.net image: type: object properties: id: type: string example: null url: type: string example: null sectors: type: array example: [] roles: type: array example: [] links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null next: type: string example: null meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false items: type: object properties: url: type: string example: null label: type: string example: '« Anterior' page: type: string example: null active: type: boolean example: false path: type: string example: / per_page: type: integer example: 10 to: type: integer example: 2 total: type: integer example: 2 tags: - Works parameters: - in: path name: work description: 'Work UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/works/{work}/responsibles/attach': post: summary: 'Attach responsibles to work' operationId: attachResponsiblesToWork description: 'Attach users as responsibles to a work without removing existing ones' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Responsibles attached successfully' properties: message: type: string example: 'Responsibles attached successfully' tags: - Works requestBody: required: false content: application/json: schema: type: object properties: users: type: array description: 'UUID do usuário. The uuid of an existing record in the users table.' example: - e01e6f00-9ac3-32df-844c-8c69bc87f691 items: type: string parameters: - in: path name: work description: 'Work UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/works/{work}/responsibles/detach': post: summary: 'Detach responsibles from work' operationId: detachResponsiblesFromWork description: 'Remove specific users as responsibles from a work' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Responsibles detached successfully' properties: message: type: string example: 'Responsibles detached successfully' tags: - Works requestBody: required: false content: application/json: schema: type: object properties: users: type: array description: 'UUID do usuário. The uuid of an existing record in the users table.' example: - 672a45bd-b937-3a98-aa9e-49ee8eebdb2a items: type: string parameters: - in: path name: work description: 'Work UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/works/{work}/responsibles/sync': post: summary: 'Sync work responsibles' operationId: syncWorkResponsibles description: 'Replace all responsibles of a work with the provided list' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Responsibles synchronized successfully' properties: message: type: string example: 'Responsibles synchronized successfully' tags: - Works requestBody: required: false content: application/json: schema: type: object properties: users: type: array description: 'UUID do usuário. The uuid of an existing record in the users table.' example: - 66b7c2a3-0b95-3603-8305-4b52cc411ebb items: type: string parameters: - in: path name: work description: 'Work UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string