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: Reports description: '' - 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: 04fe0e60-3458-38be-9e4e-367be732c9dd name: repellendus display_name: 'Rerum nesciunt voluptatem consequuntur omnis officia cupiditate aut.' permissions_count: null - id: 0a4ebf81-e2f9-3814-bfed-7a07f24fbe33 name: omnis display_name: 'Est non laboriosam expedita recusandae a.' 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: 04fe0e60-3458-38be-9e4e-367be732c9dd name: repellendus display_name: 'Rerum nesciunt voluptatem consequuntur omnis officia cupiditate aut.' permissions_count: null - id: 0a4ebf81-e2f9-3814-bfed-7a07f24fbe33 name: omnis display_name: 'Est non laboriosam expedita recusandae a.' permissions_count: null items: type: object properties: id: type: string example: 04fe0e60-3458-38be-9e4e-367be732c9dd name: type: string example: repellendus display_name: type: string example: 'Rerum nesciunt voluptatem consequuntur omnis officia cupiditate aut.' 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: - fc086f2f-fe69-33c5-8ad5-08df0c19a2fa 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: - 97eb1d7f-1c11-329e-95af-e005cceefde8 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: 0233ca0a-c817-31e2-aa4e-8384108c2919 name: perferendis display_name: 'Eius qui enim quibusdam odio esse et et optio.' permissions_count: null properties: data: type: object properties: id: type: string example: 0233ca0a-c817-31e2-aa4e-8384108c2919 name: type: string example: perferendis display_name: type: string example: 'Eius qui enim quibusdam odio esse et et optio.' 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: eius display_name: 'Itaque alias amet ut eveniet eius.' - id: null name: laborum display_name: 'Sint quibusdam alias labore ipsa.' properties: data: type: array example: - id: null name: eius display_name: 'Itaque alias amet ut eveniet eius.' - id: null name: laborum display_name: 'Sint quibusdam alias labore ipsa.' items: type: object properties: id: type: string example: null name: type: string example: eius display_name: type: string example: 'Itaque alias amet ut eveniet eius.' 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: esse display_name: 'Commodi est voluptas non.' - id: null name: et display_name: 'Ut neque non qui.' 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: esse display_name: 'Commodi est voluptas non.' - id: null name: et display_name: 'Ut neque non qui.' items: type: object properties: id: type: string example: null name: type: string example: esse display_name: type: string example: 'Commodi est voluptas 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: laudantium display_name: 'Consequatur similique iusto sit quasi suscipit distinctio.' properties: data: type: object properties: id: type: string example: null name: type: string example: laudantium display_name: type: string example: 'Consequatur similique iusto sit quasi suscipit distinctio.' 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: efac3eee-0216-3fe7-9635-283495a1ba9a type: entrada payment_method: boleto amount: 7558.02 due_date: '2026-04-07T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Aut magni quis adipisci et et vel nihil voluptas quia.' 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: molestias field2: 16 field3: true notes: 'Non sequi voluptatem repellat magni.' created_at: null updated_at: null - id: ec149540-9bf5-3d4a-9349-3c8a569a79ba type: entrada payment_method: cheque amount: 4823.68 due_date: '2026-04-17T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Vel commodi sed minima esse rerum eos et maxime nemo.' 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: pariatur field2: 94 field3: true notes: 'Laudantium ab quidem aut commodi rerum culpa ex.' created_at: null updated_at: null properties: data: type: array example: - id: efac3eee-0216-3fe7-9635-283495a1ba9a type: entrada payment_method: boleto amount: 7558.02 due_date: '2026-04-07T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Aut magni quis adipisci et et vel nihil voluptas quia.' 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: molestias field2: 16 field3: true notes: 'Non sequi voluptatem repellat magni.' created_at: null updated_at: null - id: ec149540-9bf5-3d4a-9349-3c8a569a79ba type: entrada payment_method: cheque amount: 4823.68 due_date: '2026-04-17T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Vel commodi sed minima esse rerum eos et maxime nemo.' 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: pariatur field2: 94 field3: true notes: 'Laudantium ab quidem aut commodi rerum culpa ex.' created_at: null updated_at: null items: type: object properties: id: type: string example: efac3eee-0216-3fe7-9635-283495a1ba9a type: type: string example: entrada payment_method: type: string example: boleto amount: type: number example: 7558.02 due_date: type: string example: '2026-04-07T03:00:00.000000Z' status: type: string example: null payment_date: type: string example: null protest_date: type: string example: null paid_amount: type: string example: null interest_amount: type: string example: null penalty_amount: type: string example: null notary_fee_amount: type: string example: null description: type: string example: 'Aut magni quis adipisci et et vel nihil voluptas quia.' 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: molestias field2: type: integer example: 16 field3: type: boolean example: true notes: type: string example: 'Non sequi voluptatem repellat magni.' 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: - eveniet required: true schema: type: array description: 'The uuid of an existing record in the account_payable_receivables table.' example: - eveniet 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/protests/summary: get: summary: 'Get protest summary' operationId: getProtestSummary description: 'Get summary of accounts with protest status' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: to_protest_count: integer protested_count: integer protesting_today_count: integer total_protest_amount: float properties: to_protest_count: type: string example: integer protested_count: type: string example: integer protesting_today_count: type: string example: integer total_protest_amount: type: string example: float tags: - 'Accounts Payable Receivable' /api/accounts-payable-receivable/protests: get: summary: 'List protested accounts' operationId: listProtestedAccounts description: 'List accounts with protest date that are not paid/canceled' 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: - provident required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - provident items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - et required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - et 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 - 'a protestar' - protestado 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: protest_date_start description: 'O campo value deve ser uma data válida.' example: '2026-03-20T13:32:06' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-03-20T13:32:06' nullable: true - in: query name: protest_date_end description: 'O campo value deve ser uma data válida.' example: '2026-03-20T13:32:06' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-03-20T13:32:06' nullable: true - in: query name: has_protest description: '' example: true required: false schema: type: boolean description: '' example: true 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: 26f2822f-58a4-3a17-8ba1-b23b8e470f5c type: saída payment_method: boleto amount: 3044.24 due_date: '2026-04-04T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Qui earum rem unde aut illo ipsa quos repudiandae et corrupti qui officiis.' 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: dolore field2: 34 field3: false notes: 'Et maxime sit dolores consequatur.' created_at: null updated_at: null - id: 2e33835f-009b-3a0c-a8d3-6fea64a83813 type: entrada payment_method: cheque amount: 2011.13 due_date: '2026-04-08T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Quia dolore fuga necessitatibus voluptatem eos quo perferendis beatae dolor.' 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: et field2: 62 field3: false notes: 'Et praesentium a voluptatem nesciunt.' 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: 26f2822f-58a4-3a17-8ba1-b23b8e470f5c type: saída payment_method: boleto amount: 3044.24 due_date: '2026-04-04T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Qui earum rem unde aut illo ipsa quos repudiandae et corrupti qui officiis.' 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: dolore field2: 34 field3: false notes: 'Et maxime sit dolores consequatur.' created_at: null updated_at: null - id: 2e33835f-009b-3a0c-a8d3-6fea64a83813 type: entrada payment_method: cheque amount: 2011.13 due_date: '2026-04-08T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Quia dolore fuga necessitatibus voluptatem eos quo perferendis beatae dolor.' 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: et field2: 62 field3: false notes: 'Et praesentium a voluptatem nesciunt.' created_at: null updated_at: null items: type: object properties: id: type: string example: 26f2822f-58a4-3a17-8ba1-b23b8e470f5c type: type: string example: saída payment_method: type: string example: boleto amount: type: number example: 3044.24 due_date: type: string example: '2026-04-04T03:00:00.000000Z' status: type: string example: null payment_date: type: string example: null protest_date: type: string example: null paid_amount: type: string example: null interest_amount: type: string example: null penalty_amount: type: string example: null notary_fee_amount: type: string example: null description: type: string example: 'Qui earum rem unde aut illo ipsa quos repudiandae et corrupti qui officiis.' 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: dolore field2: type: integer example: 34 field3: type: boolean example: false notes: type: string example: 'Et maxime sit dolores consequatur.' 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' /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: - a required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - a items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - ab required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - ab items: type: string - in: query name: statuses description: '' example: - cancelado required: false schema: type: array description: '' example: - cancelado items: type: string enum: - 'a vencer' - pago - vencido - recebido - cancelado - 'a protestar' - protestado 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: protest_date_start description: 'O campo value deve ser uma data válida.' example: '2026-03-20T13:32:06' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-03-20T13:32:06' nullable: true - in: query name: protest_date_end description: 'O campo value deve ser uma data válida.' example: '2026-03-20T13:32:06' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-03-20T13:32:06' nullable: true - in: query name: has_protest description: '' example: true required: false schema: type: boolean description: '' example: true 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: 0fd17191-b29f-3603-a73d-861ad4c6e239 type: entrada payment_method: cheque amount: 4406.22 due_date: '2026-04-07T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Blanditiis nisi sint quam praesentium corrupti libero.' 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: ratione field2: 41 field3: true notes: 'Et dolor vel iste eaque velit autem.' created_at: null updated_at: null - id: 99134930-6177-30b1-839c-26f3427b49b4 type: entrada payment_method: cheque amount: 2135.56 due_date: '2026-04-05T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Aperiam non rerum inventore aut eos architecto facere voluptas architecto est consectetur.' 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: voluptatibus field2: 31 field3: false notes: 'Iusto possimus qui optio qui quo et.' 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: 0fd17191-b29f-3603-a73d-861ad4c6e239 type: entrada payment_method: cheque amount: 4406.22 due_date: '2026-04-07T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Blanditiis nisi sint quam praesentium corrupti libero.' 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: ratione field2: 41 field3: true notes: 'Et dolor vel iste eaque velit autem.' created_at: null updated_at: null - id: 99134930-6177-30b1-839c-26f3427b49b4 type: entrada payment_method: cheque amount: 2135.56 due_date: '2026-04-05T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Aperiam non rerum inventore aut eos architecto facere voluptas architecto est consectetur.' 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: voluptatibus field2: 31 field3: false notes: 'Iusto possimus qui optio qui quo et.' created_at: null updated_at: null items: type: object properties: id: type: string example: 0fd17191-b29f-3603-a73d-861ad4c6e239 type: type: string example: entrada payment_method: type: string example: cheque amount: type: number example: 4406.22 due_date: type: string example: '2026-04-07T03:00:00.000000Z' status: type: string example: null payment_date: type: string example: null protest_date: type: string example: null paid_amount: type: string example: null interest_amount: type: string example: null penalty_amount: type: string example: null notary_fee_amount: type: string example: null description: type: string example: 'Blanditiis nisi sint quam praesentium corrupti libero.' 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: ratione field2: type: integer example: 41 field3: type: boolean example: true notes: type: string example: 'Et dolor vel iste eaque velit autem.' 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: 79a14056-b1fc-3728-8ace-4d3d68ea52d4 nullable: true customer_id: type: string description: 'Cliente. The uuid of an existing record in the customers table.' example: 70e8a0d6-fa95-3eee-a541-c753e7901ccc nullable: true status: type: string description: Status. example: 'Example Status' enum: - 'a vencer' - pago - vencido - recebido - cancelado - 'a protestar' - protestado protest_date: type: string description: 'Protest date. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a due_date.' example: '2024-01-01' nullable: true bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: 92331447-7791-329b-88ca-fad38d0f754a nullable: true 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}/history': get: summary: 'Get account history' operationId: getAccountHistory description: 'Get the activity log history for an account payable receivable' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Accounts Payable Receivable' parameters: - in: path name: accountPayableReceivable description: '' example: incidunt required: true schema: type: string '/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: 6ac43858-00a0-308a-8327-e294a4af1fed type: saída payment_method: cheque amount: 7692.36 due_date: '2026-04-01T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Nam fuga aperiam voluptatem iste atque porro.' 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: voluptatem field2: 91 field3: false notes: 'Inventore nisi quod cum aut dignissimos omnis et.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 6ac43858-00a0-308a-8327-e294a4af1fed type: type: string example: saída payment_method: type: string example: cheque amount: type: number example: 7692.36 due_date: type: string example: '2026-04-01T03:00:00.000000Z' status: type: string example: null payment_date: type: string example: null protest_date: type: string example: null paid_amount: type: string example: null interest_amount: type: string example: null penalty_amount: type: string example: null notary_fee_amount: type: string example: null description: type: string example: 'Nam fuga aperiam voluptatem iste atque porro.' 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: voluptatem field2: type: integer example: 91 field3: type: boolean example: false notes: type: string example: 'Inventore nisi quod cum aut dignissimos omnis et.' 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: afe8e784-675a-3b37-854d-c40940925934 nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: f5378b9d-a879-3409-a7d3-60d5f37877ff nullable: true status: type: string description: Status. example: 'Example Status' enum: - 'a vencer' - pago - vencido - recebido - cancelado - 'a protestar' - protestado payment_date: type: string description: 'Payment date. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true protest_date: type: string description: 'Protest date. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a due_date.' example: '2024-01-01' nullable: true paid_amount: type: number description: 'Paid amount. O campo value deve ser pelo menos 0.' example: 1.0 nullable: true interest_amount: type: number description: 'Interest amount. O campo value deve ser pelo menos 0.' example: 1.0 nullable: true penalty_amount: type: number description: 'Penalty amount. O campo value deve ser pelo menos 0.' example: 1.0 nullable: true notary_fee_amount: type: number description: 'Notary fee amount. O campo value deve ser pelo menos 0.' example: 1.0 nullable: true bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: 8e924c83-a3d9-3cba-9a97-ec71692bcfee nullable: true 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: quo 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: howell.xavier@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: 817cfd41-d46e-3895-94f4-b3ab67128800 name: 'Lloyd Moore' username: rrolfson email: amelia72@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: 817cfd41-d46e-3895-94f4-b3ab67128800 name: type: string example: 'Lloyd Moore' username: type: string example: rrolfson email: type: string example: amelia72@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: zdeckow 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: - 18992285-194f-36cb-a236-744016a2b3de items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - c0ce4492-0a43-3c1b-aa24-bd66730e2a54 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: xpzoftql 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: debitis 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 - in: query name: is_default description: 'Filter by default account (1 or 0).' example: true required: false schema: type: boolean description: 'Filter by default account (1 or 0).' example: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1f56d76b-7ba4-39c1-9c7d-6258d63eacd6 agency: '8964' account: 1231183-7 type: poupança balance: 1132.03 holder_type: pj alias: consequuntur limit: 3833.96 available_balance: 4965.99 used_limit: 0 is_default: null bank: id: null name: null code: null created_at: null updated_at: null - id: 6674c6f0-11a8-332d-bf9f-6e8be5e216cd agency: '1230' account: 5209009-6 type: poupança balance: 6091.88 holder_type: pj alias: aut limit: 6532.88 available_balance: 12624.76 used_limit: 0 is_default: null 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: 1f56d76b-7ba4-39c1-9c7d-6258d63eacd6 agency: '8964' account: 1231183-7 type: poupança balance: 1132.03 holder_type: pj alias: consequuntur limit: 3833.96 available_balance: 4965.99 used_limit: 0 is_default: null bank: id: null name: null code: null created_at: null updated_at: null - id: 6674c6f0-11a8-332d-bf9f-6e8be5e216cd agency: '1230' account: 5209009-6 type: poupança balance: 6091.88 holder_type: pj alias: aut limit: 6532.88 available_balance: 12624.76 used_limit: 0 is_default: null bank: id: null name: null code: null created_at: null updated_at: null items: type: object properties: id: type: string example: 1f56d76b-7ba4-39c1-9c7d-6258d63eacd6 agency: type: string example: '8964' account: type: string example: 1231183-7 type: type: string example: poupança balance: type: number example: 1132.03 holder_type: type: string example: pj alias: type: string example: consequuntur limit: type: number example: 3833.96 available_balance: type: number example: 4965.99 used_limit: type: integer example: 0 is_default: type: string example: null 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: 9417737-0 bank_id: type: string description: 'Bank id. The uuid of an existing record in the banks table.' example: 1edd7cb5-b5f5-3f0e-83b1-537fec147ab0 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 is_default: type: boolean description: 'Is default.' example: false 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: 7291741-0 bank_id: type: string description: 'Bank id. The uuid of an existing record in the banks table.' example: 1226c3a5-97f4-3b92-988f-be47d6ad7d1a 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 is_default: type: boolean description: 'Is default.' example: false 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: 419c448e-f3be-3955-835e-75dcf1d2981e agency: '5639' account: 1198906-3 type: poupança balance: 7200.26 holder_type: pf alias: et limit: 5246.99 available_balance: 12447.25 used_limit: 0 is_default: null bank: id: null name: null code: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 419c448e-f3be-3955-835e-75dcf1d2981e agency: type: string example: '5639' account: type: string example: 1198906-3 type: type: string example: poupança balance: type: number example: 7200.26 holder_type: type: string example: pf alias: type: string example: et limit: type: number example: 5246.99 available_balance: type: number example: 12447.25 used_limit: type: integer example: 0 is_default: type: string example: null 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: 7 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: f68d1900-7066-3557-ae46-bc117e63cda4 name: Verdara-Lutero code: '862' - id: 9bc9d868-7e9a-310d-966d-6beb1d38ac5d name: 'Matias Comercial Ltda.' code: '888' 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: f68d1900-7066-3557-ae46-bc117e63cda4 name: Verdara-Lutero code: '862' - id: 9bc9d868-7e9a-310d-966d-6beb1d38ac5d name: 'Matias Comercial Ltda.' code: '888' items: type: object properties: id: type: string example: f68d1900-7066-3557-ae46-bc117e63cda4 name: type: string example: Verdara-Lutero code: type: string example: '862' 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: fdac2796-e314-3162-8c5c-8cbf9d4f4fa4 name: Montenegro-Soares code: '975' properties: data: type: object properties: id: type: string example: fdac2796-e314-3162-8c5c-8cbf9d4f4fa4 name: type: string example: Montenegro-Soares code: type: string example: '975' 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: 'Aut impedit aut aperiam dolorem laborum ut.' required: false schema: type: string description: 'Description .' example: 'Aut impedit aut aperiam dolorem laborum ut.' - in: query name: categories description: 'The uuid of an existing record in the transaction_categories table.' example: - vero required: false schema: type: array description: 'The uuid of an existing record in the transaction_categories table.' example: - vero 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: - quis required: false schema: type: array description: 'The uuid of an existing record in the bank_accounts table.' example: - quis items: type: string - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - occaecati required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - occaecati items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - nesciunt required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - nesciunt items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - aut required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - aut 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: 'Repellendus voluptatem quo molestias autem cupiditate ab dignissimos.' required: false schema: type: string description: 'Description .' example: 'Repellendus voluptatem quo molestias autem cupiditate ab dignissimos.' - in: query name: categories description: 'The uuid of an existing record in the transaction_categories table.' example: - temporibus required: false schema: type: array description: 'The uuid of an existing record in the transaction_categories table.' example: - temporibus 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: - corrupti required: false schema: type: array description: 'The uuid of an existing record in the bank_accounts table.' example: - corrupti items: type: string - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - commodi required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - commodi items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - mollitia required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - mollitia items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - saepe required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - saepe items: type: string responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 4c255faa-8b57-334e-b984-7c69af0c3993 code: FC-15654318 type: depósito amount: 1876.15 description: 'Delectus quaerat rerum doloribus est aut excepturi.' transaction_date: '2018-03-13T03:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null - id: 78e0b544-6583-3875-ad7a-b1f13d027393 code: FC-71927808 type: depósito amount: 6818.44 description: 'Saepe nobis quia ut ut quos quos dolor.' transaction_date: '1984-01-02T03: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: 4c255faa-8b57-334e-b984-7c69af0c3993 code: FC-15654318 type: depósito amount: 1876.15 description: 'Delectus quaerat rerum doloribus est aut excepturi.' transaction_date: '2018-03-13T03:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null - id: 78e0b544-6583-3875-ad7a-b1f13d027393 code: FC-71927808 type: depósito amount: 6818.44 description: 'Saepe nobis quia ut ut quos quos dolor.' transaction_date: '1984-01-02T03: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: 4c255faa-8b57-334e-b984-7c69af0c3993 code: type: string example: FC-15654318 type: type: string example: depósito amount: type: number example: 1876.15 description: type: string example: 'Delectus quaerat rerum doloribus est aut excepturi.' transaction_date: type: string example: '2018-03-13T03: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: 9df0c1cf-33ef-33c6-b40b-172aae11362d transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: 3302ef35-55b7-3147-8b2e-33851f338bee bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: c168ffb5-494a-3bf2-a7ad-7d14a937330c nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: 76187b57-b13e-36ce-bf69-6a5aeece02f5 nullable: true supplier_id: type: string description: 'Supplier id. The uuid of an existing record in the suppliers table.' example: bcbd3825-b5c3-39e6-bc0f-cc79c1e7a020 nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: 9f787170-0864-3f8f-8ea7-0da17925a0f8 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: cdc501cf-d53a-3f2a-8522-acd5f94f36ce code: FC-06508504 type: juros amount: -6267.25 description: 'Odit accusantium rerum porro.' transaction_date: '2013-01-21T02: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: cdc501cf-d53a-3f2a-8522-acd5f94f36ce code: type: string example: FC-06508504 type: type: string example: juros amount: type: number example: -6267.25 description: type: string example: 'Odit accusantium rerum porro.' transaction_date: type: string example: '2013-01-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 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: 95d18953-f666-3bf6-83a2-61bf9debde81 transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: e8d1cf19-a007-35b9-9f40-61421a8f0f90 bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: b0694d50-777b-3a98-a115-08da4f18516e nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: 54317664-021f-3192-84a5-5a1249cd3b03 nullable: true supplier_id: type: string description: 'Supplier id. The uuid of an existing record in the suppliers table.' example: eb34bb1a-30a5-3728-b958-21507fe2efd9 nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: 81ea1296-de8b-3e8e-9e32-77219bb14e23 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: 13 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: 9649fb67-6d09-36f5-b710-1100aa5b5768 code: null opened_by: null opened_at: '1988-02-19T21:17:40.000000Z' closed_by: null closed_at: '1993-10-04T03:48:26.000000Z' opening_balance: 6748.54 closing_balance: 35.47 total_income: 0 total_expense: 0 total_balance: 0 status: Fechado created_at: '1973-09-06T03:00:12.000000Z' updated_at: '1988-02-26T08:20:49.000000Z' - id: 14126c1a-e4ff-3635-9f91-f2b12ecbb6f0 code: null opened_by: null opened_at: '2010-01-04T01:23:18.000000Z' closed_by: null closed_at: '1998-04-21T19:37:19.000000Z' opening_balance: 1872.28 closing_balance: 5553.29 total_income: 0 total_expense: 0 total_balance: 0 status: Fechado created_at: '2013-09-19T03:59:55.000000Z' updated_at: '1970-05-17T22:54:40.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: 9649fb67-6d09-36f5-b710-1100aa5b5768 code: null opened_by: null opened_at: '1988-02-19T21:17:40.000000Z' closed_by: null closed_at: '1993-10-04T03:48:26.000000Z' opening_balance: 6748.54 closing_balance: 35.47 total_income: 0 total_expense: 0 total_balance: 0 status: Fechado created_at: '1973-09-06T03:00:12.000000Z' updated_at: '1988-02-26T08:20:49.000000Z' - id: 14126c1a-e4ff-3635-9f91-f2b12ecbb6f0 code: null opened_by: null opened_at: '2010-01-04T01:23:18.000000Z' closed_by: null closed_at: '1998-04-21T19:37:19.000000Z' opening_balance: 1872.28 closing_balance: 5553.29 total_income: 0 total_expense: 0 total_balance: 0 status: Fechado created_at: '2013-09-19T03:59:55.000000Z' updated_at: '1970-05-17T22:54:40.000000Z' items: type: object properties: id: type: string example: 9649fb67-6d09-36f5-b710-1100aa5b5768 code: type: string example: null opened_by: type: string example: null opened_at: type: string example: '1988-02-19T21:17:40.000000Z' closed_by: type: string example: null closed_at: type: string example: '1993-10-04T03:48:26.000000Z' opening_balance: type: number example: 6748.54 closing_balance: type: number example: 35.47 total_income: type: integer example: 0 total_expense: type: integer example: 0 total_balance: type: integer example: 0 status: type: string example: Fechado created_at: type: string example: '1973-09-06T03:00:12.000000Z' updated_at: type: string example: '1988-02-26T08:20:49.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: 7ef51fb0-13a3-3761-9c54-1ec9f1ef5282 code: null opened_by: null opened_at: '1988-06-18T09:22:30.000000Z' closed_by: null closed_at: '1985-08-09T09:40:51.000000Z' opening_balance: 1615.9 closing_balance: 8324.55 total_income: 0 total_expense: 0 total_balance: 0 status: Fechado created_at: '1976-02-02T07:44:39.000000Z' updated_at: '2011-02-21T04:34:54.000000Z' properties: data: type: object properties: id: type: string example: 7ef51fb0-13a3-3761-9c54-1ec9f1ef5282 code: type: string example: null opened_by: type: string example: null opened_at: type: string example: '1988-06-18T09:22:30.000000Z' closed_by: type: string example: null closed_at: type: string example: '1985-08-09T09:40:51.000000Z' opening_balance: type: number example: 1615.9 closing_balance: type: number example: 8324.55 total_income: type: integer example: 0 total_expense: type: integer example: 0 total_balance: type: integer example: 0 status: type: string example: Fechado created_at: type: string example: '1976-02-02T07:44:39.000000Z' updated_at: type: string example: '2011-02-21T04:34:54.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: 11222344-94d4-36c3-a1fc-fb58b78cbd9d 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: 8842ff1a-eb3d-3bb5-bf7e-8d1c9b382da2 code: null opened_by: null opened_at: '2018-07-23T06:32:55.000000Z' closed_by: null closed_at: '2007-04-22T22:21:59.000000Z' opening_balance: 805.93 closing_balance: 5141.83 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '2025-03-05T18:09:14.000000Z' updated_at: '1988-12-17T09:39:39.000000Z' properties: data: type: object properties: id: type: string example: 8842ff1a-eb3d-3bb5-bf7e-8d1c9b382da2 code: type: string example: null opened_by: type: string example: null opened_at: type: string example: '2018-07-23T06:32:55.000000Z' closed_by: type: string example: null closed_at: type: string example: '2007-04-22T22:21:59.000000Z' opening_balance: type: number example: 805.93 closing_balance: type: number example: 5141.83 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: '2025-03-05T18:09:14.000000Z' updated_at: type: string example: '1988-12-17T09:39:39.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: 3de035f2-a494-39bb-8541-70806544356f 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: 6bfa22f1-bb08-3fce-bc95-ad39a911eb4c name: 'Dr. Moisés Meireles Rivera Jr.' email: aragao.david@example.org phone: '(74) 3085-9130' document: 887.788.952-78 type: pf responsible: 'Naiara Adriana Oliveira' 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: b68a6014-8848-3b65-be6b-2ae80064c464 name: 'Sr. Sebastião Caio Souza Neto' email: zmadeira@example.net phone: '(14) 96915-0394' document: 639.397.305-64 type: pj responsible: 'Sr. Giovane Barreto Uchoa Filho' 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: 6bfa22f1-bb08-3fce-bc95-ad39a911eb4c name: 'Dr. Moisés Meireles Rivera Jr.' email: aragao.david@example.org phone: '(74) 3085-9130' document: 887.788.952-78 type: pf responsible: 'Naiara Adriana Oliveira' 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: b68a6014-8848-3b65-be6b-2ae80064c464 name: 'Sr. Sebastião Caio Souza Neto' email: zmadeira@example.net phone: '(14) 96915-0394' document: 639.397.305-64 type: pj responsible: 'Sr. Giovane Barreto Uchoa Filho' 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: 6bfa22f1-bb08-3fce-bc95-ad39a911eb4c name: type: string example: 'Dr. Moisés Meireles Rivera Jr.' email: type: string example: aragao.david@example.org phone: type: string example: '(74) 3085-9130' document: type: string example: 887.788.952-78 type: type: string example: pf responsible: type: string example: 'Naiara Adriana Oliveira' 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: 91a50b1e-0a70-3c9a-8b53-ca43d99f62d5 name: 'Gabrielly Elisa Carmona' email: gil.fabiano@example.com phone: '(96) 94264-2322' document: 374.259.525-30 type: pf responsible: 'Sra. Cynthia Bárbara Barreto 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 properties: data: type: object properties: id: type: string example: 91a50b1e-0a70-3c9a-8b53-ca43d99f62d5 name: type: string example: 'Gabrielly Elisa Carmona' email: type: string example: gil.fabiano@example.com phone: type: string example: '(96) 94264-2322' document: type: string example: 374.259.525-30 type: type: string example: pf responsible: type: string example: 'Sra. Cynthia Bárbara Barreto 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 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: 2ee83f08-1d24-3484-a353-810147049e82 name: 'Lidiane Jaqueline Carvalho' description: 'Reiciendis perferendis eos dolorem quisquam. Rem nihil ut quo. Modi quaerat debitis dolores atque quasi.' module: document - id: ec2377a4-ac63-39ec-bd6f-db40be3105cb name: 'Sr. David Carrara Serna' description: 'Ut et quaerat ad perspiciatis. Esse reiciendis tempore exercitationem voluptate impedit eos sint. Voluptatem odit quaerat in sint quibusdam.' 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: 2ee83f08-1d24-3484-a353-810147049e82 name: 'Lidiane Jaqueline Carvalho' description: 'Reiciendis perferendis eos dolorem quisquam. Rem nihil ut quo. Modi quaerat debitis dolores atque quasi.' module: document - id: ec2377a4-ac63-39ec-bd6f-db40be3105cb name: 'Sr. David Carrara Serna' description: 'Ut et quaerat ad perspiciatis. Esse reiciendis tempore exercitationem voluptate impedit eos sint. Voluptatem odit quaerat in sint quibusdam.' module: document items: type: object properties: id: type: string example: 2ee83f08-1d24-3484-a353-810147049e82 name: type: string example: 'Lidiane Jaqueline Carvalho' description: type: string example: 'Reiciendis perferendis eos dolorem quisquam. Rem nihil ut quo. Modi quaerat debitis dolores atque quasi.' 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: 1c319273-1829-3f5b-a7bc-daebb397e973 name: 'Srta. Jaqueline Stephanie Gil Jr.' description: 'Culpa vero ut voluptate temporibus. Incidunt eius voluptatum reprehenderit aut. Qui voluptate possimus explicabo molestiae. Maxime vitae distinctio libero enim.' module: document properties: data: type: object properties: id: type: string example: 1c319273-1829-3f5b-a7bc-daebb397e973 name: type: string example: 'Srta. Jaqueline Stephanie Gil Jr.' description: type: string example: 'Culpa vero ut voluptate temporibus. Incidunt eius voluptatum reprehenderit aut. Qui voluptate possimus explicabo molestiae. Maxime vitae distinctio libero enim.' 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: soluta 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: - sed required: false schema: type: array description: 'The uuid of an existing record in the document_categories table.' example: - sed 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: provident required: false schema: type: string description: 'Type of the related documentable entity. The type of an existing record in the documentables table.' example: provident nullable: true - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - assumenda required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - assumenda items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - accusamus required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - accusamus items: type: string responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 6fa1f714-1de6-3860-8140-e651450b1a2c name: 'Mirella Deverso Neves Filho' file: id: null url: null extension: null created_at: null updated_at: null - id: d7c75667-1d01-31c7-bac4-3a247ffd6ec6 name: 'Sra. Marília Rico Sobrinho' 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: 6fa1f714-1de6-3860-8140-e651450b1a2c name: 'Mirella Deverso Neves Filho' file: id: null url: null extension: null created_at: null updated_at: null - id: d7c75667-1d01-31c7-bac4-3a247ffd6ec6 name: 'Sra. Marília Rico Sobrinho' file: id: null url: null extension: null created_at: null updated_at: null items: type: object properties: id: type: string example: 6fa1f714-1de6-3860-8140-e651450b1a2c name: type: string example: 'Mirella Deverso Neves Filho' 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: 9786ce23-f005-3ef0-ad71-aa8c8faedd45 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: d410b4d8-717e-3403-a6a9-9e33ae4fdcd1 name: 'Valentin Horácio Mascarenhas' file: id: null url: null extension: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: d410b4d8-717e-3403-a6a9-9e33ae4fdcd1 name: type: string example: 'Valentin Horácio Mascarenhas' 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: 4cff8889-21cb-3c59-8ef9-4c82ce1c1b1c 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: 15 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: a1af44a1-0b8d-4582-aff0-a3aaab866815 name: sit description: null created_at: null updated_at: null - id: bfc32aba-fc9e-4cc4-b1f4-13173f05ae5e name: et 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: a1af44a1-0b8d-4582-aff0-a3aaab866815 name: sit description: null created_at: null updated_at: null - id: bfc32aba-fc9e-4cc4-b1f4-13173f05ae5e name: et description: null created_at: null updated_at: null items: type: object properties: id: type: string example: a1af44a1-0b8d-4582-aff0-a3aaab866815 name: type: string example: sit 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: 37e1b04c-1946-4cc4-9e1e-0b55c218d5fc name: et description: 'Est consequuntur quae voluptates temporibus eos aut.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 37e1b04c-1946-4cc4-9e1e-0b55c218d5fc name: type: string example: et description: type: string example: 'Est consequuntur quae voluptates temporibus eos aut.' 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: tempora 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: 08cc5ae4-7a61-4bdd-a430-b501023590bf name: 'Jonas Jefferson Godói Filho' cpf: 382.030.918-48 rg: null ctps: '588395920' phone: null birthdate: '2021-03-27' email: lucas.vale@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 - id: 75234a07-92fe-44e5-8098-fb2ec797e00b name: 'Joaquin Erik Rosa Neto' cpf: 988.319.431-81 rg: null ctps: null phone: null birthdate: '1997-09-14' email: jmeireles@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 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: 08cc5ae4-7a61-4bdd-a430-b501023590bf name: 'Jonas Jefferson Godói Filho' cpf: 382.030.918-48 rg: null ctps: '588395920' phone: null birthdate: '2021-03-27' email: lucas.vale@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 - id: 75234a07-92fe-44e5-8098-fb2ec797e00b name: 'Joaquin Erik Rosa Neto' cpf: 988.319.431-81 rg: null ctps: null phone: null birthdate: '1997-09-14' email: jmeireles@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 items: type: object properties: id: type: string example: 08cc5ae4-7a61-4bdd-a430-b501023590bf name: type: string example: 'Jonas Jefferson Godói Filho' cpf: type: string example: 382.030.918-48 rg: type: string example: null ctps: type: string example: '588395920' phone: type: string example: null birthdate: type: string example: '2021-03-27' email: type: string example: lucas.vale@example.org 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: 91aec67d-f9a0-4902-bec8-4ac1e2a2b497 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: 4f7eb6bf-539c-481f-ab81-81990f80ce6b name: 'Emília Antonella de Freitas' cpf: 385.649.483-72 rg: '920922945' ctps: null phone: null birthdate: '1982-05-13' email: null 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: 4f7eb6bf-539c-481f-ab81-81990f80ce6b name: type: string example: 'Emília Antonella de Freitas' cpf: type: string example: 385.649.483-72 rg: type: string example: '920922945' ctps: type: string example: null phone: type: string example: null birthdate: type: string example: '1982-05-13' email: 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 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: 72480402-761f-457b-846f-310508e03185 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: 8 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/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: 5b81ca04-a284-32f0-97d2-e2e98cc44326 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: 64435668-489e-391c-a24e-a7c743074c64 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: 5a2eba9b-cbf8-3bde-b264-66c3d98365fa 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: repudiandae 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: optio 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: - ratione items: type: string required: - mappings parameters: - in: path name: importId description: '' example: labore 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: quia required: false schema: type: string description: '' example: quia - in: query name: document description: '' example: magnam required: false schema: type: string description: '' example: magnam - 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 - in: query name: bank_account_id description: 'Filter by bank account UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the bank_accounts table.' example: a01edd80-bf3e-40f7-8613-ccb4be5831b3 required: false schema: type: string description: 'Filter by bank account UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the bank_accounts table.' example: a01edd80-bf3e-40f7-8613-ccb4be5831b3 nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 832e97cd-2fab-3001-ab25-0dcf9be97c2f receipt_number: REC-4940 receiver_type: employee receiver: id: null name: 'Elmira Kemmer' document: 644.578.702-20 payment: amount: 4619 amount_in_words: 'Valor por extenso de teste' method: check description: 'Temporibus quo beatae dicta minima sunt fuga sit.' issuer: name: McGlynn-Leffler document: 53.042.871/7166-39 issue: date: '2026-02-23' city: 'New Damionfort' state: SC created_by: id: a158b8fc-4e12-450d-89a5-d17a529ce527 name: 'Cecilia Graham' created_at: null updated_at: null - id: 949ddca8-3424-3e75-8a89-a72a88d7bd4b receipt_number: REC-3599 receiver_type: custom receiver: id: null name: 'Prof. Sean Terry MD' document: 240.046.750-52 payment: amount: 4322.62 amount_in_words: 'Valor por extenso de teste' method: pix description: 'Reprehenderit sapiente tempora consequatur quis repudiandae voluptate.' issuer: name: Legros-Lindgren document: 54.872.424/5546-23 issue: date: '2026-03-11' city: Coryside state: SC created_by: id: a158b8fc-573a-4bba-bbb1-1a0e1e64843e name: 'Mason Gibson PhD' 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: 832e97cd-2fab-3001-ab25-0dcf9be97c2f receipt_number: REC-4940 receiver_type: employee receiver: id: null name: 'Elmira Kemmer' document: 644.578.702-20 payment: amount: 4619 amount_in_words: 'Valor por extenso de teste' method: check description: 'Temporibus quo beatae dicta minima sunt fuga sit.' issuer: name: McGlynn-Leffler document: 53.042.871/7166-39 issue: date: '2026-02-23' city: 'New Damionfort' state: SC created_by: id: a158b8fc-4e12-450d-89a5-d17a529ce527 name: 'Cecilia Graham' created_at: null updated_at: null - id: 949ddca8-3424-3e75-8a89-a72a88d7bd4b receipt_number: REC-3599 receiver_type: custom receiver: id: null name: 'Prof. Sean Terry MD' document: 240.046.750-52 payment: amount: 4322.62 amount_in_words: 'Valor por extenso de teste' method: pix description: 'Reprehenderit sapiente tempora consequatur quis repudiandae voluptate.' issuer: name: Legros-Lindgren document: 54.872.424/5546-23 issue: date: '2026-03-11' city: Coryside state: SC created_by: id: a158b8fc-573a-4bba-bbb1-1a0e1e64843e name: 'Mason Gibson PhD' created_at: null updated_at: null items: type: object properties: id: type: string example: 832e97cd-2fab-3001-ab25-0dcf9be97c2f receipt_number: type: string example: REC-4940 receiver_type: type: string example: employee receiver: type: object properties: id: type: string example: null name: type: string example: 'Elmira Kemmer' document: type: string example: 644.578.702-20 payment: type: object properties: amount: type: integer example: 4619 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: check description: type: string example: 'Temporibus quo beatae dicta minima sunt fuga sit.' issuer: type: object properties: name: type: string example: McGlynn-Leffler document: type: string example: 53.042.871/7166-39 issue: type: object properties: date: type: string example: '2026-02-23' city: type: string example: 'New Damionfort' state: type: string example: SC created_by: type: object properties: id: type: string example: a158b8fc-4e12-450d-89a5-d17a529ce527 name: type: string example: 'Cecilia Graham' 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: b0bd6604-ee49-4c1f-8069-c78d46a7860a 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.' example: 'Example Payment method' enum: - pix - bank_transfer - cash - check 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: 1c8b8666-1a61-394b-a3ec-d0ee4730a8de nullable: true bank_account_id: type: string description: 'Conta Bancária. O campo value deve ser um UUID válido. The uuid of an existing record in the bank_accounts table.' example: d58c21be-d6d4-36f1-b58d-59ff23295646 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: b51b768c-6c5c-3409-b759-255204f339cf receipt_number: REC-5332 receiver_type: custom receiver: id: null name: 'Ms. Shaylee Harris DDS' document: 113.235.772-01 payment: amount: 4441.04 amount_in_words: 'Valor por extenso de teste' method: pix description: 'Aut sit commodi ut sint consectetur consequatur.' issuer: name: 'King and Sons' document: 26.928.593/6281-14 issue: date: '2026-03-05' city: Lynchville state: RS created_by: id: a158b8fc-5c45-4cca-9387-83abec280e99 name: 'Micheal Spencer I' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: b51b768c-6c5c-3409-b759-255204f339cf receipt_number: type: string example: REC-5332 receiver_type: type: string example: custom receiver: type: object properties: id: type: string example: null name: type: string example: 'Ms. Shaylee Harris DDS' document: type: string example: 113.235.772-01 payment: type: object properties: amount: type: number example: 4441.04 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: pix description: type: string example: 'Aut sit commodi ut sint consectetur consequatur.' issuer: type: object properties: name: type: string example: 'King and Sons' document: type: string example: 26.928.593/6281-14 issue: type: object properties: date: type: string example: '2026-03-05' city: type: string example: Lynchville state: type: string example: RS created_by: type: object properties: id: type: string example: a158b8fc-5c45-4cca-9387-83abec280e99 name: type: string example: 'Micheal Spencer I' 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: 261f77f1-16a5-414c-b229-de365d70aaec 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.' example: 'Example Payment method' enum: - pix - bank_transfer - cash - check 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: 5b752018-8c53-34d1-a18f-e02b449132ca nullable: true bank_account_id: type: string description: 'Conta Bancária. O campo value deve ser um UUID válido. The uuid of an existing record in the bank_accounts table.' example: 59e2f1eb-1735-38b7-97fc-b16d4dceec5f 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: b71de169-c298-30b0-9d67-da3044c1d2a8 receipt_number: REC-8103 receiver_type: employee receiver: id: null name: 'Kyler Will' document: 229.927.598-06 payment: amount: 425.44 amount_in_words: 'Valor por extenso de teste' method: check description: 'Quis aliquid velit deserunt.' issuer: name: Cartwright-Mraz document: 08.509.836/2330-59 issue: date: '2026-02-23' city: Sheaborough state: GO created_by: id: a158b8fc-6d4f-4322-b7bf-3c316545a038 name: 'Morris Fritsch Jr.' created_at: null updated_at: null - id: cf51c9df-c49e-3453-aa5e-1d071879d0d3 receipt_number: REC-0441 receiver_type: custom receiver: id: null name: 'Lyric Renner' document: 817.090.750-52 payment: amount: 4571.28 amount_in_words: 'Valor por extenso de teste' method: check description: 'Quo ipsa neque quaerat.' issuer: name: Barrows-McGlynn document: 25.923.247/1726-51 issue: date: '2026-02-24' city: Funkside state: RS created_by: id: a158b8fc-6f6c-4cb1-a9b3-3bd3e588ebdf name: 'Carole Casper' 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: b71de169-c298-30b0-9d67-da3044c1d2a8 receipt_number: REC-8103 receiver_type: employee receiver: id: null name: 'Kyler Will' document: 229.927.598-06 payment: amount: 425.44 amount_in_words: 'Valor por extenso de teste' method: check description: 'Quis aliquid velit deserunt.' issuer: name: Cartwright-Mraz document: 08.509.836/2330-59 issue: date: '2026-02-23' city: Sheaborough state: GO created_by: id: a158b8fc-6d4f-4322-b7bf-3c316545a038 name: 'Morris Fritsch Jr.' created_at: null updated_at: null - id: cf51c9df-c49e-3453-aa5e-1d071879d0d3 receipt_number: REC-0441 receiver_type: custom receiver: id: null name: 'Lyric Renner' document: 817.090.750-52 payment: amount: 4571.28 amount_in_words: 'Valor por extenso de teste' method: check description: 'Quo ipsa neque quaerat.' issuer: name: Barrows-McGlynn document: 25.923.247/1726-51 issue: date: '2026-02-24' city: Funkside state: RS created_by: id: a158b8fc-6f6c-4cb1-a9b3-3bd3e588ebdf name: 'Carole Casper' created_at: null updated_at: null items: type: object properties: id: type: string example: b71de169-c298-30b0-9d67-da3044c1d2a8 receipt_number: type: string example: REC-8103 receiver_type: type: string example: employee receiver: type: object properties: id: type: string example: null name: type: string example: 'Kyler Will' document: type: string example: 229.927.598-06 payment: type: object properties: amount: type: number example: 425.44 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: check description: type: string example: 'Quis aliquid velit deserunt.' issuer: type: object properties: name: type: string example: Cartwright-Mraz document: type: string example: 08.509.836/2330-59 issue: type: object properties: date: type: string example: '2026-02-23' city: type: string example: Sheaborough state: type: string example: GO created_by: type: object properties: id: type: string example: a158b8fc-6d4f-4322-b7bf-3c316545a038 name: type: string example: 'Morris Fritsch Jr.' 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: 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/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: 89696a88-8c5b-36ea-a82e-fdb92586db4f name: deleniti-quis display_name: 'id animi voluptatem' created_at: null updated_at: null - id: f98394c0-77b5-3f29-aca4-dc8230f19e52 name: odit-cum-nihil display_name: 'sit nemo ut' 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: 89696a88-8c5b-36ea-a82e-fdb92586db4f name: deleniti-quis display_name: 'id animi voluptatem' created_at: null updated_at: null - id: f98394c0-77b5-3f29-aca4-dc8230f19e52 name: odit-cum-nihil display_name: 'sit nemo ut' created_at: null updated_at: null items: type: object properties: id: type: string example: 89696a88-8c5b-36ea-a82e-fdb92586db4f name: type: string example: deleniti-quis display_name: type: string example: 'id animi voluptatem' 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: deac2285-4baf-3979-b87f-c5d4b7c61860 name: qui-quo-non display_name: 'ab non error' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: deac2285-4baf-3979-b87f-c5d4b7c61860 name: type: string example: qui-quo-non display_name: type: string example: 'ab non error' 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: e34c9510-27fe-3f8b-9edc-0825c5f5c230 name: 'Nádia Carmona Saito' created_at: null updated_at: null - id: 460ff85a-404e-3fa1-ba6c-5b1e44221047 name: 'Tábata Deverso Filho' 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: e34c9510-27fe-3f8b-9edc-0825c5f5c230 name: 'Nádia Carmona Saito' created_at: null updated_at: null - id: 460ff85a-404e-3fa1-ba6c-5b1e44221047 name: 'Tábata Deverso Filho' created_at: null updated_at: null items: type: object properties: id: type: string example: e34c9510-27fe-3f8b-9edc-0825c5f5c230 name: type: string example: 'Nádia Carmona Saito' 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: e6f7acbb-925f-3333-bf19-225587ad3dfc name: 'Norma Sophia Pontes Filho' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: e6f7acbb-925f-3333-bf19-225587ad3dfc name: type: string example: 'Norma Sophia Pontes Filho' 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: blanditiis 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: d1bc9f84-9e71-3921-87fe-f8df3dc58c75 name: 'Sr. Christian Galvão Jr.' created_at: null updated_at: null - id: 9403594c-ac0d-38d1-ac38-bf921226e861 name: 'Tatiana Agustina Cervantes Sobrinho' 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: d1bc9f84-9e71-3921-87fe-f8df3dc58c75 name: 'Sr. Christian Galvão Jr.' created_at: null updated_at: null - id: 9403594c-ac0d-38d1-ac38-bf921226e861 name: 'Tatiana Agustina Cervantes Sobrinho' created_at: null updated_at: null items: type: object properties: id: type: string example: d1bc9f84-9e71-3921-87fe-f8df3dc58c75 name: type: string example: 'Sr. Christian Galvão 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 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: aac262bd-976a-3ad8-ba90-3cbbb4a10705 name: 'Sr. Luiz Mendonça Jr.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: aac262bd-976a-3ad8-ba90-3cbbb4a10705 name: type: string example: 'Sr. Luiz Mendonça Jr.' 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: veritatis 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: 9b3a2231-ec8d-3047-86e3-ff659985579f name: 'Incidunt sint eius.' description: null work: id: a158b8fc-db85-4c66-8fb1-1448791d9f41 name: 'Luiza Juliana Corona' user: id: a158b8fc-e1b5-4568-81b9-345f1575d3e1 name: 'Eldora Sawayn DDS' created_at: null updated_at: null - id: 56980c9d-fa4b-392a-aea5-f30bb4f22711 name: 'Minus iure fuga.' description: 'Accusantium libero ex perspiciatis. Culpa dolores minus est quis dolorum aut quae. Hic cumque vero exercitationem expedita. Quia expedita est eius et asperiores non ut. Et aliquid voluptas deserunt quis ea sit laboriosam.' work: id: a158b8fc-e551-441f-9845-f84c4af65bf1 name: 'Dr. Tábata Fonseca Gil Jr.' user: id: a158b8fc-e80f-4c0a-9cab-94fc72cdb62b name: 'Christina Rutherford' 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: 9b3a2231-ec8d-3047-86e3-ff659985579f name: 'Incidunt sint eius.' description: null work: id: a158b8fc-db85-4c66-8fb1-1448791d9f41 name: 'Luiza Juliana Corona' user: id: a158b8fc-e1b5-4568-81b9-345f1575d3e1 name: 'Eldora Sawayn DDS' created_at: null updated_at: null - id: 56980c9d-fa4b-392a-aea5-f30bb4f22711 name: 'Minus iure fuga.' description: 'Accusantium libero ex perspiciatis. Culpa dolores minus est quis dolorum aut quae. Hic cumque vero exercitationem expedita. Quia expedita est eius et asperiores non ut. Et aliquid voluptas deserunt quis ea sit laboriosam.' work: id: a158b8fc-e551-441f-9845-f84c4af65bf1 name: 'Dr. Tábata Fonseca Gil Jr.' user: id: a158b8fc-e80f-4c0a-9cab-94fc72cdb62b name: 'Christina Rutherford' created_at: null updated_at: null items: type: object properties: id: type: string example: 9b3a2231-ec8d-3047-86e3-ff659985579f name: type: string example: 'Incidunt sint eius.' description: type: string example: null work: type: object properties: id: type: string example: a158b8fc-db85-4c66-8fb1-1448791d9f41 name: type: string example: 'Luiza Juliana Corona' user: type: object properties: id: type: string example: a158b8fc-e1b5-4568-81b9-345f1575d3e1 name: type: string example: 'Eldora Sawayn DDS' 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: d482c87c-756e-3b53-8bf0-45626048a666 nullable: true user_id: type: string description: 'Usuário. The uuid of an existing record in the users table.' example: 7f6f9145-e1f3-3aaf-a4c5-745b665267bc nullable: true responsible_id: type: string description: 'Responsável. The uuid of an existing record in the users table.' example: 2fa072f3-897e-3311-8f9c-3f12b4ab75bd 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: 7100e61e-f804-3011-a6e4-8a1ba37dc57b 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: fa3981f7-3673-3dee-9471-b8bd2e9525ea 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: 2620b9ae-1336-3e63-a294-6ea777377a96 name: 'Sint corrupti.' description: 'Saepe tempora sed dicta impedit et. Exercitationem consequatur reiciendis et mollitia adipisci. Voluptatem dolorem adipisci sint ut. Quia in repudiandae velit debitis voluptas qui laboriosam.' work: id: a158b8fc-ee2a-46be-9241-198a2ed949d0 name: 'Gael Carvalho Teles' user: id: a158b8fc-f10e-4a14-be0a-6e893a00ef53 name: 'Duane Hansen' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 2620b9ae-1336-3e63-a294-6ea777377a96 name: type: string example: 'Sint corrupti.' description: type: string example: 'Saepe tempora sed dicta impedit et. Exercitationem consequatur reiciendis et mollitia adipisci. Voluptatem dolorem adipisci sint ut. Quia in repudiandae velit debitis voluptas qui laboriosam.' work: type: object properties: id: type: string example: a158b8fc-ee2a-46be-9241-198a2ed949d0 name: type: string example: 'Gael Carvalho Teles' user: type: object properties: id: type: string example: a158b8fc-f10e-4a14-be0a-6e893a00ef53 name: type: string example: 'Duane Hansen' 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: 2739f315-1eef-30ac-a744-10c2bd21e6bf product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: b5a5c0c8-6d28-390e-b691-85eee63d8de6 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: ut 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: d9b8ef4d-21b2-3cc7-aa1d-a8d5bbfd6d9e product: id: a158b8fd-05d0-40c9-a8c5-3c9fc158deee name: 'Dr. Aparecida Matos' code: PRD-036323 unit: id: a158b8fd-03c1-470f-8983-9f9d712bbdec name: 'Victor Cléber Escobar' abbreviation: 'Rebeca Bárbara Bezerra Sobrinho' quantity: 369.3856 observation: 'Voluptatibus aut veniam quos similique.' created_at: null updated_at: null - id: 0299361b-37af-309c-afcc-32514be86f33 product: id: a158b8fd-1da3-4b58-8090-fd781d52b273 name: 'Dr. Simão Rezende' code: PRD-193790 unit: id: a158b8fd-1c4d-472d-b9e5-f7b754622d9f name: 'Sr. Daniel Escobar Neto' abbreviation: 'Sergio Vitor Leon' quantity: 410.8014 observation: 'Necessitatibus doloremque deleniti voluptatem rerum.' 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: d9b8ef4d-21b2-3cc7-aa1d-a8d5bbfd6d9e product: id: a158b8fd-05d0-40c9-a8c5-3c9fc158deee name: 'Dr. Aparecida Matos' code: PRD-036323 unit: id: a158b8fd-03c1-470f-8983-9f9d712bbdec name: 'Victor Cléber Escobar' abbreviation: 'Rebeca Bárbara Bezerra Sobrinho' quantity: 369.3856 observation: 'Voluptatibus aut veniam quos similique.' created_at: null updated_at: null - id: 0299361b-37af-309c-afcc-32514be86f33 product: id: a158b8fd-1da3-4b58-8090-fd781d52b273 name: 'Dr. Simão Rezende' code: PRD-193790 unit: id: a158b8fd-1c4d-472d-b9e5-f7b754622d9f name: 'Sr. Daniel Escobar Neto' abbreviation: 'Sergio Vitor Leon' quantity: 410.8014 observation: 'Necessitatibus doloremque deleniti voluptatem rerum.' created_at: null updated_at: null items: type: object properties: id: type: string example: d9b8ef4d-21b2-3cc7-aa1d-a8d5bbfd6d9e product: type: object properties: id: type: string example: a158b8fd-05d0-40c9-a8c5-3c9fc158deee name: type: string example: 'Dr. Aparecida Matos' code: type: string example: PRD-036323 unit: type: object properties: id: type: string example: a158b8fd-03c1-470f-8983-9f9d712bbdec name: type: string example: 'Victor Cléber Escobar' abbreviation: type: string example: 'Rebeca Bárbara Bezerra Sobrinho' quantity: type: number example: 369.3856 observation: type: string example: 'Voluptatibus aut veniam quos similique.' 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: 2e4edebc-8dde-3743-b826-8b9078657af5 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: - 23c61526-3fe6-3b96-b64f-96ef40ec39ad items: type: string required: - items parameters: - in: path name: productQuantityList description: 'Product Quantity List UUID' example: unde 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: et required: true schema: type: string - in: path name: item description: 'Product Quantity List Item UUID' example: in 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: ac34bdca-93d2-3f40-a622-2d3fda578c12 product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 5f30e75f-221c-3202-89d3-43660350ec8a 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: impedit 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: bb58eb97-e801-3710-b53f-7e31700c18f7 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: b6ab26ce-ccb6-34b6-a09f-7b262a0f9f30 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: non 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: 2c2101de-949d-37b7-a1c2-2994adf8fd77 quantity: 49.939 fulfilled_at: '2026-02-27T09:09:55.000000Z' created_at: null - id: 3ad709f5-13e4-364e-a895-1b0c8359cc12 quantity: 92.2157 fulfilled_at: '2026-02-19T04:01:27.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: 2c2101de-949d-37b7-a1c2-2994adf8fd77 quantity: 49.939 fulfilled_at: '2026-02-27T09:09:55.000000Z' created_at: null - id: 3ad709f5-13e4-364e-a895-1b0c8359cc12 quantity: 92.2157 fulfilled_at: '2026-02-19T04:01:27.000000Z' created_at: null items: type: object properties: id: type: string example: 2c2101de-949d-37b7-a1c2-2994adf8fd77 quantity: type: number example: 49.939 fulfilled_at: type: string example: '2026-02-27T09:09:55.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: enim 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: 41425e0a-94e6-3e01-ad2e-7017686c24b6 product: id: a158b900-8108-4ecf-96f5-eaeb29f767fd name: 'Joana Caldeira Colaço' code: PRD-219121 unit: id: a158b900-7fe9-4531-969f-f2eb5b7878b2 name: 'Dr. Maiara Pontes Brito' abbreviation: 'Dr. Teobaldo Lourenço Matos Sobrinho' quantity: 572.4037 quantity_fulfilled: 0 quantity_pending: 572.4037 is_fulfilled: false is_partially_fulfilled: false observation: 'Et quia laboriosam harum fuga iusto.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 41425e0a-94e6-3e01-ad2e-7017686c24b6 product: type: object properties: id: type: string example: a158b900-8108-4ecf-96f5-eaeb29f767fd name: type: string example: 'Joana Caldeira Colaço' code: type: string example: PRD-219121 unit: type: object properties: id: type: string example: a158b900-7fe9-4531-969f-f2eb5b7878b2 name: type: string example: 'Dr. Maiara Pontes Brito' abbreviation: type: string example: 'Dr. Teobaldo Lourenço Matos Sobrinho' quantity: type: number example: 572.4037 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 572.4037 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: 'Et quia laboriosam harum fuga iusto.' 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: et required: true schema: type: string - in: path name: item description: 'Product Request Item UUID' example: quia 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: d3ed29db-ef2d-3cee-958a-47c97a1fe2cb product: id: a158b900-963b-4ede-96b2-2904d4063ae4 name: 'Andressa das Neves' code: PRD-129169 unit: id: a158b900-94eb-4bc0-bcbc-1b65ec97228a name: 'Srta. Eliane Suzana Perez Sobrinho' abbreviation: 'Sofia Lia Sanches' quantity: 235.9576 quantity_fulfilled: 0 quantity_pending: 235.9576 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: 711624c7-bf07-3fa4-bf0a-db62724ce214 product: id: a158b900-a565-4dff-9917-dd477d604d20 name: 'Srta. Denise Ramos' code: PRD-058709 unit: id: a158b900-a440-403e-b06c-30cda9a0ae86 name: 'Sr. Joaquin Alves' abbreviation: 'Dr. Miguel Valentin Garcia' quantity: 327.7135 quantity_fulfilled: 0 quantity_pending: 327.7135 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: d3ed29db-ef2d-3cee-958a-47c97a1fe2cb product: id: a158b900-963b-4ede-96b2-2904d4063ae4 name: 'Andressa das Neves' code: PRD-129169 unit: id: a158b900-94eb-4bc0-bcbc-1b65ec97228a name: 'Srta. Eliane Suzana Perez Sobrinho' abbreviation: 'Sofia Lia Sanches' quantity: 235.9576 quantity_fulfilled: 0 quantity_pending: 235.9576 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: 711624c7-bf07-3fa4-bf0a-db62724ce214 product: id: a158b900-a565-4dff-9917-dd477d604d20 name: 'Srta. Denise Ramos' code: PRD-058709 unit: id: a158b900-a440-403e-b06c-30cda9a0ae86 name: 'Sr. Joaquin Alves' abbreviation: 'Dr. Miguel Valentin Garcia' quantity: 327.7135 quantity_fulfilled: 0 quantity_pending: 327.7135 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null items: type: object properties: id: type: string example: d3ed29db-ef2d-3cee-958a-47c97a1fe2cb product: type: object properties: id: type: string example: a158b900-963b-4ede-96b2-2904d4063ae4 name: type: string example: 'Andressa das Neves' code: type: string example: PRD-129169 unit: type: object properties: id: type: string example: a158b900-94eb-4bc0-bcbc-1b65ec97228a name: type: string example: 'Srta. Eliane Suzana Perez Sobrinho' abbreviation: type: string example: 'Sofia Lia Sanches' quantity: type: number example: 235.9576 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 235.9576 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: quod 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: ba2afa5d-ee82-3555-a7a8-cb5cb2f45949 product: id: a158b900-b835-4cc1-8d1f-e5de2b194c37 name: 'Juliano Sales Pena' code: PRD-230134 unit: id: a158b900-b71c-4aec-9251-250b7aaebe8f name: 'Noa Violeta Lovato' abbreviation: 'Dr. Erik Corona' quantity: 213.1636 quantity_fulfilled: 0 quantity_pending: 213.1636 is_fulfilled: false is_partially_fulfilled: false observation: 'Deleniti laudantium asperiores consequuntur unde eveniet non dolores.' created_at: null updated_at: null - id: b4e2861b-c9ce-3f93-9070-a1166f938bee product: id: a158b900-c7f4-4376-acae-67deb60bdda2 name: 'Kelly Liz Carrara' code: PRD-126138 unit: id: a158b900-c6b8-4a51-bd9e-37212bab1d7a name: 'Mayara Perez Mendonça Neto' abbreviation: 'Dante Queirós' quantity: 624.1515 quantity_fulfilled: 0 quantity_pending: 624.1515 is_fulfilled: false is_partially_fulfilled: false observation: 'Molestiae sed omnis dolor voluptate non.' created_at: null updated_at: null properties: data: type: array example: - id: ba2afa5d-ee82-3555-a7a8-cb5cb2f45949 product: id: a158b900-b835-4cc1-8d1f-e5de2b194c37 name: 'Juliano Sales Pena' code: PRD-230134 unit: id: a158b900-b71c-4aec-9251-250b7aaebe8f name: 'Noa Violeta Lovato' abbreviation: 'Dr. Erik Corona' quantity: 213.1636 quantity_fulfilled: 0 quantity_pending: 213.1636 is_fulfilled: false is_partially_fulfilled: false observation: 'Deleniti laudantium asperiores consequuntur unde eveniet non dolores.' created_at: null updated_at: null - id: b4e2861b-c9ce-3f93-9070-a1166f938bee product: id: a158b900-c7f4-4376-acae-67deb60bdda2 name: 'Kelly Liz Carrara' code: PRD-126138 unit: id: a158b900-c6b8-4a51-bd9e-37212bab1d7a name: 'Mayara Perez Mendonça Neto' abbreviation: 'Dante Queirós' quantity: 624.1515 quantity_fulfilled: 0 quantity_pending: 624.1515 is_fulfilled: false is_partially_fulfilled: false observation: 'Molestiae sed omnis dolor voluptate non.' created_at: null updated_at: null items: type: object properties: id: type: string example: ba2afa5d-ee82-3555-a7a8-cb5cb2f45949 product: type: object properties: id: type: string example: a158b900-b835-4cc1-8d1f-e5de2b194c37 name: type: string example: 'Juliano Sales Pena' code: type: string example: PRD-230134 unit: type: object properties: id: type: string example: a158b900-b71c-4aec-9251-250b7aaebe8f name: type: string example: 'Noa Violeta Lovato' abbreviation: type: string example: 'Dr. Erik Corona' quantity: type: number example: 213.1636 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 213.1636 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: 'Deleniti laudantium asperiores consequuntur unde eveniet non dolores.' 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: aut 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: e712bfdf-f9db-37dd-bab9-920b91c68f0d code: null name: 'Beatae est saepe.' description: null work: id: a158b8fe-90e6-4513-86d6-2a8c67a9f2f1 name: 'Srta. Nayara Katherine Lovato Sobrinho' user: id: a158b8fe-9386-47f5-90f6-a1ff50ad59d3 name: 'Lillie Stiedemann' status: id: a158b8fe-9619-4be4-9412-f656b5a382ca description: 'Sr. Sandro Barreto' color: '#707b3b' text_color: '#ebe07f' priority: low priority_label: Baixa needed_at: '2026-04-02' approved_at: null rejection_reason: null created_at: null updated_at: null - id: 011aa2ea-da21-30e3-b21f-d442e73c0c66 code: null name: 'Eligendi fugiat.' description: null work: id: a158b8fe-9a68-4238-a7b6-f910bbd5d36b name: 'Raphael Beltrão' user: id: a158b8fe-9cac-4d87-b08d-520e2ed35d04 name: 'Marielle Kerluke' status: id: a158b8fe-9e3a-4c90-8f95-266dcb21941b description: 'Léia Manoela Assunção' color: '#f288aa' text_color: '#b78689' priority: low priority_label: Baixa needed_at: '2026-03-20' 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: e712bfdf-f9db-37dd-bab9-920b91c68f0d code: null name: 'Beatae est saepe.' description: null work: id: a158b8fe-90e6-4513-86d6-2a8c67a9f2f1 name: 'Srta. Nayara Katherine Lovato Sobrinho' user: id: a158b8fe-9386-47f5-90f6-a1ff50ad59d3 name: 'Lillie Stiedemann' status: id: a158b8fe-9619-4be4-9412-f656b5a382ca description: 'Sr. Sandro Barreto' color: '#707b3b' text_color: '#ebe07f' priority: low priority_label: Baixa needed_at: '2026-04-02' approved_at: null rejection_reason: null created_at: null updated_at: null - id: 011aa2ea-da21-30e3-b21f-d442e73c0c66 code: null name: 'Eligendi fugiat.' description: null work: id: a158b8fe-9a68-4238-a7b6-f910bbd5d36b name: 'Raphael Beltrão' user: id: a158b8fe-9cac-4d87-b08d-520e2ed35d04 name: 'Marielle Kerluke' status: id: a158b8fe-9e3a-4c90-8f95-266dcb21941b description: 'Léia Manoela Assunção' color: '#f288aa' text_color: '#b78689' priority: low priority_label: Baixa needed_at: '2026-03-20' approved_at: null rejection_reason: null created_at: null updated_at: null items: type: object properties: id: type: string example: e712bfdf-f9db-37dd-bab9-920b91c68f0d code: type: string example: null name: type: string example: 'Beatae est saepe.' description: type: string example: null work: type: object properties: id: type: string example: a158b8fe-90e6-4513-86d6-2a8c67a9f2f1 name: type: string example: 'Srta. Nayara Katherine Lovato Sobrinho' user: type: object properties: id: type: string example: a158b8fe-9386-47f5-90f6-a1ff50ad59d3 name: type: string example: 'Lillie Stiedemann' status: type: object properties: id: type: string example: a158b8fe-9619-4be4-9412-f656b5a382ca description: type: string example: 'Sr. Sandro Barreto' color: type: string example: '#707b3b' text_color: type: string example: '#ebe07f' priority: type: string example: low priority_label: type: string example: Baixa needed_at: type: string example: '2026-04-02' 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: b2ea65c2-4e08-38ff-a3cc-5a5f14803f02 nullable: true work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: f9ecbaa4-496f-3876-8eff-cc48f53fa577 nullable: true user_id: type: string description: 'Usuário. The uuid of an existing record in the users table.' example: 30161f6a-e483-30ae-89c2-d1719c41cddc nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: d9528224-2967-374d-916c-b304df08784a 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: 9156e4b3-c55e-3fd4-8511-d4c86ccf46c0 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: 4fe5549b-4976-3b32-8160-c494e7dbdaf6 work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: 9d6cb1d2-7a9a-32c2-8600-496d5ac77a14 nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: f90fc1ec-8b55-30b3-b827-761c86785ed3 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: 48232037-b8ea-317d-9c4d-22eec51b88ea 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: 3ffa96a5-30b2-3e88-b4e0-726d115f26e1 code: null name: 'Saepe exercitationem rerum.' description: null work: id: a158b8fe-a4a1-4238-9da6-d4cbbf31d92d name: 'Flávio Teobaldo Gil Sobrinho' user: id: a158b8fe-a717-4971-8b72-57e18c3ae799 name: 'Jerome Mosciski' status: id: a158b8fe-a8ad-48b2-a704-54d8efc39c86 description: "Théo D'ávila Toledo" color: '#773fc8' text_color: '#9c5887' priority: urgent priority_label: Urgente needed_at: null approved_at: null rejection_reason: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 3ffa96a5-30b2-3e88-b4e0-726d115f26e1 code: type: string example: null name: type: string example: 'Saepe exercitationem rerum.' description: type: string example: null work: type: object properties: id: type: string example: a158b8fe-a4a1-4238-9da6-d4cbbf31d92d name: type: string example: 'Flávio Teobaldo Gil Sobrinho' user: type: object properties: id: type: string example: a158b8fe-a717-4971-8b72-57e18c3ae799 name: type: string example: 'Jerome Mosciski' status: type: object properties: id: type: string example: a158b8fe-a8ad-48b2-a704-54d8efc39c86 description: type: string example: "Théo D'ávila Toledo" color: type: string example: '#773fc8' text_color: type: string example: '#9c5887' priority: type: string example: urgent priority_label: type: string example: Urgente 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 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: f133c15e-3312-38b7-b37f-0f3823b68677 work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: 90ce7390-aa4c-3a94-a8b8-1f2a8b4cde06 nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: 27a51b13-0191-3d21-96d0-c5f03993a01b 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: 3031dc48-0991-3916-a363-45d09292d8a6 product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 4d0e1dea-e807-3492-b73c-d394622a8993 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: voluptatem 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: 1e2345a7-0030-34ba-8d5f-5bdddf51ee6e product: id: a158b8fe-be76-4492-8523-b92fdf0a8b33 name: 'Marília Iasmin Carmona Neto' code: PRD-155781 unit: id: a158b8fe-bd2f-41ea-9b09-79943b7fe4fd name: 'Sra. Alana das Neves Godói Sobrinho' abbreviation: 'Luna Hortência Franco Sobrinho' quantity: 69.9287 quantity_fulfilled: 0 quantity_pending: 69.9287 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: c6309d5f-fccc-36b9-ba9a-795434624878 product: id: a158b8fe-cc29-4499-b799-935f9838f996 name: 'Tessália Prado Filho' code: PRD-000577 unit: id: a158b8fe-cafc-4058-b8b0-95fea41c20ae name: 'Estêvão Matias Jr.' abbreviation: 'Sra. Aline Denise Rocha Filho' quantity: 752.151 quantity_fulfilled: 0 quantity_pending: 752.151 is_fulfilled: false is_partially_fulfilled: false observation: 'Ab voluptatum rem et alias sed velit incidunt.' 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: 1e2345a7-0030-34ba-8d5f-5bdddf51ee6e product: id: a158b8fe-be76-4492-8523-b92fdf0a8b33 name: 'Marília Iasmin Carmona Neto' code: PRD-155781 unit: id: a158b8fe-bd2f-41ea-9b09-79943b7fe4fd name: 'Sra. Alana das Neves Godói Sobrinho' abbreviation: 'Luna Hortência Franco Sobrinho' quantity: 69.9287 quantity_fulfilled: 0 quantity_pending: 69.9287 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: c6309d5f-fccc-36b9-ba9a-795434624878 product: id: a158b8fe-cc29-4499-b799-935f9838f996 name: 'Tessália Prado Filho' code: PRD-000577 unit: id: a158b8fe-cafc-4058-b8b0-95fea41c20ae name: 'Estêvão Matias Jr.' abbreviation: 'Sra. Aline Denise Rocha Filho' quantity: 752.151 quantity_fulfilled: 0 quantity_pending: 752.151 is_fulfilled: false is_partially_fulfilled: false observation: 'Ab voluptatum rem et alias sed velit incidunt.' created_at: null updated_at: null items: type: object properties: id: type: string example: 1e2345a7-0030-34ba-8d5f-5bdddf51ee6e product: type: object properties: id: type: string example: a158b8fe-be76-4492-8523-b92fdf0a8b33 name: type: string example: 'Marília Iasmin Carmona Neto' code: type: string example: PRD-155781 unit: type: object properties: id: type: string example: a158b8fe-bd2f-41ea-9b09-79943b7fe4fd name: type: string example: 'Sra. Alana das Neves Godói Sobrinho' abbreviation: type: string example: 'Luna Hortência Franco Sobrinho' quantity: type: number example: 69.9287 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 69.9287 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 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: 4a49c2d5-9d31-325f-9c81-56267df0c253 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: - 5eaca2e3-c987-3635-af92-c6b3ce16015c items: type: string required: - items parameters: - in: path name: productRequest description: 'Product Request UUID' example: in 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: id 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: aliquam 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: a882fc1c-0020-3370-bc7f-f91c65d4e07c product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 908f56ae-69b6-3082-880f-43de2f10b605 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: voluptate 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: e1d9eb78-9aa1-3ed1-9e2d-8fba1e99e732 name: 'Elizabeth Ortega Caldeira' code: PRD-346083 stock: 648120618 product_family: id: a158b8fc-86fa-48d0-8503-efa00a9f9e06 name: 'Danilo Emiliano Oliveira Sobrinho' product_brand: id: a158b8fc-8af3-4872-8b52-41fced9b2986 name: 'Mariana Aguiar Neto' unit: id: a158b8fc-8de9-47a5-8976-a67b9b597687 name: 'Dr. Davi Prado Jimenes' abbreviation: 'Rayane Thaís Vale' image: id: null url: null description: 'Id voluptatibus magnam et rem ut et sapiente.' created_at: null updated_at: null - id: 278862d1-e3c9-3a0e-9628-a096fc40f72f name: 'Thalita Mendonça Filho' code: PRD-403944 stock: 16507 product_family: id: a158b8fc-9287-4898-afd5-bf3f39263a58 name: 'Lara Serra Lira' product_brand: id: a158b8fc-9434-40ab-a148-41ded5ae0b4a name: 'Raphael Wilson de Arruda' unit: id: a158b8fc-95d0-47f3-8cee-8ab501ab5dd4 name: 'Dr. Breno Fontes Bittencourt Jr.' abbreviation: 'Ziraldo Marco Montenegro Sobrinho' image: id: null url: null description: 'Cumque saepe sit asperiores enim quaerat ea consequuntur.' 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: e1d9eb78-9aa1-3ed1-9e2d-8fba1e99e732 name: 'Elizabeth Ortega Caldeira' code: PRD-346083 stock: 648120618 product_family: id: a158b8fc-86fa-48d0-8503-efa00a9f9e06 name: 'Danilo Emiliano Oliveira Sobrinho' product_brand: id: a158b8fc-8af3-4872-8b52-41fced9b2986 name: 'Mariana Aguiar Neto' unit: id: a158b8fc-8de9-47a5-8976-a67b9b597687 name: 'Dr. Davi Prado Jimenes' abbreviation: 'Rayane Thaís Vale' image: id: null url: null description: 'Id voluptatibus magnam et rem ut et sapiente.' created_at: null updated_at: null - id: 278862d1-e3c9-3a0e-9628-a096fc40f72f name: 'Thalita Mendonça Filho' code: PRD-403944 stock: 16507 product_family: id: a158b8fc-9287-4898-afd5-bf3f39263a58 name: 'Lara Serra Lira' product_brand: id: a158b8fc-9434-40ab-a148-41ded5ae0b4a name: 'Raphael Wilson de Arruda' unit: id: a158b8fc-95d0-47f3-8cee-8ab501ab5dd4 name: 'Dr. Breno Fontes Bittencourt Jr.' abbreviation: 'Ziraldo Marco Montenegro Sobrinho' image: id: null url: null description: 'Cumque saepe sit asperiores enim quaerat ea consequuntur.' created_at: null updated_at: null items: type: object properties: id: type: string example: e1d9eb78-9aa1-3ed1-9e2d-8fba1e99e732 name: type: string example: 'Elizabeth Ortega Caldeira' code: type: string example: PRD-346083 stock: type: integer example: 648120618 product_family: type: object properties: id: type: string example: a158b8fc-86fa-48d0-8503-efa00a9f9e06 name: type: string example: 'Danilo Emiliano Oliveira Sobrinho' product_brand: type: object properties: id: type: string example: a158b8fc-8af3-4872-8b52-41fced9b2986 name: type: string example: 'Mariana Aguiar Neto' unit: type: object properties: id: type: string example: a158b8fc-8de9-47a5-8976-a67b9b597687 name: type: string example: 'Dr. Davi Prado Jimenes' abbreviation: type: string example: 'Rayane Thaís Vale' image: type: object properties: id: type: string example: null url: type: string example: null description: type: string example: 'Id voluptatibus magnam et rem ut et sapiente.' 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: 0ea6f475-2d3a-3587-90af-59418b80e654 product_brand_id: type: string description: 'Marca do Produto. The uuid of an existing record in the product_brands table.' example: dc44e136-40ca-3c29-b12e-e5213f775e84 unit_id: type: string description: 'Unidade. The uuid of an existing record in the units table.' example: 75068e23-e549-3095-b643-306ae70e2255 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: dff58127-dd14-3ce7-a16c-259f4106ca41 name: 'Esther Pedrosa Quintana' code: PRD-228896 stock: 1 product_family: id: a158b8fc-a073-4332-86f5-52fe74eb823e name: 'Mônica Cordeiro Leal' product_brand: id: a158b8fc-a239-4210-b696-8bca2303fb78 name: 'Sr. Wellington Carlos Campos Filho' unit: id: a158b8fc-a3ec-4308-a509-fcff34f121b2 name: 'Srta. Amanda Carrara' abbreviation: 'Sra. Manuela Valente Amaral Jr.' image: id: null url: null description: 'Nihil accusamus iure eveniet tempore.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: dff58127-dd14-3ce7-a16c-259f4106ca41 name: type: string example: 'Esther Pedrosa Quintana' code: type: string example: PRD-228896 stock: type: integer example: 1 product_family: type: object properties: id: type: string example: a158b8fc-a073-4332-86f5-52fe74eb823e name: type: string example: 'Mônica Cordeiro Leal' product_brand: type: object properties: id: type: string example: a158b8fc-a239-4210-b696-8bca2303fb78 name: type: string example: 'Sr. Wellington Carlos Campos Filho' unit: type: object properties: id: type: string example: a158b8fc-a3ec-4308-a509-fcff34f121b2 name: type: string example: 'Srta. Amanda Carrara' abbreviation: type: string example: 'Sra. Manuela Valente Amaral Jr.' image: type: object properties: id: type: string example: null url: type: string example: null description: type: string example: 'Nihil accusamus iure eveniet tempore.' 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: f67505d4-2918-3de1-98bf-4a3523a810f9 product_brand_id: type: string description: 'Marca do Produto. The uuid of an existing record in the product_brands table.' example: e169eac9-c6bb-34ac-8dca-c28d258005ec unit_id: type: string description: 'Unidade. The uuid of an existing record in the units table.' example: dcdeb667-f0a7-3429-b75b-3b1799b6cd5b 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: nisi 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: sint required: true schema: type: string /api/reports/accounts-payable-receivable/excel: get: summary: 'Export Accounts Payable/Receivable to Excel' operationId: exportAccountsPayableReceivableToExcel description: 'Dispatches async Excel generation. Frontend receives notification via Pusher when ready.' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Reports /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: - Reports security: [] /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: b2aed19a-fde4-3225-9a05-e4fc78041bb4 name: 'doloribus commodi' slug: null description: null abbreviation: null created_at: null updated_at: null - id: 98da0038-3eb8-38a9-8320-f210d979b72e name: 'quas molestiae' slug: null description: 'Et consequatur aut provident et cum qui quia. Dolores magnam laborum id eaque molestiae. Adipisci porro voluptas debitis. Aut voluptatem laborum cupiditate est odio et distinctio.' abbreviation: 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: b2aed19a-fde4-3225-9a05-e4fc78041bb4 name: 'doloribus commodi' slug: null description: null abbreviation: null created_at: null updated_at: null - id: 98da0038-3eb8-38a9-8320-f210d979b72e name: 'quas molestiae' slug: null description: 'Et consequatur aut provident et cum qui quia. Dolores magnam laborum id eaque molestiae. Adipisci porro voluptas debitis. Aut voluptatem laborum cupiditate est odio et distinctio.' abbreviation: null created_at: null updated_at: null items: type: object properties: id: type: string example: b2aed19a-fde4-3225-9a05-e4fc78041bb4 name: type: string example: 'doloribus commodi' 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 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: e2540fc1-312f-31a4-bb80-b75612a45857 name: 'illum pariatur' slug: null description: null abbreviation: wzy created_at: null updated_at: null properties: data: type: object properties: id: type: string example: e2540fc1-312f-31a4-bb80-b75612a45857 name: type: string example: 'illum pariatur' slug: type: string example: null description: type: string example: null abbreviation: type: string example: wzy 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: 5 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: b6d4af40-0436-3ef9-8eda-8255cf48af1a name: 'Prof. Reilly Schuppe PhD' username: collier.clare email: lhessel@example.net image: id: null url: null sectors: [] roles: [] - id: c8890de6-dead-3a0c-9327-6ab23e212ca0 name: 'Bridget Wolf' username: dahlia49 email: huel.fern@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: b6d4af40-0436-3ef9-8eda-8255cf48af1a name: 'Prof. Reilly Schuppe PhD' username: collier.clare email: lhessel@example.net image: id: null url: null sectors: [] roles: [] - id: c8890de6-dead-3a0c-9327-6ab23e212ca0 name: 'Bridget Wolf' username: dahlia49 email: huel.fern@example.net image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: b6d4af40-0436-3ef9-8eda-8255cf48af1a name: type: string example: 'Prof. Reilly Schuppe PhD' username: type: string example: collier.clare email: type: string example: lhessel@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: - 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: - 014d7272-557a-3b45-acd1-fabbb45a2716 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: - 4a8dd2f8-bb3d-3b67-abbf-7f204a23182b 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: - feddb68e-c56c-34cc-ada7-2c5276d35759 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: 'iure alias' slug: enim-facilis-voluptatum-nihil-magnam-earum-eveniet - name: 'omnis et' slug: est-quis-harum-sit properties: data: type: array example: - name: 'iure alias' slug: enim-facilis-voluptatum-nihil-magnam-earum-eveniet - name: 'omnis et' slug: est-quis-harum-sit items: type: object properties: name: type: string example: 'iure alias' slug: type: string example: enim-facilis-voluptatum-nihil-magnam-earum-eveniet 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: 461c698d-7981-37fa-a98f-9f0d230a3919 description: 'Dr. Richard Verdugo Sobrinho' abbreviation: earum color: '#4e4d6c' text_color: '#495df8' module: name: Obras slug: work created_at: null updated_at: null - id: 039225b5-5f21-3926-9c7e-2120c0755188 description: 'Kelly Colaço Cervantes Sobrinho' abbreviation: pariatur color: '#5b38b9' text_color: '#2508e5' 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: 461c698d-7981-37fa-a98f-9f0d230a3919 description: 'Dr. Richard Verdugo Sobrinho' abbreviation: earum color: '#4e4d6c' text_color: '#495df8' module: name: Obras slug: work created_at: null updated_at: null - id: 039225b5-5f21-3926-9c7e-2120c0755188 description: 'Kelly Colaço Cervantes Sobrinho' abbreviation: pariatur color: '#5b38b9' text_color: '#2508e5' created_at: null updated_at: null items: type: object properties: id: type: string example: 461c698d-7981-37fa-a98f-9f0d230a3919 description: type: string example: 'Dr. Richard Verdugo Sobrinho' abbreviation: type: string example: earum color: type: string example: '#4e4d6c' text_color: type: string example: '#495df8' module: type: object properties: name: type: string example: Obras slug: type: string example: work 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: 6f8c8c94-c39a-3593-b92d-5e52eeb2b486 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: 5435d5c9-1714-301f-a7a3-2ad6f470b4ba description: 'Mauro Bezerra Assunção' abbreviation: dolorem color: '#336525' text_color: '#17d4e5' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 5435d5c9-1714-301f-a7a3-2ad6f470b4ba description: type: string example: 'Mauro Bezerra Assunção' abbreviation: type: string example: dolorem color: type: string example: '#336525' text_color: type: string example: '#17d4e5' 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: 0ed3fc7b-7f6d-31b9-8f1d-8a9202d74647 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: b8b86579-272b-3a15-ab4f-713296b0ba00 quantity: 910.2382 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 17aa287a-4cea-3e44-a338-8d7081d5b815 quantity: 945.7855 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null properties: data: type: array example: - id: b8b86579-272b-3a15-ab4f-713296b0ba00 quantity: 910.2382 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 17aa287a-4cea-3e44-a338-8d7081d5b815 quantity: 945.7855 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: b8b86579-272b-3a15-ab4f-713296b0ba00 quantity: type: number example: 910.2382 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: 59d139c3-90b5-3a5e-8de9-42baf00d4935 name: 'Estoque Marés S.A.' module: work is_active: true is_main: false created_at: null updated_at: null - id: 76a59a89-0f19-39b1-ad7a-b8771043a6a4 name: 'Estoque Alcantara e Associados' 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: 59d139c3-90b5-3a5e-8de9-42baf00d4935 name: 'Estoque Marés S.A.' module: work is_active: true is_main: false created_at: null updated_at: null - id: 76a59a89-0f19-39b1-ad7a-b8771043a6a4 name: 'Estoque Alcantara e Associados' module: work is_active: true is_main: false created_at: null updated_at: null items: type: object properties: id: type: string example: 59d139c3-90b5-3a5e-8de9-42baf00d4935 name: type: string example: 'Estoque Marés S.A.' 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: f6d4a2b3-c657-334e-a7a7-2dd99c572e57 name: "Estoque D'ávila Comercial Ltda." module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: f6d4a2b3-c657-334e-a7a7-2dd99c572e57 name: type: string example: "Estoque D'ávila Comercial 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: b0e38689-c433-3573-b47c-fcedaae31f78 name: 'Estoque Chaves Ltda.' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: b0e38689-c433-3573-b47c-fcedaae31f78 name: type: string example: 'Estoque Chaves 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 '/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: d9e7c168-968a-32dc-8a9c-75ed4122ced9 name: "Estoque Soto-D'ávila" module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: d9e7c168-968a-32dc-8a9c-75ed4122ced9 name: type: string example: "Estoque Soto-D'ávila" 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: 7c1bbe9c-7238-3c2e-8e10-bf1011719a22 name: 'Estoque Valência-Serna' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 7c1bbe9c-7238-3c2e-8e10-bf1011719a22 name: type: string example: 'Estoque Valência-Serna' 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: 23ef7828-4aa8-37aa-9e5d-b1267b4468bf quantity: 825.1378 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 135df10f-c5ae-3420-bb38-2005c59a9d2c quantity: 793.1771 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: 23ef7828-4aa8-37aa-9e5d-b1267b4468bf quantity: 825.1378 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 135df10f-c5ae-3420-bb38-2005c59a9d2c quantity: 793.1771 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: 23ef7828-4aa8-37aa-9e5d-b1267b4468bf quantity: type: number example: 825.1378 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: 86d86d97-6929-3236-919d-5ded423b6ea5 quantity: 394.3019 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: 86d86d97-6929-3236-919d-5ded423b6ea5 quantity: type: number example: 394.3019 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: eum 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: 4671ba22-9210-3ec5-a9ff-7777e8a1abab code: MOV-850515 type: consumo type_name: CONSUMPTION is_entry: false is_exit: true quantity: 73.092 previous_quantity: 580.5028 new_quantity: 507.4108 reason: 'Rerum illo beatae ea quibusdam ratione debitis.' movement_date: '2026-03-10T12:33:43.000000Z' created_at: null - id: 5bc24a74-34d9-3be8-a015-8b1746c13a85 code: MOV-138586 type: vencido type_name: EXPIRED is_entry: false is_exit: true quantity: 92.5371 previous_quantity: 769.8862 new_quantity: 677.3491 reason: 'Vero natus saepe libero sequi corrupti in rem rerum.' movement_date: '2026-03-05T16:33:20.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: 4671ba22-9210-3ec5-a9ff-7777e8a1abab code: MOV-850515 type: consumo type_name: CONSUMPTION is_entry: false is_exit: true quantity: 73.092 previous_quantity: 580.5028 new_quantity: 507.4108 reason: 'Rerum illo beatae ea quibusdam ratione debitis.' movement_date: '2026-03-10T12:33:43.000000Z' created_at: null - id: 5bc24a74-34d9-3be8-a015-8b1746c13a85 code: MOV-138586 type: vencido type_name: EXPIRED is_entry: false is_exit: true quantity: 92.5371 previous_quantity: 769.8862 new_quantity: 677.3491 reason: 'Vero natus saepe libero sequi corrupti in rem rerum.' movement_date: '2026-03-05T16:33:20.000000Z' created_at: null items: type: object properties: id: type: string example: 4671ba22-9210-3ec5-a9ff-7777e8a1abab code: type: string example: MOV-850515 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: 73.092 previous_quantity: type: number example: 580.5028 new_quantity: type: number example: 507.4108 reason: type: string example: 'Rerum illo beatae ea quibusdam ratione debitis.' movement_date: type: string example: '2026-03-10T12:33:43.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: 9c03dab8-be96-330f-876d-de4ce8f80b4a code: MOV-868505 type: 'entrada transferência' type_name: TRANSFER_IN is_entry: true is_exit: false quantity: 27.123 previous_quantity: 167.0235 new_quantity: 194.1465 reason: null movement_date: '2026-03-04T22:44:02.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 9c03dab8-be96-330f-876d-de4ce8f80b4a code: type: string example: MOV-868505 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: 27.123 previous_quantity: type: number example: 167.0235 new_quantity: type: number example: 194.1465 reason: type: string example: null movement_date: type: string example: '2026-03-04T22:44:02.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: bd4501a7-2430-390f-ba64-090841984a45 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: 6d9bfb4f-bc93-3cfe-a5ca-4ad16cc0fb71 code: MOV-738051 type: compra type_name: PURCHASE is_entry: true is_exit: false quantity: 88.8642 previous_quantity: 899.3703 new_quantity: 988.2345 reason: 'Ipsa porro debitis aperiam iste repellat laboriosam.' movement_date: '2026-02-21T14:10:02.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 6d9bfb4f-bc93-3cfe-a5ca-4ad16cc0fb71 code: type: string example: MOV-738051 type: type: string example: compra type_name: type: string example: PURCHASE is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 88.8642 previous_quantity: type: number example: 899.3703 new_quantity: type: number example: 988.2345 reason: type: string example: 'Ipsa porro debitis aperiam iste repellat laboriosam.' movement_date: type: string example: '2026-02-21T14:10:02.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: ba8d4c0d-6f43-35e8-a4ee-e68a62ee20e4 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: 99b03f9b-ebc3-329a-ac61-37ccf8c9a280 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: 690654da-6275-3917-a695-5439eafd4fd9 code: MOV-746655 type: alocação type_name: ALLOCATION is_entry: true is_exit: false quantity: 74.5583 previous_quantity: 819.3922 new_quantity: 893.9505 reason: 'Maxime quod sed autem reiciendis et et.' movement_date: '2026-03-09T20:57:08.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 690654da-6275-3917-a695-5439eafd4fd9 code: type: string example: MOV-746655 type: type: string example: alocação type_name: type: string example: ALLOCATION is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 74.5583 previous_quantity: type: number example: 819.3922 new_quantity: type: number example: 893.9505 reason: type: string example: 'Maxime quod sed autem reiciendis et et.' movement_date: type: string example: '2026-03-09T20:57:08.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: 6df27943-e701-3571-b065-921fbf631b80 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: 5d171a39-9588-37b7-b0e9-1232a498d34d code: MOV-202140 type: 'ajuste saída' type_name: ADJUSTMENT_OUT is_entry: false is_exit: true quantity: 89.6856 previous_quantity: 814.3172 new_quantity: 724.6316 reason: null movement_date: '2026-02-26T18:50:38.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 5d171a39-9588-37b7-b0e9-1232a498d34d code: type: string example: MOV-202140 type: type: string example: 'ajuste saída' type_name: type: string example: ADJUSTMENT_OUT is_entry: type: boolean example: false is_exit: type: boolean example: true quantity: type: number example: 89.6856 previous_quantity: type: number example: 814.3172 new_quantity: type: number example: 724.6316 reason: type: string example: null movement_date: type: string example: '2026-02-26T18:50:38.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: f0a6a127-fa2d-399b-b99c-7d6c5b88f9d6 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: 91d737aa-e7a3-3fdc-9fce-e8425c63be02 code: MOV-481374 type: consumo type_name: CONSUMPTION is_entry: false is_exit: true quantity: 40.4141 previous_quantity: 304.5392 new_quantity: 264.1251 reason: 'Hic sit modi perferendis in voluptas.' movement_date: '2026-03-12T02:20:46.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 91d737aa-e7a3-3fdc-9fce-e8425c63be02 code: type: string example: MOV-481374 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: 40.4141 previous_quantity: type: number example: 304.5392 new_quantity: type: number example: 264.1251 reason: type: string example: 'Hic sit modi perferendis in voluptas.' movement_date: type: string example: '2026-03-12T02:20:46.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: 02d00f3a-c9da-39cb-8774-bd058d35333f name: 'Elias Pontes Jr.' email: valencia.mary@example.org phone: '(55) 99997-1789' document: 48.452.982/0001-89 type: pj responsible: 'Dr. Marta Marisa Valdez Filho' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null - id: 9bb4dded-9f41-352f-b915-b876f87b0f7f name: 'Simon Deverso Perez' email: stephany.zamana@example.net phone: '(47) 3089-5482' document: 57.965.491/0001-22 type: pf responsible: 'Mário Carrara Jr.' 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: 02d00f3a-c9da-39cb-8774-bd058d35333f name: 'Elias Pontes Jr.' email: valencia.mary@example.org phone: '(55) 99997-1789' document: 48.452.982/0001-89 type: pj responsible: 'Dr. Marta Marisa Valdez Filho' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null - id: 9bb4dded-9f41-352f-b915-b876f87b0f7f name: 'Simon Deverso Perez' email: stephany.zamana@example.net phone: '(47) 3089-5482' document: 57.965.491/0001-22 type: pf responsible: 'Mário Carrara Jr.' 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: 02d00f3a-c9da-39cb-8774-bd058d35333f name: type: string example: 'Elias Pontes Jr.' email: type: string example: valencia.mary@example.org phone: type: string example: '(55) 99997-1789' document: type: string example: 48.452.982/0001-89 type: type: string example: pj responsible: type: string example: 'Dr. Marta Marisa Valdez Filho' 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: 5e18a1e9-0d4f-3ca0-8754-bfc68966ee45 name: 'Jorge Cortês' email: eduarda.gomes@example.net phone: '(73) 4844-0410' document: 29.043.439/0001-83 type: pf responsible: 'Dr. Cláudio Adriel Garcia' 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: 5e18a1e9-0d4f-3ca0-8754-bfc68966ee45 name: type: string example: 'Jorge Cortês' email: type: string example: eduarda.gomes@example.net phone: type: string example: '(73) 4844-0410' document: type: string example: 29.043.439/0001-83 type: type: string example: pf responsible: type: string example: 'Dr. Cláudio Adriel Garcia' 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: 20 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: 06e1cc6f-704a-37e8-bffa-8c3cbc2bd766 name: 'Jorge Rangel Fontes' description: 'Ut id in delectus non eaque nesciunt velit. Itaque aut ut qui consequatur. Cupiditate aut ea magni id eos corrupti. Dolorem et deserunt dolores nesciunt est.' type: tarifa - id: 7841ac78-76f6-3ba3-9607-55c7838e179d name: 'Srta. Stella Pereira Sobrinho' description: 'Atque similique unde iusto dolorem omnis. Error consectetur perferendis atque est. Harum accusamus nobis odio vero et voluptatem.' type: saída 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: 06e1cc6f-704a-37e8-bffa-8c3cbc2bd766 name: 'Jorge Rangel Fontes' description: 'Ut id in delectus non eaque nesciunt velit. Itaque aut ut qui consequatur. Cupiditate aut ea magni id eos corrupti. Dolorem et deserunt dolores nesciunt est.' type: tarifa - id: 7841ac78-76f6-3ba3-9607-55c7838e179d name: 'Srta. Stella Pereira Sobrinho' description: 'Atque similique unde iusto dolorem omnis. Error consectetur perferendis atque est. Harum accusamus nobis odio vero et voluptatem.' type: saída items: type: object properties: id: type: string example: 06e1cc6f-704a-37e8-bffa-8c3cbc2bd766 name: type: string example: 'Jorge Rangel Fontes' description: type: string example: 'Ut id in delectus non eaque nesciunt velit. Itaque aut ut qui consequatur. Cupiditate aut ea magni id eos corrupti. Dolorem et deserunt dolores nesciunt est.' type: type: string example: tarifa 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: 824801a5-5c69-3dc6-b6b4-a9a3072e2750 name: 'Sr. Leonardo Sandro Burgos' description: 'Aut occaecati dolorum corporis totam iste quisquam nostrum. Et eligendi et dolore quia est aut rerum. Nostrum eum repellendus assumenda soluta harum id. Ratione fugiat quis vel labore in.' type: saída properties: data: type: object properties: id: type: string example: 824801a5-5c69-3dc6-b6b4-a9a3072e2750 name: type: string example: 'Sr. Leonardo Sandro Burgos' description: type: string example: 'Aut occaecati dolorum corporis totam iste quisquam nostrum. Et eligendi et dolore quia est aut rerum. Nostrum eum repellendus assumenda soluta harum id. Ratione fugiat quis vel labore in.' type: type: string example: saída 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: odit 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: a91f7969-dffe-34fc-bba9-12ebe439da4b name: 'Fernando Carlos Rivera' abbreviation: 'Sra. Marina de Arruda Filho' description: 'Laudantium autem et vel.' created_at: null updated_at: null - id: a2891ff7-f4e6-316a-afd7-5be2b6028ab2 name: 'Sra. Naomi Pacheco Jr.' abbreviation: 'Dr. Renan Chaves' description: 'Aut in quis atque rerum.' 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: a91f7969-dffe-34fc-bba9-12ebe439da4b name: 'Fernando Carlos Rivera' abbreviation: 'Sra. Marina de Arruda Filho' description: 'Laudantium autem et vel.' created_at: null updated_at: null - id: a2891ff7-f4e6-316a-afd7-5be2b6028ab2 name: 'Sra. Naomi Pacheco Jr.' abbreviation: 'Dr. Renan Chaves' description: 'Aut in quis atque rerum.' created_at: null updated_at: null items: type: object properties: id: type: string example: a91f7969-dffe-34fc-bba9-12ebe439da4b name: type: string example: 'Fernando Carlos Rivera' abbreviation: type: string example: 'Sra. Marina de Arruda Filho' description: type: string example: 'Laudantium autem et vel.' 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: 001eb2a9-1224-350e-93ea-0377405f2476 name: 'Dr. Cíntia Romero Lozano Filho' abbreviation: 'Dr. Joaquin Mendes Vega' description: 'Consectetur sint nihil earum.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 001eb2a9-1224-350e-93ea-0377405f2476 name: type: string example: 'Dr. Cíntia Romero Lozano Filho' abbreviation: type: string example: 'Dr. Joaquin Mendes Vega' description: type: string example: 'Consectetur sint nihil earum.' 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: qui 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: qui 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: 0c4e7bba-aaf7-3a26-81e4-57b95550efcf name: 'Westley Cole DVM' username: vkassulke email: spinka.jovanny@example.org image: id: null url: null sectors: [] roles: [] - id: f9ae44f7-8a52-392d-88aa-eabb51a305cd name: 'Prof. Esta Ratke MD' username: joelle07 email: kattie41@example.org 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: 0c4e7bba-aaf7-3a26-81e4-57b95550efcf name: 'Westley Cole DVM' username: vkassulke email: spinka.jovanny@example.org image: id: null url: null sectors: [] roles: [] - id: f9ae44f7-8a52-392d-88aa-eabb51a305cd name: 'Prof. Esta Ratke MD' username: joelle07 email: kattie41@example.org image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: 0c4e7bba-aaf7-3a26-81e4-57b95550efcf name: type: string example: 'Westley Cole DVM' username: type: string example: vkassulke email: type: string example: spinka.jovanny@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: - 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: julia59 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: - 413d864a-006d-3339-a57f-8c30b48f863a items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - 56a20e5e-9625-3401-9f04-e521017255a2 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: 5ef73b38-15a7-33fa-a27e-820409e685d2 name: 'Everette Pfannerstill' username: fsmith email: braynor@example.net image: id: null url: null sectors: [] roles: [] properties: data: type: object properties: id: type: string example: 5ef73b38-15a7-33fa-a27e-820409e685d2 name: type: string example: 'Everette Pfannerstill' username: type: string example: fsmith email: type: string example: braynor@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: dubuque.rachel 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: - c69102ab-e72b-3243-adc2-1f37fc479e21 items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - f4c1df6c-a301-3448-aa55-0d157bd4dd2e 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: - 6fc8dab9-42a3-3f32-9173-780bb4817671 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: consequatur display_name: 'Quaerat pariatur est asperiores dolores error ea deserunt sed.' - id: null name: quisquam display_name: 'Omnis iure beatae expedita maiores.' properties: data: type: array example: - id: null name: consequatur display_name: 'Quaerat pariatur est asperiores dolores error ea deserunt sed.' - id: null name: quisquam display_name: 'Omnis iure beatae expedita maiores.' items: type: object properties: id: type: string example: null name: type: string example: consequatur display_name: type: string example: 'Quaerat pariatur est asperiores dolores error ea deserunt sed.' 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: 61183365-8469-3a34-bd07-c7ea6edf7f86 description: 'Fabrício Eduardo Ávila Neto' work: id: null name: null documents: [] created_at: null updated_at: null - id: 8ca39c4a-534c-302c-bfca-95fead1142a8 description: 'Ricardo Neves da Rosa' 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: 61183365-8469-3a34-bd07-c7ea6edf7f86 description: 'Fabrício Eduardo Ávila Neto' work: id: null name: null documents: [] created_at: null updated_at: null - id: 8ca39c4a-534c-302c-bfca-95fead1142a8 description: 'Ricardo Neves da Rosa' work: id: null name: null documents: [] created_at: null updated_at: null items: type: object properties: id: type: string example: 61183365-8469-3a34-bd07-c7ea6edf7f86 description: type: string example: 'Fabrício Eduardo Ávila Neto' 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: fb58867a-8645-3a5c-8a96-8e27f1a8c8ec 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: 16bbfa26-9db1-3d45-83d0-a926a993ff18 description: 'Gilberto Aaron Torres Neto' work: id: null name: null documents: [] created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 16bbfa26-9db1-3d45-83d0-a926a993ff18 description: type: string example: 'Gilberto Aaron Torres Neto' 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: c776c01b-8977-337a-a96d-9bea91877028 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: 54bf8530-68e8-33bf-b632-4888e41f0acc name: 'Sr. Mário Gil Marés' 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: '1994-03-20 02:34:47.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null - id: e0cd1587-dba8-301a-9f50-dd42015e0361 name: 'Gilberto Everton Ortiz' 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: '1997-12-09 16:09:04.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: 54bf8530-68e8-33bf-b632-4888e41f0acc name: 'Sr. Mário Gil Marés' 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: '1994-03-20 02:34:47.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null - id: e0cd1587-dba8-301a-9f50-dd42015e0361 name: 'Gilberto Everton Ortiz' 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: '1997-12-09 16:09:04.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null items: type: object properties: id: type: string example: 54bf8530-68e8-33bf-b632-4888e41f0acc name: type: string example: 'Sr. Mário Gil Marés' 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: '1994-03-20 02:34:47.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: 59cdab8d-8cf6-3a42-b685-1e8cc4a5afa1 status_id: type: string description: 'Status id. The uuid of an existing record in the statuses table.' example: ce23e033-062b-314d-8d3d-f95f9eb94d46 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: fc47f1bb-08b3-3ac2-a9a6-17c4d9acb82f name: 'Sueli Grego Meireles' 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: '1970-03-30 11:10:44.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null properties: data: type: object properties: id: type: string example: fc47f1bb-08b3-3ac2-a9a6-17c4d9acb82f name: type: string example: 'Sueli Grego Meireles' 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: '1970-03-30 11:10:44.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: 7fedf326-554b-366d-8650-2861f4cb2349 status_id: type: string description: 'Status id. The uuid of an existing record in the statuses table.' example: a28d265f-e4b1-3cfd-9242-af31afa638b6 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: 7e9fb913-ab76-3bb0-a760-e58455241dcb name: 'Jayde McDermott' username: sim03 email: volkman.idella@example.org image: id: null url: null sectors: [] roles: [] - id: e8951c31-c39a-3826-ac60-70e28d20d880 name: 'Brad Cormier' username: isobel.herman email: tkemmer@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: 7e9fb913-ab76-3bb0-a760-e58455241dcb name: 'Jayde McDermott' username: sim03 email: volkman.idella@example.org image: id: null url: null sectors: [] roles: [] - id: e8951c31-c39a-3826-ac60-70e28d20d880 name: 'Brad Cormier' username: isobel.herman email: tkemmer@example.net image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: 7e9fb913-ab76-3bb0-a760-e58455241dcb name: type: string example: 'Jayde McDermott' username: type: string example: sim03 email: type: string example: volkman.idella@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: - 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: - ec2a8906-0988-3eac-9a7a-0f22878bc86f 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: - 816fa762-3813-30ea-88d6-d6aef8e56478 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: - 2ce07247-c4c8-3844-8833-61dcb6767cce items: type: string parameters: - in: path name: work description: 'Work UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string