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: 7090755d-292b-308c-b0bb-2ed6ef124ae3 name: dolor-69f50b45ca2c5 display_name: 'Aut saepe et est in in atque ipsam.' permissions_count: null - id: 1e655450-7e7b-3ac1-9628-8a36776be803 name: rerum-69f50b45cf977 display_name: 'Aliquam sint officia eos omnis.' 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: 7090755d-292b-308c-b0bb-2ed6ef124ae3 name: dolor-69f50b45ca2c5 display_name: 'Aut saepe et est in in atque ipsam.' permissions_count: null - id: 1e655450-7e7b-3ac1-9628-8a36776be803 name: rerum-69f50b45cf977 display_name: 'Aliquam sint officia eos omnis.' permissions_count: null items: type: object properties: id: type: string example: 7090755d-292b-308c-b0bb-2ed6ef124ae3 name: type: string example: dolor-69f50b45ca2c5 display_name: type: string example: 'Aut saepe et est in in atque ipsam.' permissions_count: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: - 3ffe6b75-ac92-33b4-9712-51a5b01ed410 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: - cb3d96ca-5116-3b76-8e9e-69454ad78dba 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: 6a7b5d24-4f7a-305b-a450-d06e684f8cb5 name: minima-69f50b45dfca2 display_name: 'Molestiae quam ipsa eos est distinctio.' permissions_count: null properties: data: type: object properties: id: type: string example: 6a7b5d24-4f7a-305b-a450-d06e684f8cb5 name: type: string example: minima-69f50b45dfca2 display_name: type: string example: 'Molestiae quam ipsa eos est distinctio.' permissions_count: type: string example: null nullable: true 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: delectus display_name: 'Id placeat eveniet sunt numquam sit aut.' - id: null name: amet display_name: 'Aliquam harum est nesciunt velit porro id dolorem.' properties: data: type: array example: - id: null name: delectus display_name: 'Id placeat eveniet sunt numquam sit aut.' - id: null name: amet display_name: 'Aliquam harum est nesciunt velit porro id dolorem.' items: type: object properties: id: type: string example: null nullable: true name: type: string example: delectus display_name: type: string example: 'Id placeat eveniet sunt numquam sit aut.' 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: asperiores display_name: 'Qui est id aliquid blanditiis cumque.' - id: null name: perferendis display_name: 'Iure et dolor error aspernatur nisi voluptatem assumenda.' 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: asperiores display_name: 'Qui est id aliquid blanditiis cumque.' - id: null name: perferendis display_name: 'Iure et dolor error aspernatur nisi voluptatem assumenda.' items: type: object properties: id: type: string example: null nullable: true name: type: string example: asperiores display_name: type: string example: 'Qui est id aliquid blanditiis cumque.' links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: molestiae display_name: 'Laboriosam suscipit vel error voluptas.' properties: data: type: object properties: id: type: string example: null nullable: true name: type: string example: molestiae display_name: type: string example: 'Laboriosam suscipit vel error voluptas.' 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: 7aff2ba3-adb8-3cc1-9a05-40f30ca086e6 type: entrada payment_method: cheque amount: 2550.04 due_date: '2026-05-13T03: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: 'Ex consequatur consectetur expedita rem sit quaerat.' 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: aut field2: 87 field3: false notes: 'Aut error laborum a.' created_at: null updated_at: null - id: de554ad9-efe6-3bcb-b2cc-6d63fb43347b type: entrada payment_method: boleto amount: 4865.69 due_date: '2026-05-29T03: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 quas velit et a doloribus assumenda accusamus blanditiis qui sint expedita quisquam non.' 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: deleniti field2: 95 field3: false notes: 'Ullam ut aperiam commodi sint sunt libero.' created_at: null updated_at: null properties: data: type: array example: - id: 7aff2ba3-adb8-3cc1-9a05-40f30ca086e6 type: entrada payment_method: cheque amount: 2550.04 due_date: '2026-05-13T03: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: 'Ex consequatur consectetur expedita rem sit quaerat.' 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: aut field2: 87 field3: false notes: 'Aut error laborum a.' created_at: null updated_at: null - id: de554ad9-efe6-3bcb-b2cc-6d63fb43347b type: entrada payment_method: boleto amount: 4865.69 due_date: '2026-05-29T03: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 quas velit et a doloribus assumenda accusamus blanditiis qui sint expedita quisquam non.' 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: deleniti field2: 95 field3: false notes: 'Ullam ut aperiam commodi sint sunt libero.' created_at: null updated_at: null items: type: object properties: id: type: string example: 7aff2ba3-adb8-3cc1-9a05-40f30ca086e6 type: type: string example: entrada payment_method: type: string example: cheque amount: type: number example: 2550.04 due_date: type: string example: '2026-05-13T03:00:00.000000Z' status: type: string example: null nullable: true payment_date: type: string example: null nullable: true protest_date: type: string example: null nullable: true paid_amount: type: string example: null nullable: true interest_amount: type: string example: null nullable: true penalty_amount: type: string example: null nullable: true notary_fee_amount: type: string example: null nullable: true description: type: string example: 'Ex consequatur consectetur expedita rem sit quaerat.' is_recurring: type: string example: null nullable: true recurrence_config: type: string example: null nullable: true parent_id: type: string example: null nullable: true recurrence_order: type: integer example: 1 total_recurrences: type: string example: null nullable: true children_count: type: integer example: 0 remaining_recurrences: type: string example: null nullable: true has_children: type: boolean example: false field1: type: string example: aut field2: type: integer example: 87 field3: type: boolean example: false notes: type: string example: 'Aut error laborum a.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: - enim required: true schema: type: array description: 'The uuid of an existing record in the account_payable_receivables table.' example: - enim 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: - dicta required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - dicta items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - consectetur required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - consectetur items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - et required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - et items: type: string - in: query name: statuses description: '' example: - vencido required: false schema: type: array description: '' example: - vencido items: type: string enum: - 'a vencer' - pago - pago_sem_lancamento - 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-05-01T17:21:26' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-05-01T17:21:26' nullable: true - in: query name: protest_date_end description: 'O campo value deve ser uma data válida.' example: '2026-05-01T17:21:26' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-05-01T17:21:26' nullable: true - in: query name: has_protest description: '' example: false required: false schema: type: boolean description: '' example: false nullable: true - in: query name: has_children description: 'Filter accounts that have recurring children.' example: true required: false schema: type: boolean description: 'Filter accounts that have recurring children.' example: true nullable: true - in: query name: is_recurring description: 'Filter by recurring status (true: only recurring, false: only non-recurring, null: all).' example: true required: false schema: type: boolean description: 'Filter by recurring status (true: only recurring, false: only non-recurring, null: all).' example: true nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 1c148233-5f04-322d-a917-ab29b2cf0538 type: entrada payment_method: cheque amount: 8880.62 due_date: '2026-05-13T03: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: 'Quod vel neque quo maxime architecto id.' 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: quia field2: 19 field3: false notes: 'Provident dolorem qui rerum voluptatem et.' created_at: null updated_at: null - id: 9f93dc08-6c8d-35d9-8198-9569b2c7efe3 type: saída payment_method: boleto amount: 4272.54 due_date: '2026-05-27T03: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: 'Impedit dolorem qui quia quae temporibus nesciunt dignissimos et eaque porro et in aut.' 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: nostrum field2: 57 field3: true notes: 'Praesentium quod et et sit.' 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: 1c148233-5f04-322d-a917-ab29b2cf0538 type: entrada payment_method: cheque amount: 8880.62 due_date: '2026-05-13T03: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: 'Quod vel neque quo maxime architecto id.' 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: quia field2: 19 field3: false notes: 'Provident dolorem qui rerum voluptatem et.' created_at: null updated_at: null - id: 9f93dc08-6c8d-35d9-8198-9569b2c7efe3 type: saída payment_method: boleto amount: 4272.54 due_date: '2026-05-27T03: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: 'Impedit dolorem qui quia quae temporibus nesciunt dignissimos et eaque porro et in aut.' 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: nostrum field2: 57 field3: true notes: 'Praesentium quod et et sit.' created_at: null updated_at: null items: type: object properties: id: type: string example: 1c148233-5f04-322d-a917-ab29b2cf0538 type: type: string example: entrada payment_method: type: string example: cheque amount: type: number example: 8880.62 due_date: type: string example: '2026-05-13T03:00:00.000000Z' status: type: string example: null nullable: true payment_date: type: string example: null nullable: true protest_date: type: string example: null nullable: true paid_amount: type: string example: null nullable: true interest_amount: type: string example: null nullable: true penalty_amount: type: string example: null nullable: true notary_fee_amount: type: string example: null nullable: true description: type: string example: 'Quod vel neque quo maxime architecto id.' is_recurring: type: string example: null nullable: true recurrence_config: type: string example: null nullable: true parent_id: type: string example: null nullable: true recurrence_order: type: integer example: 1 total_recurrences: type: string example: null nullable: true children_count: type: integer example: 0 remaining_recurrences: type: string example: null nullable: true has_children: type: boolean example: false field1: type: string example: quia field2: type: integer example: 19 field3: type: boolean example: false notes: type: string example: 'Provident dolorem qui rerum voluptatem et.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: - ut required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - ut items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - culpa required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - culpa items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - praesentium required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - praesentium items: type: string - in: query name: statuses description: '' example: - pago_sem_lancamento required: false schema: type: array description: '' example: - pago_sem_lancamento items: type: string enum: - 'a vencer' - pago - pago_sem_lancamento - 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-05-01T17:21:26' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-05-01T17:21:26' nullable: true - in: query name: protest_date_end description: 'O campo value deve ser uma data válida.' example: '2026-05-01T17:21:26' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-05-01T17:21:26' nullable: true - in: query name: has_protest description: '' example: false required: false schema: type: boolean description: '' example: false nullable: true - in: query name: has_children description: 'Filter accounts that have recurring children.' example: true required: false schema: type: boolean description: 'Filter accounts that have recurring children.' example: true nullable: true - in: query name: is_recurring description: 'Filter by recurring status (true: only recurring, false: only non-recurring, null: all).' example: true required: false schema: type: boolean description: 'Filter by recurring status (true: only recurring, false: only non-recurring, null: all).' example: true nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 3405e563-5062-399a-9bb8-82df066bff54 type: entrada payment_method: cheque amount: 7553.4 due_date: '2026-05-16T03: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: 'Dolores rerum corrupti ipsam voluptates illum incidunt quos distinctio optio in dolor dolorum.' 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: suscipit field2: 54 field3: true notes: 'Molestias voluptatum aut deleniti rerum.' created_at: null updated_at: null - id: dcb80851-70ff-33bd-bf99-7cf2dd4e7683 type: entrada payment_method: cheque amount: 4152.79 due_date: '2026-06-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: 'Quis eos sunt quo maiores id quae voluptatem hic.' 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: 89 field3: false notes: 'Laudantium veritatis iste amet asperiores.' 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: 3405e563-5062-399a-9bb8-82df066bff54 type: entrada payment_method: cheque amount: 7553.4 due_date: '2026-05-16T03: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: 'Dolores rerum corrupti ipsam voluptates illum incidunt quos distinctio optio in dolor dolorum.' 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: suscipit field2: 54 field3: true notes: 'Molestias voluptatum aut deleniti rerum.' created_at: null updated_at: null - id: dcb80851-70ff-33bd-bf99-7cf2dd4e7683 type: entrada payment_method: cheque amount: 4152.79 due_date: '2026-06-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: 'Quis eos sunt quo maiores id quae voluptatem hic.' 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: 89 field3: false notes: 'Laudantium veritatis iste amet asperiores.' created_at: null updated_at: null items: type: object properties: id: type: string example: 3405e563-5062-399a-9bb8-82df066bff54 type: type: string example: entrada payment_method: type: string example: cheque amount: type: number example: 7553.4 due_date: type: string example: '2026-05-16T03:00:00.000000Z' status: type: string example: null nullable: true payment_date: type: string example: null nullable: true protest_date: type: string example: null nullable: true paid_amount: type: string example: null nullable: true interest_amount: type: string example: null nullable: true penalty_amount: type: string example: null nullable: true notary_fee_amount: type: string example: null nullable: true description: type: string example: 'Dolores rerum corrupti ipsam voluptates illum incidunt quos distinctio optio in dolor dolorum.' is_recurring: type: string example: null nullable: true recurrence_config: type: string example: null nullable: true parent_id: type: string example: null nullable: true recurrence_order: type: integer example: 1 total_recurrences: type: string example: null nullable: true children_count: type: integer example: 0 remaining_recurrences: type: string example: null nullable: true has_children: type: boolean example: false field1: type: string example: suscipit field2: type: integer example: 54 field3: type: boolean example: true notes: type: string example: 'Molestias voluptatum aut deleniti rerum.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 387a6ef8-1268-3fd6-80ce-7d1b7f5b6262 nullable: true customer_id: type: string description: 'Cliente. The uuid of an existing record in the customers table.' example: a527bb83-6f8f-3d6e-a954-196133ea5128 nullable: true work_id: type: string description: 'Obra. The uuid of an existing record in the works table.' example: 7c6a9cc2-4c5a-343b-b7c5-a2f86f21f264 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: 7ff2522b-dbd8-31d0-93f9-394e0632abc7 nullable: true custom_fields: type: object description: 'Custom fields.' example: - example1 - example2 properties: { } is_recurring: type: boolean description: 'Is recurring.' example: true 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: magni 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: 6ea72336-2d52-3848-92c1-675b5766e35c type: entrada payment_method: cheque amount: 4293.72 due_date: '2026-05-14T03: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: 'Hic asperiores occaecati ut neque dignissimos a odio reiciendis unde praesentium velit ut fuga.' 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: repudiandae field2: 2 field3: false notes: 'Eligendi aut similique quam voluptas enim est.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 6ea72336-2d52-3848-92c1-675b5766e35c type: type: string example: entrada payment_method: type: string example: cheque amount: type: number example: 4293.72 due_date: type: string example: '2026-05-14T03:00:00.000000Z' status: type: string example: null nullable: true payment_date: type: string example: null nullable: true protest_date: type: string example: null nullable: true paid_amount: type: string example: null nullable: true interest_amount: type: string example: null nullable: true penalty_amount: type: string example: null nullable: true notary_fee_amount: type: string example: null nullable: true description: type: string example: 'Hic asperiores occaecati ut neque dignissimos a odio reiciendis unde praesentium velit ut fuga.' is_recurring: type: string example: null nullable: true recurrence_config: type: string example: null nullable: true parent_id: type: string example: null nullable: true recurrence_order: type: integer example: 1 total_recurrences: type: string example: null nullable: true children_count: type: integer example: 0 remaining_recurrences: type: string example: null nullable: true has_children: type: boolean example: false field1: type: string example: repudiandae field2: type: integer example: 2 field3: type: boolean example: false notes: type: string example: 'Eligendi aut similique quam voluptas enim est.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 9b33e575-53d2-334b-9a56-7ebcdcb31b26 nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: f3289121-4d80-323f-a487-93a2ed54691a nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: c6836dcc-829c-3960-9480-0c17be68d383 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: 60072803-e60f-3729-a787-6d91eeda1f78 nullable: true custom_fields: type: object description: 'Custom fields.' example: - example1 - example2 properties: { } is_recurring: type: boolean description: 'Is recurring.' example: true 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: velit 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: ggrimes@example.org 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: 394896cf-ac57-34e6-99a2-10a95f79a446 name: 'Ms. Colleen Leannon' username: carroll.adolfo email: carlie01@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: 394896cf-ac57-34e6-99a2-10a95f79a446 name: type: string example: 'Ms. Colleen Leannon' username: type: string example: carroll.adolfo email: type: string example: carlie01@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 nullable: true url: type: string example: null nullable: true 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: mosciski.alec 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: - 5462dc82-1ce2-39f5-af16-ad2c6f0b2516 items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - 54f14d1c-10e2-31e3-9d27-4acd3c72070b 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: uskxheryxletuyaneevnbs 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: sapiente 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: totalBalance: number totalBalancePositive: number totalBalanceNegative: number totalLimit: number totalAvailableBalance: number totalUsedLimit: number totalAvailableLimit: number accounts: '*': id: string bank: string balance: number limit: number available_balance: number used_limit: number available_limit: number properties: data: type: object properties: totalBalance: type: string example: number totalBalancePositive: type: string example: number totalBalanceNegative: type: string example: number totalLimit: type: string example: number totalAvailableBalance: type: string example: number totalUsedLimit: type: string example: number totalAvailableLimit: 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 available_balance: type: string example: number used_limit: type: string example: number available_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: c24f3b5b-4de8-3046-b712-0a5d89bb9c58 agency: '9622' account: 8859347-6 type: poupança balance: 678.37 holder_type: pf alias: eos limit: 4356.69 available_balance: 5035.06 used_limit: 0 available_limit: 4356.69 is_default: null bank: id: null name: null code: null created_at: null updated_at: null - id: 6ffcdd31-1e6e-3482-b0a2-57b76a00fb4e agency: '9524' account: 1992318-2 type: poupança balance: 711.83 holder_type: pf alias: aliquam limit: 9226.32 available_balance: 9938.15 used_limit: 0 available_limit: 9226.32 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: c24f3b5b-4de8-3046-b712-0a5d89bb9c58 agency: '9622' account: 8859347-6 type: poupança balance: 678.37 holder_type: pf alias: eos limit: 4356.69 available_balance: 5035.06 used_limit: 0 available_limit: 4356.69 is_default: null bank: id: null name: null code: null created_at: null updated_at: null - id: 6ffcdd31-1e6e-3482-b0a2-57b76a00fb4e agency: '9524' account: 1992318-2 type: poupança balance: 711.83 holder_type: pf alias: aliquam limit: 9226.32 available_balance: 9938.15 used_limit: 0 available_limit: 9226.32 is_default: null bank: id: null name: null code: null created_at: null updated_at: null items: type: object properties: id: type: string example: c24f3b5b-4de8-3046-b712-0a5d89bb9c58 agency: type: string example: '9622' account: type: string example: 8859347-6 type: type: string example: poupança balance: type: number example: 678.37 holder_type: type: string example: pf alias: type: string example: eos limit: type: number example: 4356.69 available_balance: type: number example: 5035.06 used_limit: type: integer example: 0 available_limit: type: number example: 4356.69 is_default: type: string example: null nullable: true bank: type: object properties: id: type: string example: null nullable: true name: type: string example: null nullable: true code: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 5513330-6 bank_id: type: string description: 'Bank id. The uuid of an existing record in the banks table.' example: 66c73303-4d54-3760-b943-73c8a9212c55 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: true required: - agency - account - bank_id - type - holder_type - alias - balance '/api/bank-accounts/{bankAccount}': put: summary: 'Update bank account' operationId: updateBankAccount description: 'Update a bank account' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Bank Accounts' requestBody: required: false content: application/json: schema: type: object properties: agency: type: string description: Agency. example: 'Example Agency' account: type: string description: Account. example: 6438613-0 bank_id: type: string description: 'Bank id. The uuid of an existing record in the banks table.' example: 543402d4-0c87-3f0f-a9fe-fafa9e3f5e3e 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: true get: summary: 'Show bank account' operationId: showBankAccount description: 'Show a bank account' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: a600b8e6-d71b-33cd-be18-bb49a98875c9 agency: '9560' account: 7045696-0 type: corrente balance: 8269.46 holder_type: pj alias: ut limit: 6292.26 available_balance: 14561.72 used_limit: 0 available_limit: 6292.26 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: a600b8e6-d71b-33cd-be18-bb49a98875c9 agency: type: string example: '9560' account: type: string example: 7045696-0 type: type: string example: corrente balance: type: number example: 8269.46 holder_type: type: string example: pj alias: type: string example: ut limit: type: number example: 6292.26 available_balance: type: number example: 14561.72 used_limit: type: integer example: 0 available_limit: type: number example: 6292.26 is_default: type: string example: null nullable: true bank: type: object properties: id: type: string example: null nullable: true name: type: string example: null nullable: true code: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 2 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: 9dbf15d9-b37c-3af5-b083-e1fd41c8812b name: 'das Dores e Associados' code: '638' - id: 61ffd6f7-6ea6-379b-82a1-52e5e34d51f9 name: 'Vale e Rosa e Filhos' code: '267' 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: 9dbf15d9-b37c-3af5-b083-e1fd41c8812b name: 'das Dores e Associados' code: '638' - id: 61ffd6f7-6ea6-379b-82a1-52e5e34d51f9 name: 'Vale e Rosa e Filhos' code: '267' items: type: object properties: id: type: string example: 9dbf15d9-b37c-3af5-b083-e1fd41c8812b name: type: string example: 'das Dores e Associados' code: type: string example: '638' links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: ec128c31-4138-39ab-9d19-6b2ffb9ff8a7 name: 'Lutero e das Neves e Filhos' code: '230' properties: data: type: object properties: id: type: string example: ec128c31-4138-39ab-9d19-6b2ffb9ff8a7 name: type: string example: 'Lutero e das Neves e Filhos' code: type: string example: '230' 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 nullable: true district: type: string example: null nullable: true city: type: string example: null nullable: true state: type: string example: null nullable: true complement: type: string example: null nullable: true ibge: type: string example: null nullable: true ddd: type: string example: null nullable: true siafi: type: string example: null nullable: true 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: 'Delectus provident possimus occaecati ab quae harum quis architecto.' required: false schema: type: string description: 'Description .' example: 'Delectus provident possimus occaecati ab quae harum quis architecto.' - in: query name: categories description: 'The uuid of an existing record in the transaction_categories table.' example: - quisquam required: false schema: type: array description: 'The uuid of an existing record in the transaction_categories table.' example: - quisquam 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: - velit required: false schema: type: array description: 'The uuid of an existing record in the bank_accounts table.' example: - velit items: type: string - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - repellat required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - repellat items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - id required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - id items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - aliquid required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - aliquid 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: 'Voluptas voluptatem molestiae architecto.' required: false schema: type: string description: 'Description .' example: 'Voluptas voluptatem molestiae architecto.' - in: query name: categories description: 'The uuid of an existing record in the transaction_categories table.' example: - cumque required: false schema: type: array description: 'The uuid of an existing record in the transaction_categories table.' example: - cumque 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: - dolores required: false schema: type: array description: 'The uuid of an existing record in the bank_accounts table.' example: - dolores items: type: string - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - cupiditate required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - cupiditate items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - optio required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - optio items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - esse required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - esse items: type: string responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 7b6af2d7-33cd-37d5-a50c-0a2b6acb4525 code: FC-31181055 type: depósito amount: 5828.5 description: 'Reiciendis voluptatem in quis fugit est.' transaction_date: '2009-05-26T03:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null - id: d7ae4e54-3cd2-3996-a451-bbeea44a7d3c code: FC-74117039 type: tarifa amount: -7771.63 description: 'Ducimus voluptatem ex quasi ut.' transaction_date: '1978-11-12T03:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 7b6af2d7-33cd-37d5-a50c-0a2b6acb4525 code: FC-31181055 type: depósito amount: 5828.5 description: 'Reiciendis voluptatem in quis fugit est.' transaction_date: '2009-05-26T03:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null - id: d7ae4e54-3cd2-3996-a451-bbeea44a7d3c code: FC-74117039 type: tarifa amount: -7771.63 description: 'Ducimus voluptatem ex quasi ut.' transaction_date: '1978-11-12T03:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null items: type: object properties: id: type: string example: 7b6af2d7-33cd-37d5-a50c-0a2b6acb4525 code: type: string example: FC-31181055 type: type: string example: depósito amount: type: number example: 5828.5 description: type: string example: 'Reiciendis voluptatem in quis fugit est.' transaction_date: type: string example: '2009-05-26T03:00:00.000000Z' transaction_category: type: object properties: id: type: string example: null nullable: true name: type: string example: null nullable: true type: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: a2754fd0-a566-3e2d-b5eb-f7c6287ca868 transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: 358c74e1-695e-3e86-afa1-8a0f3d129a41 bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: 3eeee45b-67b7-39ab-9fe3-20b3eccc22b2 nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: ebde35b5-df42-3ca5-95cf-61f7e34e3838 nullable: true supplier_id: type: string description: 'Supplier id. The uuid of an existing record in the suppliers table.' example: c78f29ea-c82e-3ce3-8f17-67633b5432da nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: fc6531e8-8d31-36e7-aec3-047530fb4cd1 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: 2d53cf55-436d-3ba7-8b34-98e1abe738b7 code: FC-58122864 type: depósito amount: 6955.02 description: 'Incidunt asperiores unde sequi omnis velit inventore aperiam.' transaction_date: '1986-03-26T03: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: 2d53cf55-436d-3ba7-8b34-98e1abe738b7 code: type: string example: FC-58122864 type: type: string example: depósito amount: type: number example: 6955.02 description: type: string example: 'Incidunt asperiores unde sequi omnis velit inventore aperiam.' transaction_date: type: string example: '1986-03-26T03:00:00.000000Z' transaction_category: type: object properties: id: type: string example: null nullable: true name: type: string example: null nullable: true type: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 2b93516c-ce4a-3d4a-80f8-3962dcb6d961 transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: 168e3048-e4a2-3919-bc0f-ea8058067d2e bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: 37cc931f-dd83-34d8-9168-225abc34bb99 nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: 5f70ba57-5aa3-30ef-9e95-ecd990d8f916 nullable: true supplier_id: type: string description: 'Supplier id. The uuid of an existing record in the suppliers table.' example: aadef0d7-29e8-342d-bbdd-42899f3effec nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: 0e9fa4a9-258d-3df3-ad4b-7fcdd0b9c0d2 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: 10 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: b74c9b85-cdce-313b-ae9b-3fd800d1504a code: null opened_by: null opened_at: '2015-10-02T07:51:42.000000Z' closed_by: null closed_at: '1998-09-10T07:03:08.000000Z' opening_balance: 8619.96 closing_balance: 2680.28 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1973-06-19T05:22:55.000000Z' updated_at: '2021-06-09T21:50:38.000000Z' - id: e70f25ca-65d6-31c4-9709-fba21059870c code: null opened_by: null opened_at: '2024-01-30T21:18:56.000000Z' closed_by: null closed_at: '2008-09-14T16:04:26.000000Z' opening_balance: 5930.83 closing_balance: 3858.39 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '2000-01-24T03:41:45.000000Z' updated_at: '1980-07-19T10:10:38.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: b74c9b85-cdce-313b-ae9b-3fd800d1504a code: null opened_by: null opened_at: '2015-10-02T07:51:42.000000Z' closed_by: null closed_at: '1998-09-10T07:03:08.000000Z' opening_balance: 8619.96 closing_balance: 2680.28 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1973-06-19T05:22:55.000000Z' updated_at: '2021-06-09T21:50:38.000000Z' - id: e70f25ca-65d6-31c4-9709-fba21059870c code: null opened_by: null opened_at: '2024-01-30T21:18:56.000000Z' closed_by: null closed_at: '2008-09-14T16:04:26.000000Z' opening_balance: 5930.83 closing_balance: 3858.39 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '2000-01-24T03:41:45.000000Z' updated_at: '1980-07-19T10:10:38.000000Z' items: type: object properties: id: type: string example: b74c9b85-cdce-313b-ae9b-3fd800d1504a code: type: string example: null nullable: true opened_by: type: string example: null nullable: true opened_at: type: string example: '2015-10-02T07:51:42.000000Z' closed_by: type: string example: null nullable: true closed_at: type: string example: '1998-09-10T07:03:08.000000Z' opening_balance: type: number example: 8619.96 closing_balance: type: number example: 2680.28 total_income: type: integer example: 0 total_expense: type: integer example: 0 total_balance: type: integer example: 0 status: type: string example: Aberto created_at: type: string example: '1973-06-19T05:22:55.000000Z' updated_at: type: string example: '2021-06-09T21:50:38.000000Z' links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 2122272f-f397-3340-b326-0f73824e8314 code: null opened_by: null opened_at: '2007-08-05T10:08:21.000000Z' closed_by: null closed_at: '2001-04-27T20:43:33.000000Z' opening_balance: 3745.3 closing_balance: 5789.32 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1989-02-06T13:49:02.000000Z' updated_at: '2007-08-25T16:53:32.000000Z' properties: data: type: object properties: id: type: string example: 2122272f-f397-3340-b326-0f73824e8314 code: type: string example: null nullable: true opened_by: type: string example: null nullable: true opened_at: type: string example: '2007-08-05T10:08:21.000000Z' closed_by: type: string example: null nullable: true closed_at: type: string example: '2001-04-27T20:43:33.000000Z' opening_balance: type: number example: 3745.3 closing_balance: type: number example: 5789.32 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: '1989-02-06T13:49:02.000000Z' updated_at: type: string example: '2007-08-25T16:53:32.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: 5843c834-66a7-3904-9150-56c7fee0cc69 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: a9920e4d-6dfe-3bdd-a125-b386cd621b41 code: null opened_by: null opened_at: '2015-07-30T06:04:55.000000Z' closed_by: null closed_at: '2013-10-09T17:07:29.000000Z' opening_balance: 8850.56 closing_balance: 7069.37 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '2011-07-26T01:25:48.000000Z' updated_at: '1978-09-11T02:30:55.000000Z' properties: data: type: object properties: id: type: string example: a9920e4d-6dfe-3bdd-a125-b386cd621b41 code: type: string example: null nullable: true opened_by: type: string example: null nullable: true opened_at: type: string example: '2015-07-30T06:04:55.000000Z' closed_by: type: string example: null nullable: true closed_at: type: string example: '2013-10-09T17:07:29.000000Z' opening_balance: type: number example: 8850.56 closing_balance: type: number example: 7069.37 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: '2011-07-26T01:25:48.000000Z' updated_at: type: string example: '1978-09-11T02:30:55.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: 6b859196-afda-3939-951b-cb4da589e427 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: e040150a-79b6-3cad-97ea-7c88c962ba06 name: 'Hugo Mário da Rosa Sobrinho' email: diogo97@example.com phone: '(27) 93932-7063' document: 198.349.253-10 type: pj responsible: 'Sr. Jorge Solano de Souza 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 - id: de5c49c1-0c24-36ce-8f42-3ea3367377d5 name: 'Iasmin Bezerra Barros Sobrinho' email: fabricio71@example.org phone: '(34) 90381-3107' document: 983.519.782-21 type: pj responsible: 'Aparecida Léia Caldeira 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: e040150a-79b6-3cad-97ea-7c88c962ba06 name: 'Hugo Mário da Rosa Sobrinho' email: diogo97@example.com phone: '(27) 93932-7063' document: 198.349.253-10 type: pj responsible: 'Sr. Jorge Solano de Souza 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 - id: de5c49c1-0c24-36ce-8f42-3ea3367377d5 name: 'Iasmin Bezerra Barros Sobrinho' email: fabricio71@example.org phone: '(34) 90381-3107' document: 983.519.782-21 type: pj responsible: 'Aparecida Léia Caldeira 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: e040150a-79b6-3cad-97ea-7c88c962ba06 name: type: string example: 'Hugo Mário da Rosa Sobrinho' email: type: string example: diogo97@example.com phone: type: string example: '(27) 93932-7063' document: type: string example: 198.349.253-10 type: type: string example: pj responsible: type: string example: 'Sr. Jorge Solano de Souza Filho' image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true address: type: object properties: street: type: string example: null nullable: true number: type: string example: null nullable: true complement: type: string example: null nullable: true neighborhood: type: string example: null nullable: true city: type: string example: null nullable: true state: type: string example: null nullable: true zip_code: type: string example: null nullable: true 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 nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 8ca9062c-795c-3f99-9c88-8e8153290ceb name: 'Sr. Fábio Ferreira' email: carolina.lourenco@example.net phone: '(81) 97870-9619' document: 704.573.031-40 type: pf responsible: 'Srta. Betina Gabrielle Ferminiano' 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: 8ca9062c-795c-3f99-9c88-8e8153290ceb name: type: string example: 'Sr. Fábio Ferreira' email: type: string example: carolina.lourenco@example.net phone: type: string example: '(81) 97870-9619' document: type: string example: 704.573.031-40 type: type: string example: pf responsible: type: string example: 'Srta. Betina Gabrielle Ferminiano' image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true address: type: object properties: street: type: string example: null nullable: true number: type: string example: null nullable: true complement: type: string example: null nullable: true neighborhood: type: string example: null nullable: true city: type: string example: null nullable: true state: type: string example: null nullable: true zip_code: type: string example: null nullable: true 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: 2 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: 745ba4ac-9ac8-3863-9655-4c445b5078a9 name: 'Isadora Giovanna Zamana Sobrinho' description: 'Nulla in et molestiae ut. Ea harum excepturi odio voluptas quis. Debitis fuga rerum nulla ab impedit.' module: document - id: a66a7a44-c777-32bc-9003-7bbddab463af name: 'Dr. Caio Rogério Alcantara Jr.' description: 'Iste necessitatibus corporis iste tempore. Consequatur beatae quos ea consequuntur fugiat beatae quidem. Laudantium nulla sed non sunt voluptas.' 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: 745ba4ac-9ac8-3863-9655-4c445b5078a9 name: 'Isadora Giovanna Zamana Sobrinho' description: 'Nulla in et molestiae ut. Ea harum excepturi odio voluptas quis. Debitis fuga rerum nulla ab impedit.' module: document - id: a66a7a44-c777-32bc-9003-7bbddab463af name: 'Dr. Caio Rogério Alcantara Jr.' description: 'Iste necessitatibus corporis iste tempore. Consequatur beatae quos ea consequuntur fugiat beatae quidem. Laudantium nulla sed non sunt voluptas.' module: document items: type: object properties: id: type: string example: 745ba4ac-9ac8-3863-9655-4c445b5078a9 name: type: string example: 'Isadora Giovanna Zamana Sobrinho' description: type: string example: 'Nulla in et molestiae ut. Ea harum excepturi odio voluptas quis. Debitis fuga rerum nulla ab impedit.' 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 nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: bf6663b9-76d3-378b-9e40-e2490be66f64 name: 'Sra. Elisa Luciana Ferminiano' description: 'Aut et harum iusto quia. Similique quas eaque officiis deleniti sequi itaque. Nesciunt quo debitis recusandae praesentium libero dolor eos.' module: document properties: data: type: object properties: id: type: string example: bf6663b9-76d3-378b-9e40-e2490be66f64 name: type: string example: 'Sra. Elisa Luciana Ferminiano' description: type: string example: 'Aut et harum iusto quia. Similique quas eaque officiis deleniti sequi itaque. Nesciunt quo debitis recusandae praesentium libero dolor eos.' 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: eligendi 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: - voluptatibus required: false schema: type: array description: 'The uuid of an existing record in the document_categories table.' example: - voluptatibus 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: ratione required: false schema: type: string description: 'Type of the related documentable entity. The type of an existing record in the documentables table.' example: ratione nullable: true - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - ducimus required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - ducimus items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - quas required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - quas items: type: string responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 00cf771c-059e-339c-bdb0-edb217e3ddda name: 'Renato Martines' file: id: null url: null extension: null created_at: null updated_at: null - id: 54bed1b8-9cec-34f3-9a1c-23e60c8c2488 name: 'Srta. Valéria Emilly Rico Neto' 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: 00cf771c-059e-339c-bdb0-edb217e3ddda name: 'Renato Martines' file: id: null url: null extension: null created_at: null updated_at: null - id: 54bed1b8-9cec-34f3-9a1c-23e60c8c2488 name: 'Srta. Valéria Emilly Rico Neto' file: id: null url: null extension: null created_at: null updated_at: null items: type: object properties: id: type: string example: 00cf771c-059e-339c-bdb0-edb217e3ddda name: type: string example: 'Renato Martines' file: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true extension: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 17391be7-f325-351e-ac67-b316fe4f726d 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: 79c08168-0799-328b-92a9-bd8c46b2b0cc name: 'Leo Daniel Fernandes Filho' file: id: null url: null extension: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 79c08168-0799-328b-92a9-bd8c46b2b0cc name: type: string example: 'Leo Daniel Fernandes Filho' file: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true extension: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 4791ee29-8b81-3239-bc45-81fbab41637e 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: 2 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: db83c6ef-3b65-4d59-8a19-974827e51b78 name: quia description: null created_at: null updated_at: null - id: 262c4dc2-317f-4d5d-89cf-2134d2076520 name: in description: 'Quisquam sapiente est eos dolorem maiores totam vitae distinctio.' 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: db83c6ef-3b65-4d59-8a19-974827e51b78 name: quia description: null created_at: null updated_at: null - id: 262c4dc2-317f-4d5d-89cf-2134d2076520 name: in description: 'Quisquam sapiente est eos dolorem maiores totam vitae distinctio.' created_at: null updated_at: null items: type: object properties: id: type: string example: db83c6ef-3b65-4d59-8a19-974827e51b78 name: type: string example: quia description: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 5993de98-5f1b-4393-8a8e-251ace2f9310 name: omnis description: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 5993de98-5f1b-4393-8a8e-251ace2f9310 name: type: string example: omnis description: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: sed 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: 7e65c24d-0e99-4b07-be12-ad5254a31694 name: 'Andres Vale' cpf: 559.270.347-80 rg: '566728498' ctps: '451692333' phone: '(75) 4253-5385' birthdate: null email: vrosa@example.com pis_pasep: null admission_date: '2004-01-16T02:00:00.000000Z' daily_salary: null monthly_salary: '6695.19' nationality: Libéria place_of_birth: 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 - id: 20dd9402-dc9a-4035-8ef9-87580c88958a name: 'Guilherme Miguel Oliveira' cpf: 084.205.645-64 rg: '419985438' ctps: null phone: null birthdate: '2024-07-17T03:00:00.000000Z' email: null pis_pasep: '74891712594' admission_date: '2011-07-12T03:00:00.000000Z' daily_salary: '329.38' monthly_salary: '3086.45' nationality: null place_of_birth: 'Rivera do Norte' 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: 7e65c24d-0e99-4b07-be12-ad5254a31694 name: 'Andres Vale' cpf: 559.270.347-80 rg: '566728498' ctps: '451692333' phone: '(75) 4253-5385' birthdate: null email: vrosa@example.com pis_pasep: null admission_date: '2004-01-16T02:00:00.000000Z' daily_salary: null monthly_salary: '6695.19' nationality: Libéria place_of_birth: 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 - id: 20dd9402-dc9a-4035-8ef9-87580c88958a name: 'Guilherme Miguel Oliveira' cpf: 084.205.645-64 rg: '419985438' ctps: null phone: null birthdate: '2024-07-17T03:00:00.000000Z' email: null pis_pasep: '74891712594' admission_date: '2011-07-12T03:00:00.000000Z' daily_salary: '329.38' monthly_salary: '3086.45' nationality: null place_of_birth: 'Rivera do Norte' 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: 7e65c24d-0e99-4b07-be12-ad5254a31694 name: type: string example: 'Andres Vale' cpf: type: string example: 559.270.347-80 rg: type: string example: '566728498' ctps: type: string example: '451692333' phone: type: string example: '(75) 4253-5385' birthdate: type: string example: null nullable: true email: type: string example: vrosa@example.com pis_pasep: type: string example: null nullable: true admission_date: type: string example: '2004-01-16T02:00:00.000000Z' daily_salary: type: string example: null nullable: true monthly_salary: type: string example: '6695.19' nationality: type: string example: Libéria place_of_birth: type: string example: null nullable: true address: type: object properties: street: type: string example: null nullable: true number: type: string example: null nullable: true complement: type: string example: null nullable: true neighborhood: type: string example: null nullable: true city: type: string example: null nullable: true state: type: string example: null nullable: true zip_code: type: string example: null nullable: true employee_role: type: object properties: id: type: string example: null nullable: true name: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 9e4902b2-5075-42b7-a4d3-1bb9ed932e59 pis_pasep: type: string description: 'PIS/PASEP. O campo value deve ter 11 dígitos.' example: 'Example Pis pasep' nullable: true admission_date: type: string description: 'Data de Admissão. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true daily_salary: type: number description: 'Salário Diário. O campo value deve ser pelo menos 0.' example: 1.0 nullable: true monthly_salary: type: number description: 'Salário Mensal. O campo value deve ser pelo menos 0.' example: 1.0 nullable: true nationality: type: string description: 'Nacionalidade. O campo value não pode ser superior a 100 caracteres.' example: 'Example Nationality' nullable: true place_of_birth: type: string description: 'Naturalidade. O campo value não pode ser superior a 255 caracteres.' example: 'Example Place of birth' nullable: true 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: 593494c0-b0cc-4905-b569-f29755bb802a name: 'Sr. Evandro Sales' cpf: 887.395.368-34 rg: '284743997' ctps: '313982789' phone: '(91) 4849-8929' birthdate: '2010-01-22T02:00:00.000000Z' email: mario88@example.com pis_pasep: '12522313074' admission_date: '1990-05-22T03:00:00.000000Z' daily_salary: '381.00' monthly_salary: null nationality: Seychelles place_of_birth: 'Queirós do Sul' 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: 593494c0-b0cc-4905-b569-f29755bb802a name: type: string example: 'Sr. Evandro Sales' cpf: type: string example: 887.395.368-34 rg: type: string example: '284743997' ctps: type: string example: '313982789' phone: type: string example: '(91) 4849-8929' birthdate: type: string example: '2010-01-22T02:00:00.000000Z' email: type: string example: mario88@example.com pis_pasep: type: string example: '12522313074' admission_date: type: string example: '1990-05-22T03:00:00.000000Z' daily_salary: type: string example: '381.00' monthly_salary: type: string example: null nullable: true nationality: type: string example: Seychelles place_of_birth: type: string example: 'Queirós do Sul' address: type: object properties: street: type: string example: null nullable: true number: type: string example: null nullable: true complement: type: string example: null nullable: true neighborhood: type: string example: null nullable: true city: type: string example: null nullable: true state: type: string example: null nullable: true zip_code: type: string example: null nullable: true employee_role: type: object properties: id: type: string example: null nullable: true name: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 1aea82fb-db76-4270-93d2-2ab0a0431b2e pis_pasep: type: string description: 'PIS/PASEP. O campo value deve ter 11 dígitos.' example: 'Example Pis pasep' nullable: true admission_date: type: string description: 'Data de Admissão. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true daily_salary: type: number description: 'Salário Diário. O campo value deve ser pelo menos 0.' example: 1.0 nullable: true monthly_salary: type: number description: 'Salário Mensal. O campo value deve ser pelo menos 0.' example: 1.0 nullable: true nationality: type: string description: 'Nacionalidade. O campo value não pode ser superior a 100 caracteres.' example: 'Example Nationality' nullable: true place_of_birth: type: string description: 'Naturalidade. O campo value não pode ser superior a 255 caracteres.' example: 'Example Place of birth' 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 employee.' example: 19 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/employees/{employee_id}/bank-account': get: summary: 'List employee bank accounts' operationId: listEmployeeBankAccounts description: 'List all bank accounts for an employee' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Employees post: summary: 'Create employee bank account' operationId: createEmployeeBankAccount description: 'Add a bank account to an employee' parameters: [] responses: 201: description: '' content: application/json: schema: type: object nullable: true tags: - Employees requestBody: required: true content: application/json: schema: type: object properties: bank_id: type: string description: 'The uuid of an existing record in the banks table.' example: praesentium agency: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: mauhsn account: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: fzgbyednmt account_type: type: string description: '' example: poupança enum: - corrente - poupança pix_key: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: xqnmenlhbgrorvhpxyvvnjcs nullable: true favorite: type: boolean description: '' example: false required: - bank_id - agency - account - account_type parameters: - in: path name: employee_id description: 'The ID of the employee.' example: 4 required: true schema: type: integer - in: path name: employee description: 'Employee UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/employees/{employee_id}/bank-account/{id}': put: summary: 'Update employee bank account' operationId: updateEmployeeBankAccount description: 'Update a bank account for an employee' parameters: [] responses: { } tags: - Employees requestBody: required: false content: application/json: schema: type: object properties: bank_id: type: string description: 'The uuid of an existing record in the banks table.' example: modi agency: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: rsivno account: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: csitla account_type: type: string description: '' example: poupança enum: - corrente - poupança pix_key: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: vfhvfwdu nullable: true favorite: type: boolean description: '' example: true parameters: - in: path name: employee_id description: 'The ID of the employee.' example: 12 required: true schema: type: integer - in: path name: id description: 'Bank account UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c33 required: true schema: type: string - in: path name: employee description: 'Employee UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/employees/{employee}/bank-account/{id}': delete: summary: 'Delete employee bank account' operationId: deleteEmployeeBankAccount description: 'Delete a bank account from an employee' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Employees parameters: - in: path name: employee description: 'Employee UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string - in: path name: id description: 'Bank account UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c33 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: 0a42ebb3-7a32-36a9-8dc7-d2940ec5273b 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: 66e850c1-3644-3b9b-9d36-b00c4e471fea 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: 2bd43f62-7904-3d39-8968-95fab2039ca9 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: true 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: true 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: placeat 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 nullable: true linked_at: type: string example: null nullable: true linked_by: type: string example: null nullable: true 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: quo 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: - ab items: type: string required: - mappings parameters: - in: path name: importId description: '' example: consequatur 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: quae required: false schema: type: string description: '' example: quae - in: query name: document description: '' example: id required: false schema: type: string description: '' example: id - 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: ffef6b85-d2af-3e13-b43a-70e1b7021eb0 receipt_number: REC-4862 receiver_type: custom receiver: id: null name: 'Kiarra Collier' document: 704.093.867-65 payment: amount: 452.67 amount_in_words: 'Valor por extenso de teste' method: pix description: 'Et similique ut debitis deleniti est.' issuer: name: 'Hoppe, Cummerata and Fisher' document: 12.192.290/2656-94 issue: date: '2026-04-12' city: 'South Dana' state: PR created_by: id: a1ad8856-200c-45df-abd3-c8605f47de7d name: 'Ms. Libby Jaskolski Sr.' created_at: null updated_at: null - id: ee1fe31c-16ed-35f9-a220-a05717d417f7 receipt_number: REC-5928 receiver_type: custom receiver: id: null name: 'Dr. Alfonzo Lebsack' document: 652.691.795-62 payment: amount: 7484.01 amount_in_words: 'Valor por extenso de teste' method: cash description: 'Velit aut enim delectus dicta harum omnis accusantium aut.' issuer: name: 'Herzog, Dibbert and Runolfsdottir' document: 69.047.638/0123-47 issue: date: '2026-04-13' city: 'Lake Joanbury' state: MG created_by: id: a1ad8856-269f-43f9-b85a-fb48bd57d455 name: 'Ms. Viva Kling' 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: ffef6b85-d2af-3e13-b43a-70e1b7021eb0 receipt_number: REC-4862 receiver_type: custom receiver: id: null name: 'Kiarra Collier' document: 704.093.867-65 payment: amount: 452.67 amount_in_words: 'Valor por extenso de teste' method: pix description: 'Et similique ut debitis deleniti est.' issuer: name: 'Hoppe, Cummerata and Fisher' document: 12.192.290/2656-94 issue: date: '2026-04-12' city: 'South Dana' state: PR created_by: id: a1ad8856-200c-45df-abd3-c8605f47de7d name: 'Ms. Libby Jaskolski Sr.' created_at: null updated_at: null - id: ee1fe31c-16ed-35f9-a220-a05717d417f7 receipt_number: REC-5928 receiver_type: custom receiver: id: null name: 'Dr. Alfonzo Lebsack' document: 652.691.795-62 payment: amount: 7484.01 amount_in_words: 'Valor por extenso de teste' method: cash description: 'Velit aut enim delectus dicta harum omnis accusantium aut.' issuer: name: 'Herzog, Dibbert and Runolfsdottir' document: 69.047.638/0123-47 issue: date: '2026-04-13' city: 'Lake Joanbury' state: MG created_by: id: a1ad8856-269f-43f9-b85a-fb48bd57d455 name: 'Ms. Viva Kling' created_at: null updated_at: null items: type: object properties: id: type: string example: ffef6b85-d2af-3e13-b43a-70e1b7021eb0 receipt_number: type: string example: REC-4862 receiver_type: type: string example: custom receiver: type: object properties: id: type: string example: null nullable: true name: type: string example: 'Kiarra Collier' document: type: string example: 704.093.867-65 payment: type: object properties: amount: type: number example: 452.67 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: pix description: type: string example: 'Et similique ut debitis deleniti est.' issuer: type: object properties: name: type: string example: 'Hoppe, Cummerata and Fisher' document: type: string example: 12.192.290/2656-94 issue: type: object properties: date: type: string example: '2026-04-12' city: type: string example: 'South Dana' state: type: string example: PR created_by: type: object properties: id: type: string example: a1ad8856-200c-45df-abd3-c8605f47de7d name: type: string example: 'Ms. Libby Jaskolski Sr.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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 nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: fdcd8f57-8667-48d8-8ff0-8b84b9c88981 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: 2cca4f88-6a4a-3b3e-a7fe-15f855547155 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: f81d40f5-1c3c-317f-9684-4f346475540c 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: 0bf048ae-95fe-3d5b-9bfc-be5a6498ad9f receipt_number: REC-4177 receiver_type: custom receiver: id: null name: 'Kelley Lang' document: 015.012.187-95 payment: amount: 6284.59 amount_in_words: 'Valor por extenso de teste' method: bank_transfer description: 'Est distinctio magni dolore facere quis et.' issuer: name: 'Bogan, Von and Luettgen' document: 75.243.234/0330-95 issue: date: '2026-04-22' city: Ratkemouth state: PE created_by: id: a1ad8856-2d9e-494d-81ba-32ced1e85c24 name: 'Aletha Wilkinson' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 0bf048ae-95fe-3d5b-9bfc-be5a6498ad9f receipt_number: type: string example: REC-4177 receiver_type: type: string example: custom receiver: type: object properties: id: type: string example: null nullable: true name: type: string example: 'Kelley Lang' document: type: string example: 015.012.187-95 payment: type: object properties: amount: type: number example: 6284.59 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: bank_transfer description: type: string example: 'Est distinctio magni dolore facere quis et.' issuer: type: object properties: name: type: string example: 'Bogan, Von and Luettgen' document: type: string example: 75.243.234/0330-95 issue: type: object properties: date: type: string example: '2026-04-22' city: type: string example: Ratkemouth state: type: string example: PE created_by: type: object properties: id: type: string example: a1ad8856-2d9e-494d-81ba-32ced1e85c24 name: type: string example: 'Aletha Wilkinson' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 6415568f-522c-4660-addf-d183d88f307b 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: 23e853fa-25d5-3674-9c14-e8b68063116a 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: 3cd849dc-66ef-3ca8-ae76-37c635cb7286 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: 493ac34b-a032-316d-88c2-0fcfa1e9dd13 receipt_number: REC-8693 receiver_type: custom receiver: id: null name: 'Ursula Mayer' document: 035.489.018-80 payment: amount: 5128.61 amount_in_words: 'Valor por extenso de teste' method: cash description: 'Est sit voluptas mollitia magnam ea minima vel.' issuer: name: "Koelpin-O'Keefe" document: 55.311.990/0778-71 issue: date: '2026-04-08' city: Funkburgh state: MG created_by: id: a1ad8856-47a3-40ce-89db-9adae6404848 name: 'Ms. Amanda Herzog' created_at: null updated_at: null - id: 116cb206-65f9-3add-9e11-de004b7762c2 receipt_number: REC-5348 receiver_type: employee receiver: id: null name: 'Prof. Rolando Howell IV' document: 165.751.219-77 payment: amount: 1700.88 amount_in_words: 'Valor por extenso de teste' method: pix description: 'Qui sed et illum voluptatem et sunt.' issuer: name: 'VonRueden Group' document: 34.672.067/3746-04 issue: date: '2026-04-18' city: 'West Kadinburgh' state: PE created_by: id: a1ad8856-4a69-4c57-86ec-6bea545f1a66 name: 'Prof. Lexus Boyle' 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: 493ac34b-a032-316d-88c2-0fcfa1e9dd13 receipt_number: REC-8693 receiver_type: custom receiver: id: null name: 'Ursula Mayer' document: 035.489.018-80 payment: amount: 5128.61 amount_in_words: 'Valor por extenso de teste' method: cash description: 'Est sit voluptas mollitia magnam ea minima vel.' issuer: name: "Koelpin-O'Keefe" document: 55.311.990/0778-71 issue: date: '2026-04-08' city: Funkburgh state: MG created_by: id: a1ad8856-47a3-40ce-89db-9adae6404848 name: 'Ms. Amanda Herzog' created_at: null updated_at: null - id: 116cb206-65f9-3add-9e11-de004b7762c2 receipt_number: REC-5348 receiver_type: employee receiver: id: null name: 'Prof. Rolando Howell IV' document: 165.751.219-77 payment: amount: 1700.88 amount_in_words: 'Valor por extenso de teste' method: pix description: 'Qui sed et illum voluptatem et sunt.' issuer: name: 'VonRueden Group' document: 34.672.067/3746-04 issue: date: '2026-04-18' city: 'West Kadinburgh' state: PE created_by: id: a1ad8856-4a69-4c57-86ec-6bea545f1a66 name: 'Prof. Lexus Boyle' created_at: null updated_at: null items: type: object properties: id: type: string example: 493ac34b-a032-316d-88c2-0fcfa1e9dd13 receipt_number: type: string example: REC-8693 receiver_type: type: string example: custom receiver: type: object properties: id: type: string example: null nullable: true name: type: string example: 'Ursula Mayer' document: type: string example: 035.489.018-80 payment: type: object properties: amount: type: number example: 5128.61 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: cash description: type: string example: 'Est sit voluptas mollitia magnam ea minima vel.' issuer: type: object properties: name: type: string example: "Koelpin-O'Keefe" document: type: string example: 55.311.990/0778-71 issue: type: object properties: date: type: string example: '2026-04-08' city: type: string example: Funkburgh state: type: string example: MG created_by: type: object properties: id: type: string example: a1ad8856-47a3-40ce-89db-9adae6404848 name: type: string example: 'Ms. Amanda Herzog' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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 nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 3 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: 238d1ced-09dd-3eee-b0d1-71b0047562d5 name: est-minima display_name: 'architecto vel autem' created_at: null updated_at: null - id: a70e4658-1b57-346d-8dad-42508c356328 name: eos-qui display_name: 'sint voluptatem aspernatur' 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: 238d1ced-09dd-3eee-b0d1-71b0047562d5 name: est-minima display_name: 'architecto vel autem' created_at: null updated_at: null - id: a70e4658-1b57-346d-8dad-42508c356328 name: eos-qui display_name: 'sint voluptatem aspernatur' created_at: null updated_at: null items: type: object properties: id: type: string example: 238d1ced-09dd-3eee-b0d1-71b0047562d5 name: type: string example: est-minima display_name: type: string example: 'architecto vel autem' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: e8ed831c-63f9-3c94-94e6-985de0411a99 name: sed-sit-et display_name: 'praesentium qui nihil' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: e8ed831c-63f9-3c94-94e6-985de0411a99 name: type: string example: sed-sit-et display_name: type: string example: 'praesentium qui nihil' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 3dcfc590-6477-37e2-8045-f3439aaf71f0 name: 'Elizabeth de Souza' created_at: null updated_at: null - id: b364f4c7-c66a-3d69-9b3e-afc60f15ef27 name: 'Flávio Sepúlveda Campos' 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: 3dcfc590-6477-37e2-8045-f3439aaf71f0 name: 'Elizabeth de Souza' created_at: null updated_at: null - id: b364f4c7-c66a-3d69-9b3e-afc60f15ef27 name: 'Flávio Sepúlveda Campos' created_at: null updated_at: null items: type: object properties: id: type: string example: 3dcfc590-6477-37e2-8045-f3439aaf71f0 name: type: string example: 'Elizabeth de Souza' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 0a5ed127-3b2f-3852-9f6a-18f260e33678 name: 'Srta. Letícia Naiara Garcia Neto' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 0a5ed127-3b2f-3852-9f6a-18f260e33678 name: type: string example: 'Srta. Letícia Naiara Garcia Neto' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: ea 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: d06b6450-9b80-3dff-9ac2-54ff11586aec name: 'James Robson Padilha' created_at: null updated_at: null - id: e785f71d-61ef-30d7-af93-17289cfb15df name: 'Sr. Inácio Maximiano Esteves' 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: d06b6450-9b80-3dff-9ac2-54ff11586aec name: 'James Robson Padilha' created_at: null updated_at: null - id: e785f71d-61ef-30d7-af93-17289cfb15df name: 'Sr. Inácio Maximiano Esteves' created_at: null updated_at: null items: type: object properties: id: type: string example: d06b6450-9b80-3dff-9ac2-54ff11586aec name: type: string example: 'James Robson Padilha' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 7740cd29-e9d7-3c3c-8665-51e189eb9c62 name: 'Sr. Maicon Espinoza Sobrinho' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 7740cd29-e9d7-3c3c-8665-51e189eb9c62 name: type: string example: 'Sr. Maicon Espinoza Sobrinho' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: voluptas 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: 20fc635d-9d65-3bcc-abd0-ae4eec248efa name: 'Ut rerum non aut.' description: null work: id: a1ad8856-db1f-49dc-93cb-06a0249d803e name: 'Dr. Fátima Fernanda Faria' user: id: a1ad8856-decf-4021-9846-29ff2f6dcc34 name: 'Aniyah Fadel' created_at: null updated_at: null - id: a7a88239-498c-346b-9c09-dbc87ab64fab name: 'Accusantium et.' description: null work: id: a1ad8856-e228-41d8-ab1b-1d26e674fdb2 name: 'Sr. Edilson Cortês' user: id: a1ad8856-e4d8-4622-ba7a-de992fc5c21f name: 'Elissa Moen' 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: 20fc635d-9d65-3bcc-abd0-ae4eec248efa name: 'Ut rerum non aut.' description: null work: id: a1ad8856-db1f-49dc-93cb-06a0249d803e name: 'Dr. Fátima Fernanda Faria' user: id: a1ad8856-decf-4021-9846-29ff2f6dcc34 name: 'Aniyah Fadel' created_at: null updated_at: null - id: a7a88239-498c-346b-9c09-dbc87ab64fab name: 'Accusantium et.' description: null work: id: a1ad8856-e228-41d8-ab1b-1d26e674fdb2 name: 'Sr. Edilson Cortês' user: id: a1ad8856-e4d8-4622-ba7a-de992fc5c21f name: 'Elissa Moen' created_at: null updated_at: null items: type: object properties: id: type: string example: 20fc635d-9d65-3bcc-abd0-ae4eec248efa name: type: string example: 'Ut rerum non aut.' description: type: string example: null nullable: true work: type: object properties: id: type: string example: a1ad8856-db1f-49dc-93cb-06a0249d803e name: type: string example: 'Dr. Fátima Fernanda Faria' user: type: object properties: id: type: string example: a1ad8856-decf-4021-9846-29ff2f6dcc34 name: type: string example: 'Aniyah Fadel' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 1178af1a-92ac-3761-ad8b-8e14147d7610 nullable: true user_id: type: string description: 'Usuário. The uuid of an existing record in the users table.' example: 61d6537d-dbca-3c0f-8f72-a5c73ffb251c nullable: true responsible_id: type: string description: 'Responsável. The uuid of an existing record in the users table.' example: ffd8c92a-dbc3-378e-b6ab-ef16d290821a 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: true 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: 29f04303-9f54-3dd3-bf0d-8eaf607f3d83 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: bd7250f4-4e53-35f4-8d79-747f8d017132 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: 526d8d1e-fdcc-3259-8098-9dada80f9204 name: 'Iusto molestias tenetur magnam dolor.' description: null work: id: a1ad8856-ec37-49d9-af17-4359982512fa name: 'Rebeca Ortiz Ávila Filho' user: id: a1ad8856-ef59-42c5-a66b-7bf439b3b43d name: 'Prof. Timothy Hoppe DVM' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 526d8d1e-fdcc-3259-8098-9dada80f9204 name: type: string example: 'Iusto molestias tenetur magnam dolor.' description: type: string example: null nullable: true work: type: object properties: id: type: string example: a1ad8856-ec37-49d9-af17-4359982512fa name: type: string example: 'Rebeca Ortiz Ávila Filho' user: type: object properties: id: type: string example: a1ad8856-ef59-42c5-a66b-7bf439b3b43d name: type: string example: 'Prof. Timothy Hoppe DVM' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 3eb4c3dc-380f-321f-8267-fd928827d1db product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: f76ba25d-fc95-3713-a62b-b045892d9c48 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: impedit 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: 58d46546-1334-38f1-a7d5-699126847d1a product: id: a1ad8857-0644-401d-960c-539feac3ba33 name: 'Louise Lourenço Grego' code: PRD-673150 unit: id: a1ad8857-0435-4bf1-bcc1-04a808ebfcd9 name: 'Dr. Aurora Ingrid Lourenço Sobrinho' abbreviation: 'Sr. Maicon Simão Correia' quantity: 480.5684 observation: null created_at: null updated_at: null - id: 5b4dee8e-374e-349c-bd29-4497556653a2 product: id: a1ad8857-1627-4882-bb6b-230e52bbfd09 name: 'Sr. Matias Galindo' code: PRD-186951 unit: id: a1ad8857-14bd-4ebc-8f34-1c90f407fe35 name: 'Dr. Cezar Delgado Gonçalves' abbreviation: 'Sra. Mirella Marinho Vieira' quantity: 55.3758 observation: 'Aut sed explicabo aut.' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 58d46546-1334-38f1-a7d5-699126847d1a product: id: a1ad8857-0644-401d-960c-539feac3ba33 name: 'Louise Lourenço Grego' code: PRD-673150 unit: id: a1ad8857-0435-4bf1-bcc1-04a808ebfcd9 name: 'Dr. Aurora Ingrid Lourenço Sobrinho' abbreviation: 'Sr. Maicon Simão Correia' quantity: 480.5684 observation: null created_at: null updated_at: null - id: 5b4dee8e-374e-349c-bd29-4497556653a2 product: id: a1ad8857-1627-4882-bb6b-230e52bbfd09 name: 'Sr. Matias Galindo' code: PRD-186951 unit: id: a1ad8857-14bd-4ebc-8f34-1c90f407fe35 name: 'Dr. Cezar Delgado Gonçalves' abbreviation: 'Sra. Mirella Marinho Vieira' quantity: 55.3758 observation: 'Aut sed explicabo aut.' created_at: null updated_at: null items: type: object properties: id: type: string example: 58d46546-1334-38f1-a7d5-699126847d1a product: type: object properties: id: type: string example: a1ad8857-0644-401d-960c-539feac3ba33 name: type: string example: 'Louise Lourenço Grego' code: type: string example: PRD-673150 unit: type: object properties: id: type: string example: a1ad8857-0435-4bf1-bcc1-04a808ebfcd9 name: type: string example: 'Dr. Aurora Ingrid Lourenço Sobrinho' abbreviation: type: string example: 'Sr. Maicon Simão Correia' quantity: type: number example: 480.5684 observation: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 6a089807-cd9b-374d-aa12-7ddfb80acb29 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: - ac8b7f69-9396-3b09-8602-dbfdf7f12d17 items: type: string required: - items parameters: - in: path name: productQuantityList description: 'Product Quantity List UUID' example: porro 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: praesentium required: true schema: type: string - in: path name: item description: 'Product Quantity List Item UUID' example: alias 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: 22369358-61c4-32c8-b04e-111853283431 product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 2cb45810-3951-39ce-b2ae-aa2126c9ecd2 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: nulla 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: 3f6d2ba7-8758-3ae1-9c91-09e9398a64e8 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: 41d442fd-dcfb-3718-ac7b-7258b712c736 nullable: true reason: type: string description: 'Motivo. O campo value não pode ser superior a 500 caracteres.' example: 'Example Reason' nullable: true origins: type: array description: 'Origens (NFs).' example: - null - null items: type: object nullable: true properties: supplier_product_id: type: string description: 'NF de origem. This field is required when origins is present. The uuid of an existing record in the supplier_products table.' example: 9fa15d69-6c5d-3405-8e6c-da7873603765 quantity: type: number description: 'Quantidade da origem. This field is required when origins is present. O campo value deve ser pelo menos 0.0001.' example: 1.0 required: - fulfillment_type - quantity parameters: - in: path name: item description: 'Product Request Item UUID' example: dolorem 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: 838191be-480f-377b-93c2-1e45ee231a6e quantity: 3.2194 fulfilled_at: '2026-04-03T13:51:21.000000Z' created_at: null - id: 65317052-8264-3d2c-813f-34d82600e846 quantity: 12.7977 fulfilled_at: '2026-04-26T20:26:03.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: 838191be-480f-377b-93c2-1e45ee231a6e quantity: 3.2194 fulfilled_at: '2026-04-03T13:51:21.000000Z' created_at: null - id: 65317052-8264-3d2c-813f-34d82600e846 quantity: 12.7977 fulfilled_at: '2026-04-26T20:26:03.000000Z' created_at: null items: type: object properties: id: type: string example: 838191be-480f-377b-93c2-1e45ee231a6e quantity: type: number example: 3.2194 fulfilled_at: type: string example: '2026-04-03T13:51:21.000000Z' created_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: quam 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: fc7da31e-f586-3618-9a02-4d8c4ea82e95 product: id: a1ad885a-d996-4dbb-99fc-6e11a58689a3 name: 'Danielle de Arruda Delgado Sobrinho' code: PRD-271399 unit: id: a1ad885a-d813-466a-ad88-361208634f2e name: 'Dr. Filipe Luciano Pacheco Filho' abbreviation: 'Sra. Mariah Delvalle Salas' quantity: 785.5152 quantity_fulfilled: 0 quantity_pending: 785.5152 is_fulfilled: false is_partially_fulfilled: false observation: 'Error sit libero laudantium voluptas architecto dolore qui.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: fc7da31e-f586-3618-9a02-4d8c4ea82e95 product: type: object properties: id: type: string example: a1ad885a-d996-4dbb-99fc-6e11a58689a3 name: type: string example: 'Danielle de Arruda Delgado Sobrinho' code: type: string example: PRD-271399 unit: type: object properties: id: type: string example: a1ad885a-d813-466a-ad88-361208634f2e name: type: string example: 'Dr. Filipe Luciano Pacheco Filho' abbreviation: type: string example: 'Sra. Mariah Delvalle Salas' quantity: type: number example: 785.5152 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 785.5152 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: 'Error sit libero laudantium voluptas architecto dolore qui.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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 status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: a7a83d4f-3ffa-3696-8114-519e5ef03187 nullable: true parameters: - in: path name: id description: 'The ID of the item.' example: quam required: true schema: type: string - in: path name: item description: 'Product Request Item UUID' example: pariatur 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: 5a5a19d4-1fcd-3a06-857c-b7c62ff7d039 product: id: a1ad885a-f470-4efa-8602-b0b51dbae746 name: 'Wellington Rosa Matias' code: PRD-652043 unit: id: a1ad885a-f30b-49a2-97b0-0e346e8d4897 name: 'Sra. Sophia Corona Madeira' abbreviation: 'Sra. Heloise Luna Grego' quantity: 615.9482 quantity_fulfilled: 0 quantity_pending: 615.9482 is_fulfilled: false is_partially_fulfilled: false observation: 'Maxime ea modi eos dolor id.' created_at: null updated_at: null - id: b670b24b-56b2-3b8f-ac4e-573cfbc2e2cb product: id: a1ad885b-06dd-4c19-b3f3-2060e80a8a3c name: 'Mateus Padilha Tamoio Filho' code: PRD-413221 unit: id: a1ad885b-056e-4d4e-a278-6cea3c01ccff name: 'Dr. Sara Lorena Estrada Filho' abbreviation: 'Carla Mirella Valente' quantity: 56.8181 quantity_fulfilled: 0 quantity_pending: 56.8181 is_fulfilled: false is_partially_fulfilled: false observation: 'Consectetur vitae consequuntur aut quasi.' 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: 5a5a19d4-1fcd-3a06-857c-b7c62ff7d039 product: id: a1ad885a-f470-4efa-8602-b0b51dbae746 name: 'Wellington Rosa Matias' code: PRD-652043 unit: id: a1ad885a-f30b-49a2-97b0-0e346e8d4897 name: 'Sra. Sophia Corona Madeira' abbreviation: 'Sra. Heloise Luna Grego' quantity: 615.9482 quantity_fulfilled: 0 quantity_pending: 615.9482 is_fulfilled: false is_partially_fulfilled: false observation: 'Maxime ea modi eos dolor id.' created_at: null updated_at: null - id: b670b24b-56b2-3b8f-ac4e-573cfbc2e2cb product: id: a1ad885b-06dd-4c19-b3f3-2060e80a8a3c name: 'Mateus Padilha Tamoio Filho' code: PRD-413221 unit: id: a1ad885b-056e-4d4e-a278-6cea3c01ccff name: 'Dr. Sara Lorena Estrada Filho' abbreviation: 'Carla Mirella Valente' quantity: 56.8181 quantity_fulfilled: 0 quantity_pending: 56.8181 is_fulfilled: false is_partially_fulfilled: false observation: 'Consectetur vitae consequuntur aut quasi.' created_at: null updated_at: null items: type: object properties: id: type: string example: 5a5a19d4-1fcd-3a06-857c-b7c62ff7d039 product: type: object properties: id: type: string example: a1ad885a-f470-4efa-8602-b0b51dbae746 name: type: string example: 'Wellington Rosa Matias' code: type: string example: PRD-652043 unit: type: object properties: id: type: string example: a1ad885a-f30b-49a2-97b0-0e346e8d4897 name: type: string example: 'Sra. Sophia Corona Madeira' abbreviation: type: string example: 'Sra. Heloise Luna Grego' quantity: type: number example: 615.9482 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 615.9482 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: 'Maxime ea modi eos dolor id.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: quam 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: 182d4ce9-8326-34f7-ae4f-77e160ded62d product: id: a1ad885b-1eeb-46a5-8018-a5a04669afe0 name: 'Richard Valentin Neto' code: PRD-134066 unit: id: a1ad885b-1d6f-4eea-8b59-d2fda2efae58 name: 'Naomi Benez Santacruz Jr.' abbreviation: 'Srta. Cecília Bezerra Filho' quantity: 217.2117 quantity_fulfilled: 0 quantity_pending: 217.2117 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: c106e760-ff31-3e7e-aa6b-4d803d91e6f8 product: id: a1ad885b-4090-425c-902f-0f87d3e91232 name: 'Jasmin Santos Amaral' code: PRD-739243 unit: id: a1ad885b-3e5c-452e-9075-cc3a60bcb696 name: 'Dr. Laiane Deverso' abbreviation: 'Fátima Caldeira Burgos Sobrinho' quantity: 336.1281 quantity_fulfilled: 0 quantity_pending: 336.1281 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null properties: data: type: array example: - id: 182d4ce9-8326-34f7-ae4f-77e160ded62d product: id: a1ad885b-1eeb-46a5-8018-a5a04669afe0 name: 'Richard Valentin Neto' code: PRD-134066 unit: id: a1ad885b-1d6f-4eea-8b59-d2fda2efae58 name: 'Naomi Benez Santacruz Jr.' abbreviation: 'Srta. Cecília Bezerra Filho' quantity: 217.2117 quantity_fulfilled: 0 quantity_pending: 217.2117 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: c106e760-ff31-3e7e-aa6b-4d803d91e6f8 product: id: a1ad885b-4090-425c-902f-0f87d3e91232 name: 'Jasmin Santos Amaral' code: PRD-739243 unit: id: a1ad885b-3e5c-452e-9075-cc3a60bcb696 name: 'Dr. Laiane Deverso' abbreviation: 'Fátima Caldeira Burgos Sobrinho' quantity: 336.1281 quantity_fulfilled: 0 quantity_pending: 336.1281 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null items: type: object properties: id: type: string example: 182d4ce9-8326-34f7-ae4f-77e160ded62d product: type: object properties: id: type: string example: a1ad885b-1eeb-46a5-8018-a5a04669afe0 name: type: string example: 'Richard Valentin Neto' code: type: string example: PRD-134066 unit: type: object properties: id: type: string example: a1ad885b-1d6f-4eea-8b59-d2fda2efae58 name: type: string example: 'Naomi Benez Santacruz Jr.' abbreviation: type: string example: 'Srta. Cecília Bezerra Filho' quantity: type: number example: 217.2117 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 217.2117 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true tags: - 'Product Request Fulfillment' parameters: - in: path name: product description: 'Product UUID' example: expedita 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: ba40db12-049b-3b50-8573-41bc4e87a5db code: null name: 'Inventore voluptatem iste eos.' description: 'Minima deleniti soluta omnis cum sit dolor voluptas nostrum. Est omnis sapiente perferendis unde. Distinctio atque id suscipit dolorem recusandae.' work: id: a1ad8858-393b-44af-87f3-3b2335292490 name: 'Maicon Marin' user: id: a1ad8858-3c96-474c-b544-45b26af03578 name: 'Mrs. Clarissa Padberg Sr.' status: id: a1ad8858-3fcf-4db4-8cac-55d9d80727a3 slug: null name: null description: 'Márcio Rios' abbreviation: sit color: '#f1af35' text_color: '#817426' priority: urgent priority_label: Urgente needed_at: '2026-05-18' approved_at: null rejection_reason: null created_at: null updated_at: null - id: 71325ec6-c3f4-3d99-9e26-4616eacd29cd code: null name: 'Facere et velit.' description: null work: id: a1ad8858-4489-41c8-818e-6333700b2d36 name: 'Denise Fernandes' user: id: a1ad8858-474d-4b29-a5b5-24b9494ae0f6 name: 'Ricardo Marquardt' status: id: a1ad8858-491e-4647-a20d-50a3d6f80963 slug: null name: null description: 'Cynthia Carvalho Branco' abbreviation: non color: '#700432' text_color: '#c67883' priority: low priority_label: Baixa needed_at: null approved_at: null rejection_reason: null created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: ba40db12-049b-3b50-8573-41bc4e87a5db code: null name: 'Inventore voluptatem iste eos.' description: 'Minima deleniti soluta omnis cum sit dolor voluptas nostrum. Est omnis sapiente perferendis unde. Distinctio atque id suscipit dolorem recusandae.' work: id: a1ad8858-393b-44af-87f3-3b2335292490 name: 'Maicon Marin' user: id: a1ad8858-3c96-474c-b544-45b26af03578 name: 'Mrs. Clarissa Padberg Sr.' status: id: a1ad8858-3fcf-4db4-8cac-55d9d80727a3 slug: null name: null description: 'Márcio Rios' abbreviation: sit color: '#f1af35' text_color: '#817426' priority: urgent priority_label: Urgente needed_at: '2026-05-18' approved_at: null rejection_reason: null created_at: null updated_at: null - id: 71325ec6-c3f4-3d99-9e26-4616eacd29cd code: null name: 'Facere et velit.' description: null work: id: a1ad8858-4489-41c8-818e-6333700b2d36 name: 'Denise Fernandes' user: id: a1ad8858-474d-4b29-a5b5-24b9494ae0f6 name: 'Ricardo Marquardt' status: id: a1ad8858-491e-4647-a20d-50a3d6f80963 slug: null name: null description: 'Cynthia Carvalho Branco' abbreviation: non color: '#700432' text_color: '#c67883' priority: low priority_label: Baixa needed_at: null approved_at: null rejection_reason: null created_at: null updated_at: null items: type: object properties: id: type: string example: ba40db12-049b-3b50-8573-41bc4e87a5db code: type: string example: null nullable: true name: type: string example: 'Inventore voluptatem iste eos.' description: type: string example: 'Minima deleniti soluta omnis cum sit dolor voluptas nostrum. Est omnis sapiente perferendis unde. Distinctio atque id suscipit dolorem recusandae.' work: type: object properties: id: type: string example: a1ad8858-393b-44af-87f3-3b2335292490 name: type: string example: 'Maicon Marin' user: type: object properties: id: type: string example: a1ad8858-3c96-474c-b544-45b26af03578 name: type: string example: 'Mrs. Clarissa Padberg Sr.' status: type: object properties: id: type: string example: a1ad8858-3fcf-4db4-8cac-55d9d80727a3 slug: type: string example: null nullable: true name: type: string example: null nullable: true description: type: string example: 'Márcio Rios' abbreviation: type: string example: sit color: type: string example: '#f1af35' text_color: type: string example: '#817426' priority: type: string example: urgent priority_label: type: string example: Urgente needed_at: type: string example: '2026-05-18' approved_at: type: string example: null nullable: true rejection_reason: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: true 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: 43773d6a-3721-32b5-80d9-738e66d10df8 nullable: true work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: 2f8b58cf-51c6-3336-bdf6-a004900a7966 nullable: true user_id: type: string description: 'Usuário. The uuid of an existing record in the users table.' example: 7329a95a-c5ae-3205-8dd6-50cbabc4a708 nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: c0e83d91-16af-3e35-a403-7c4fa5cb3869 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: 5dcc1f31-a287-302a-a7da-7109017522a3 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: b576debd-1ad6-310c-94c6-3e761a2f4c23 work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: 6e53563a-3e34-3161-81bb-ecb4dac68833 nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: e682b664-0e99-3bb3-8649-c94866cfd222 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: 119fc890-41de-3cd6-a0ef-3b476611b7be 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: 45cfdca7-f2f6-3538-8511-8f14dd5f1666 code: null name: 'Sed provident ad.' description: 'Maxime qui quod est blanditiis. Ratione nam consequatur et cupiditate quidem minus. Quia beatae et qui ad praesentium doloribus delectus. Doloribus neque et rerum est aliquam. Ad est reprehenderit est reprehenderit quia quibusdam repellendus tenetur.' work: id: a1ad8858-53f4-42d1-a767-a6ac493a337d name: 'Maitê Esteves Faro Filho' user: id: a1ad8858-5803-4079-8e1e-541deb7bc00b name: 'Jacinto Cormier' status: id: a1ad8858-5a4c-49ac-814e-0efd13eb3cff slug: null name: null description: 'Simone Karine Barros' abbreviation: molestias color: '#45fb2a' text_color: '#e65a1f' priority: high priority_label: Alta needed_at: '2026-05-28' approved_at: null rejection_reason: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 45cfdca7-f2f6-3538-8511-8f14dd5f1666 code: type: string example: null nullable: true name: type: string example: 'Sed provident ad.' description: type: string example: 'Maxime qui quod est blanditiis. Ratione nam consequatur et cupiditate quidem minus. Quia beatae et qui ad praesentium doloribus delectus. Doloribus neque et rerum est aliquam. Ad est reprehenderit est reprehenderit quia quibusdam repellendus tenetur.' work: type: object properties: id: type: string example: a1ad8858-53f4-42d1-a767-a6ac493a337d name: type: string example: 'Maitê Esteves Faro Filho' user: type: object properties: id: type: string example: a1ad8858-5803-4079-8e1e-541deb7bc00b name: type: string example: 'Jacinto Cormier' status: type: object properties: id: type: string example: a1ad8858-5a4c-49ac-814e-0efd13eb3cff slug: type: string example: null nullable: true name: type: string example: null nullable: true description: type: string example: 'Simone Karine Barros' abbreviation: type: string example: molestias color: type: string example: '#45fb2a' text_color: type: string example: '#e65a1f' priority: type: string example: high priority_label: type: string example: Alta needed_at: type: string example: '2026-05-28' approved_at: type: string example: null nullable: true rejection_reason: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 36943dc9-8116-3580-ae6c-a67a432d56a9 work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: b8b5f44d-2dcd-3002-aaf3-5d4e4dcd0ebb nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: 771f597d-60bd-3699-a737-3afbf087f384 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: 43d96488-2757-314a-b27c-1eb6c69d528a product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 2863a5fb-d28e-30b0-be60-39af2562b51b 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: rerum 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: 385b3cba-5a58-3dd3-a40a-712de2d2f5e1 product: id: a1ad8858-8ec3-4b1b-a16a-5d44f9d5a23a name: 'Sr. Alessandro Padilha Neto' code: PRD-186880 unit: id: a1ad8858-8b75-49fb-81d3-1680289dce3e name: 'Renato da Rosa' abbreviation: 'Sra. Eunice de Souza Medina Filho' quantity: 182.4585 quantity_fulfilled: 0 quantity_pending: 182.4585 is_fulfilled: false is_partially_fulfilled: false observation: 'Minima soluta sint consequuntur odio recusandae ab dolorem.' created_at: null updated_at: null - id: f55ca70f-48e5-3d44-9b32-f063279b6830 product: id: a1ad8858-ab3f-4e6c-ba7d-1f71a2183cb2 name: 'Sandro Simão Sales Filho' code: PRD-448158 unit: id: a1ad8858-a811-4729-84fd-aeb910611f5d name: 'Dr. Thomas Adriano Lutero Sobrinho' abbreviation: 'Sr. Otávio Franco Pereira' quantity: 607.641 quantity_fulfilled: 0 quantity_pending: 607.641 is_fulfilled: false is_partially_fulfilled: false observation: 'Accusamus maiores et culpa delectus.' 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: 385b3cba-5a58-3dd3-a40a-712de2d2f5e1 product: id: a1ad8858-8ec3-4b1b-a16a-5d44f9d5a23a name: 'Sr. Alessandro Padilha Neto' code: PRD-186880 unit: id: a1ad8858-8b75-49fb-81d3-1680289dce3e name: 'Renato da Rosa' abbreviation: 'Sra. Eunice de Souza Medina Filho' quantity: 182.4585 quantity_fulfilled: 0 quantity_pending: 182.4585 is_fulfilled: false is_partially_fulfilled: false observation: 'Minima soluta sint consequuntur odio recusandae ab dolorem.' created_at: null updated_at: null - id: f55ca70f-48e5-3d44-9b32-f063279b6830 product: id: a1ad8858-ab3f-4e6c-ba7d-1f71a2183cb2 name: 'Sandro Simão Sales Filho' code: PRD-448158 unit: id: a1ad8858-a811-4729-84fd-aeb910611f5d name: 'Dr. Thomas Adriano Lutero Sobrinho' abbreviation: 'Sr. Otávio Franco Pereira' quantity: 607.641 quantity_fulfilled: 0 quantity_pending: 607.641 is_fulfilled: false is_partially_fulfilled: false observation: 'Accusamus maiores et culpa delectus.' created_at: null updated_at: null items: type: object properties: id: type: string example: 385b3cba-5a58-3dd3-a40a-712de2d2f5e1 product: type: object properties: id: type: string example: a1ad8858-8ec3-4b1b-a16a-5d44f9d5a23a name: type: string example: 'Sr. Alessandro Padilha Neto' code: type: string example: PRD-186880 unit: type: object properties: id: type: string example: a1ad8858-8b75-49fb-81d3-1680289dce3e name: type: string example: 'Renato da Rosa' abbreviation: type: string example: 'Sra. Eunice de Souza Medina Filho' quantity: type: number example: 182.4585 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 182.4585 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: 'Minima soluta sint consequuntur odio recusandae ab dolorem.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 4ac7663d-f63e-3da7-a485-a45b5462a98c 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: - f28e0ccc-5573-3ca5-b207-c343757257ee items: type: string required: - items parameters: - in: path name: productRequest description: 'Product Request UUID' example: a 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: quia 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: distinctio 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: 96e0e9c3-f7d3-354c-a3a4-8241050bf7b6 product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 8e8b3ec5-1e6d-3744-a8ad-0af0a0e42cc1 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: distinctio 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: a6acccce-8fa0-3eaa-b029-4c847eb7b16f name: 'Dr. Violeta Rivera Filho' code: PRD-319204 stock: 78 product_family: id: a1ad8856-6e15-4b43-9312-a4da4779a8d0 name: 'Franciele Urias Cervantes Filho' product_brand: id: a1ad8856-7089-4fd2-87ee-16dad9f58a8c name: 'Diogo Emiliano Gil Filho' unit: id: a1ad8856-72e5-42e9-b911-8bbf7ff72e12 name: 'Sra. Noemi Beltrão Jr.' abbreviation: 'Sr. Breno Amaral Queirós' image: id: null url: null description: 'Qui ullam at reiciendis.' created_at: null updated_at: null - id: 3cc1a1ad-2524-3f48-bf07-1106202c47d3 name: 'Reinaldo Pacheco Padrão' code: PRD-680724 stock: 394 product_family: id: a1ad8856-7699-4020-a79c-ba4fec163519 name: 'Noelí Lovato Cruz Jr.' product_brand: id: a1ad8856-783d-4b4e-a921-852ca987a033 name: 'Sra. Heloise de Freitas Jr.' unit: id: a1ad8856-79d0-42d3-bc06-b3ad872f7ff3 name: 'Melissa Mendes' abbreviation: 'Thiago Galindo' image: id: null url: null description: 'Laborum cupiditate facilis rem.' 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: a6acccce-8fa0-3eaa-b029-4c847eb7b16f name: 'Dr. Violeta Rivera Filho' code: PRD-319204 stock: 78 product_family: id: a1ad8856-6e15-4b43-9312-a4da4779a8d0 name: 'Franciele Urias Cervantes Filho' product_brand: id: a1ad8856-7089-4fd2-87ee-16dad9f58a8c name: 'Diogo Emiliano Gil Filho' unit: id: a1ad8856-72e5-42e9-b911-8bbf7ff72e12 name: 'Sra. Noemi Beltrão Jr.' abbreviation: 'Sr. Breno Amaral Queirós' image: id: null url: null description: 'Qui ullam at reiciendis.' created_at: null updated_at: null - id: 3cc1a1ad-2524-3f48-bf07-1106202c47d3 name: 'Reinaldo Pacheco Padrão' code: PRD-680724 stock: 394 product_family: id: a1ad8856-7699-4020-a79c-ba4fec163519 name: 'Noelí Lovato Cruz Jr.' product_brand: id: a1ad8856-783d-4b4e-a921-852ca987a033 name: 'Sra. Heloise de Freitas Jr.' unit: id: a1ad8856-79d0-42d3-bc06-b3ad872f7ff3 name: 'Melissa Mendes' abbreviation: 'Thiago Galindo' image: id: null url: null description: 'Laborum cupiditate facilis rem.' created_at: null updated_at: null items: type: object properties: id: type: string example: a6acccce-8fa0-3eaa-b029-4c847eb7b16f name: type: string example: 'Dr. Violeta Rivera Filho' code: type: string example: PRD-319204 stock: type: integer example: 78 product_family: type: object properties: id: type: string example: a1ad8856-6e15-4b43-9312-a4da4779a8d0 name: type: string example: 'Franciele Urias Cervantes Filho' product_brand: type: object properties: id: type: string example: a1ad8856-7089-4fd2-87ee-16dad9f58a8c name: type: string example: 'Diogo Emiliano Gil Filho' unit: type: object properties: id: type: string example: a1ad8856-72e5-42e9-b911-8bbf7ff72e12 name: type: string example: 'Sra. Noemi Beltrão Jr.' abbreviation: type: string example: 'Sr. Breno Amaral Queirós' image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true description: type: string example: 'Qui ullam at reiciendis.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 73c63dec-4f7e-32e8-8056-249cbd7f68a5 product_brand_id: type: string description: 'Marca do Produto. The uuid of an existing record in the product_brands table.' example: 7f814061-0af3-31c8-b17e-13796e2ca655 unit_id: type: string description: 'Unidade. The uuid of an existing record in the units table.' example: a1028ecf-5a87-3eda-aa7d-1f5111522909 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: 15d500d5-61b6-3d3f-b729-2b864bcaa21c name: 'Dr. Cristóvão Gusmão' code: PRD-163648 stock: 95352 product_family: id: a1ad8856-82a1-4cec-9026-98d5dd2eb3e7 name: 'Noa Ávila Saraiva Sobrinho' product_brand: id: a1ad8856-84ad-496a-98c9-0015f21026af name: 'Sr. Igor Aragão Vieira Sobrinho' unit: id: a1ad8856-8694-4169-95c4-e70b13a441f7 name: 'Erik Horácio Delvalle Neto' abbreviation: 'Sra. Heloise Burgos Soto Neto' image: id: null url: null description: 'Eos ad iure ducimus error.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 15d500d5-61b6-3d3f-b729-2b864bcaa21c name: type: string example: 'Dr. Cristóvão Gusmão' code: type: string example: PRD-163648 stock: type: integer example: 95352 product_family: type: object properties: id: type: string example: a1ad8856-82a1-4cec-9026-98d5dd2eb3e7 name: type: string example: 'Noa Ávila Saraiva Sobrinho' product_brand: type: object properties: id: type: string example: a1ad8856-84ad-496a-98c9-0015f21026af name: type: string example: 'Sr. Igor Aragão Vieira Sobrinho' unit: type: object properties: id: type: string example: a1ad8856-8694-4169-95c4-e70b13a441f7 name: type: string example: 'Erik Horácio Delvalle Neto' abbreviation: type: string example: 'Sra. Heloise Burgos Soto Neto' image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true description: type: string example: 'Eos ad iure ducimus error.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: ae878219-86a2-3c3d-b634-50ab6814e2e3 product_brand_id: type: string description: 'Marca do Produto. The uuid of an existing record in the product_brands table.' example: aa280314-7e6e-3b98-bbc5-7fc3f587428e unit_id: type: string description: 'Unidade. The uuid of an existing record in the units table.' example: 466bf120-6caf-3a74-adf5-9a0b28414a4b 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: perferendis required: true schema: type: string '/api/products/{product}/available-origins': get: summary: 'List available origins' operationId: listAvailableOrigins description: 'List supplier_products (NF items) with available quantity for the given product, ordered FIFO by NF date.' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Products parameters: - in: path name: product description: 'Product UUID' example: molestiae 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: quo 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: 0660c21b-4a34-34a5-9e57-7f134a9dec35 name: 'veniam quasi' slug: null description: 'Quis iste qui deleniti ex aspernatur. Error hic et aut expedita ducimus. Velit non aut ipsam deserunt.' abbreviation: null created_at: null updated_at: null - id: a5a70af0-bd24-3fb6-8bcd-e050f4cc8d01 name: 'officia distinctio' slug: null description: null abbreviation: hew 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: 0660c21b-4a34-34a5-9e57-7f134a9dec35 name: 'veniam quasi' slug: null description: 'Quis iste qui deleniti ex aspernatur. Error hic et aut expedita ducimus. Velit non aut ipsam deserunt.' abbreviation: null created_at: null updated_at: null - id: a5a70af0-bd24-3fb6-8bcd-e050f4cc8d01 name: 'officia distinctio' slug: null description: null abbreviation: hew created_at: null updated_at: null items: type: object properties: id: type: string example: 0660c21b-4a34-34a5-9e57-7f134a9dec35 name: type: string example: 'veniam quasi' slug: type: string example: null nullable: true description: type: string example: 'Quis iste qui deleniti ex aspernatur. Error hic et aut expedita ducimus. Velit non aut ipsam deserunt.' abbreviation: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 5a595368-ee6b-38da-b8d9-2116956165bb name: 'aut et' slug: null description: null abbreviation: yyl created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 5a595368-ee6b-38da-b8d9-2116956165bb name: type: string example: 'aut et' slug: type: string example: null nullable: true description: type: string example: null nullable: true abbreviation: type: string example: yyl created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 17 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: ceb274d4-457d-3897-a0b4-6c3a1a88f81d name: 'Jaquan Volkman Jr.' username: herman.lisa email: verdman@example.net image: id: null url: null sectors: [] roles: [] - id: 0e82d6fc-b136-3bd2-9c63-01e291e7bdd7 name: 'Gracie Dickinson' username: graham.mariano email: lennie.metz@example.com image: id: null url: null sectors: [] roles: [] links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: ceb274d4-457d-3897-a0b4-6c3a1a88f81d name: 'Jaquan Volkman Jr.' username: herman.lisa email: verdman@example.net image: id: null url: null sectors: [] roles: [] - id: 0e82d6fc-b136-3bd2-9c63-01e291e7bdd7 name: 'Gracie Dickinson' username: graham.mariano email: lennie.metz@example.com image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: ceb274d4-457d-3897-a0b4-6c3a1a88f81d name: type: string example: 'Jaquan Volkman Jr.' username: type: string example: herman.lisa email: type: string example: verdman@example.net image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true 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 nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: - e0e1e512-5ded-3c79-8d2b-6dcff6f45a83 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: - c13ccccf-c26c-33c4-b0d3-714ee269e5c9 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: - f5f6ecc1-fc1f-361f-86d3-5fa4cf1e0b88 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: 'tempore maiores' slug: ipsa-repellat-voluptas-id-velit-neque-dolor-repellat - name: 'mollitia dicta' slug: et-ut-vel-et-voluptatem properties: data: type: array example: - name: 'tempore maiores' slug: ipsa-repellat-voluptas-id-velit-neque-dolor-repellat - name: 'mollitia dicta' slug: et-ut-vel-et-voluptatem items: type: object properties: name: type: string example: 'tempore maiores' slug: type: string example: ipsa-repellat-voluptas-id-velit-neque-dolor-repellat 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: d30b7ab9-b417-3a47-8334-00f3064ab56a slug: null name: null description: 'Dr. Bianca Vieira Vila Neto' abbreviation: a color: '#299c91' text_color: '#aab97b' created_at: null updated_at: null - id: d71542ce-c7ce-3387-b697-7048a7d90de1 slug: null name: null description: 'Dr. Emanuel Ronaldo Verdugo' abbreviation: iste color: '#64223f' text_color: '#9e1ecc' 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: d30b7ab9-b417-3a47-8334-00f3064ab56a slug: null name: null description: 'Dr. Bianca Vieira Vila Neto' abbreviation: a color: '#299c91' text_color: '#aab97b' created_at: null updated_at: null - id: d71542ce-c7ce-3387-b697-7048a7d90de1 slug: null name: null description: 'Dr. Emanuel Ronaldo Verdugo' abbreviation: iste color: '#64223f' text_color: '#9e1ecc' created_at: null updated_at: null items: type: object properties: id: type: string example: d30b7ab9-b417-3a47-8334-00f3064ab56a slug: type: string example: null nullable: true name: type: string example: null nullable: true description: type: string example: 'Dr. Bianca Vieira Vila Neto' abbreviation: type: string example: a color: type: string example: '#299c91' text_color: type: string example: '#aab97b' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: slug: type: string description: 'Slug. O campo value não pode ser superior a 100 caracteres.' example: 'Example Slug' nullable: true 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. 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: 0bd46c28-72c1-32e3-b3e2-294010208d8c 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: true nullable: true is_final: type: boolean description: 'Status final.' example: true 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: 158006a7-d03e-3b12-bef3-f9d2b5efb183 slug: null name: null description: 'Fernanda Louise Grego' abbreviation: maxime color: '#a23008' text_color: '#b660e8' module: name: Obras slug: work created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 158006a7-d03e-3b12-bef3-f9d2b5efb183 slug: type: string example: null nullable: true name: type: string example: null nullable: true description: type: string example: 'Fernanda Louise Grego' abbreviation: type: string example: maxime color: type: string example: '#a23008' text_color: type: string example: '#b660e8' module: type: object properties: name: type: string example: Obras slug: type: string example: work created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: slug: type: string description: 'Slug. O campo value não pode ser superior a 100 caracteres.' example: 'Example Slug' nullable: true 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. 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: 2b343d57-35a8-38bd-ba43-3f10baecd5d3 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: true is_final: type: boolean description: 'Status final.' example: true 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: 11e300c0-5275-35ab-98d6-519f8390a287 quantity: 596.1352 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 5bd2e13c-5e68-3a16-bda0-b1b4830beb5f quantity: 197.5238 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null properties: data: type: array example: - id: 11e300c0-5275-35ab-98d6-519f8390a287 quantity: 596.1352 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 5bd2e13c-5e68-3a16-bda0-b1b4830beb5f quantity: 197.5238 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: 11e300c0-5275-35ab-98d6-519f8390a287 quantity: type: number example: 596.1352 min_quantity: type: string example: null nullable: true max_quantity: type: string example: null nullable: true below_minimum: type: boolean example: false above_maximum: type: boolean example: false created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 1a1070ba-7590-377c-873b-3d5999cad0f7 name: 'Estoque Sanches-Campos' module: work is_active: true is_main: false created_at: null updated_at: null - id: 6f41da6e-b9e2-3ed0-8369-337054019780 name: 'Estoque Meireles e Cruz 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: 1a1070ba-7590-377c-873b-3d5999cad0f7 name: 'Estoque Sanches-Campos' module: work is_active: true is_main: false created_at: null updated_at: null - id: 6f41da6e-b9e2-3ed0-8369-337054019780 name: 'Estoque Meireles e Cruz e Associados' module: work is_active: true is_main: false created_at: null updated_at: null items: type: object properties: id: type: string example: 1a1070ba-7590-377c-873b-3d5999cad0f7 name: type: string example: 'Estoque Sanches-Campos' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: a9cd3307-d986-3082-9b6c-7ad85612fd87 name: 'Estoque Gusmão e Gil' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: a9cd3307-d986-3082-9b6c-7ad85612fd87 name: type: string example: 'Estoque Gusmão e Gil' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: true 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: e8bf484c-0c40-32b0-b0f2-8f0211e5761e name: 'Estoque Abreu e Benites e Filhos' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: e8bf484c-0c40-32b0-b0f2-8f0211e5761e name: type: string example: 'Estoque Abreu e Benites e Filhos' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 8f09ef65-83dd-32bd-9ea7-21f34ef6e005 name: 'Estoque Saito e Guerra e Associados' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 8f09ef65-83dd-32bd-9ea7-21f34ef6e005 name: type: string example: 'Estoque Saito e Guerra e Associados' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: d4da4811-7adc-3c07-9ee9-5117f6964b85 name: 'Estoque Carvalho e Rezende' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: d4da4811-7adc-3c07-9ee9-5117f6964b85 name: type: string example: 'Estoque Carvalho e Rezende' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: true 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: 8c5e2826-e64e-3b41-95ad-de631f034d55 quantity: 244.8438 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 9e6a4678-0b88-34bc-bb58-9552fa3a8795 quantity: 717.7811 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: 8c5e2826-e64e-3b41-95ad-de631f034d55 quantity: 244.8438 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 9e6a4678-0b88-34bc-bb58-9552fa3a8795 quantity: 717.7811 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: 8c5e2826-e64e-3b41-95ad-de631f034d55 quantity: type: number example: 244.8438 min_quantity: type: string example: null nullable: true max_quantity: type: string example: null nullable: true below_minimum: type: boolean example: false above_maximum: type: boolean example: false created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 0b885fe4-2051-371c-826f-c17382a03ffe quantity: 98.3381 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: 0b885fe4-2051-371c-826f-c17382a03ffe quantity: type: number example: 98.3381 min_quantity: type: string example: null nullable: true max_quantity: type: string example: null nullable: true below_minimum: type: boolean example: false above_maximum: type: boolean example: false created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: illo 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: 1d55f3d8-7d1b-3527-b716-c62c2c716363 code: MOV-951875 type: consumo type_name: CONSUMPTION is_entry: false is_exit: true quantity: 39.6569 previous_quantity: 188.4759 new_quantity: 148.819 reason: 'Ut quasi et officia temporibus incidunt reprehenderit eligendi.' movement_date: '2026-04-10T05:22:39.000000Z' created_at: null - id: 22dae1de-dde2-375d-93c3-7aaea93db3d7 code: MOV-923453 type: produção type_name: PRODUCTION is_entry: true is_exit: false quantity: 32.3117 previous_quantity: 286.5256 new_quantity: 318.8373 reason: 'Tempore asperiores sint alias vel.' movement_date: '2026-04-09T21:44:01.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: 1d55f3d8-7d1b-3527-b716-c62c2c716363 code: MOV-951875 type: consumo type_name: CONSUMPTION is_entry: false is_exit: true quantity: 39.6569 previous_quantity: 188.4759 new_quantity: 148.819 reason: 'Ut quasi et officia temporibus incidunt reprehenderit eligendi.' movement_date: '2026-04-10T05:22:39.000000Z' created_at: null - id: 22dae1de-dde2-375d-93c3-7aaea93db3d7 code: MOV-923453 type: produção type_name: PRODUCTION is_entry: true is_exit: false quantity: 32.3117 previous_quantity: 286.5256 new_quantity: 318.8373 reason: 'Tempore asperiores sint alias vel.' movement_date: '2026-04-09T21:44:01.000000Z' created_at: null items: type: object properties: id: type: string example: 1d55f3d8-7d1b-3527-b716-c62c2c716363 code: type: string example: MOV-951875 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: 39.6569 previous_quantity: type: number example: 188.4759 new_quantity: type: number example: 148.819 reason: type: string example: 'Ut quasi et officia temporibus incidunt reprehenderit eligendi.' movement_date: type: string example: '2026-04-10T05:22:39.000000Z' created_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 74024754-b57b-33aa-9883-f29956639683 code: MOV-975083 type: consumo type_name: CONSUMPTION is_entry: false is_exit: true quantity: 34.4175 previous_quantity: 779.5335 new_quantity: 745.116 reason: 'Molestias hic et minus laudantium omnis et aut quis.' movement_date: '2026-04-11T23:04:41.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 74024754-b57b-33aa-9883-f29956639683 code: type: string example: MOV-975083 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: 34.4175 previous_quantity: type: number example: 779.5335 new_quantity: type: number example: 745.116 reason: type: string example: 'Molestias hic et minus laudantium omnis et aut quis.' movement_date: type: string example: '2026-04-11T23:04:41.000000Z' created_at: type: string example: null nullable: true 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: 4b5030d0-95d0-3e87-9550-076656542d41 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: 5c08bb2f-263a-35e2-b648-c0d88f6bf204 code: MOV-106175 type: 'saída transferência' type_name: TRANSFER_OUT is_entry: false is_exit: true quantity: 60.0413 previous_quantity: 911.7241 new_quantity: 851.6828 reason: null movement_date: '2026-04-03T15:05:04.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 5c08bb2f-263a-35e2-b648-c0d88f6bf204 code: type: string example: MOV-106175 type: type: string example: 'saída transferência' type_name: type: string example: TRANSFER_OUT is_entry: type: boolean example: false is_exit: type: boolean example: true quantity: type: number example: 60.0413 previous_quantity: type: number example: 911.7241 new_quantity: type: number example: 851.6828 reason: type: string example: null nullable: true movement_date: type: string example: '2026-04-03T15:05:04.000000Z' created_at: type: string example: null nullable: true 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: 75a77714-012c-31ac-a0b1-7b76c3cc30a9 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: 40a5a8b3-dc0c-3cfe-8923-52752a28b335 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: d819163b-41b7-3bf6-8551-57ab2608acad code: MOV-261267 type: compra type_name: PURCHASE is_entry: true is_exit: false quantity: 66.234 previous_quantity: 767.1041 new_quantity: 833.3381 reason: null movement_date: '2026-04-18T16:41:07.000000Z' created_at: null properties: data: type: object properties: id: type: string example: d819163b-41b7-3bf6-8551-57ab2608acad code: type: string example: MOV-261267 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: 66.234 previous_quantity: type: number example: 767.1041 new_quantity: type: number example: 833.3381 reason: type: string example: null nullable: true movement_date: type: string example: '2026-04-18T16:41:07.000000Z' created_at: type: string example: null nullable: true 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: ba3cb548-b164-3568-8d54-64ddd2f9a5e2 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: 1af1f794-9943-3410-8c94-4b3b51605d4a code: MOV-847657 type: 'saída transferência' type_name: TRANSFER_OUT is_entry: false is_exit: true quantity: 47.0421 previous_quantity: 13.3993 new_quantity: 0 reason: null movement_date: '2026-04-30T20:14:59.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 1af1f794-9943-3410-8c94-4b3b51605d4a code: type: string example: MOV-847657 type: type: string example: 'saída transferência' type_name: type: string example: TRANSFER_OUT is_entry: type: boolean example: false is_exit: type: boolean example: true quantity: type: number example: 47.0421 previous_quantity: type: number example: 13.3993 new_quantity: type: integer example: 0 reason: type: string example: null nullable: true movement_date: type: string example: '2026-04-30T20:14:59.000000Z' created_at: type: string example: null nullable: true 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: fd49d22d-5f10-3ad9-a88f-d530224b1899 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: 00a074b5-fce1-33bb-89c9-dd85a294e26d code: MOV-968894 type: 'ajuste entrada' type_name: ADJUSTMENT_IN is_entry: true is_exit: false quantity: 57.2394 previous_quantity: 239.0026 new_quantity: 296.242 reason: null movement_date: '2026-04-10T20:02:12.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 00a074b5-fce1-33bb-89c9-dd85a294e26d code: type: string example: MOV-968894 type: type: string example: 'ajuste entrada' type_name: type: string example: ADJUSTMENT_IN is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 57.2394 previous_quantity: type: number example: 239.0026 new_quantity: type: number example: 296.242 reason: type: string example: null nullable: true movement_date: type: string example: '2026-04-10T20:02:12.000000Z' created_at: type: string example: null nullable: true 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: e0025951-2c4f-3dbc-acb8-ebfb60974f82 name: 'Moisés Mário Gonçalves' email: luciano08@example.org phone: '(93) 3398-8343' document: 48.756.084/0001-14 type: pf responsible: 'Dr. Flávio Denis Ferminiano' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null - id: 3b0ae98d-3b9c-387a-b79f-9c93f5525237 name: 'Sr. Camilo William Bezerra' email: salas.lorenzo@example.net phone: '(46) 98546-8387' document: 01.513.134/0001-79 type: pj responsible: 'Dr. Camila Domingues Rezende Neto' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: e0025951-2c4f-3dbc-acb8-ebfb60974f82 name: 'Moisés Mário Gonçalves' email: luciano08@example.org phone: '(93) 3398-8343' document: 48.756.084/0001-14 type: pf responsible: 'Dr. Flávio Denis Ferminiano' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null - id: 3b0ae98d-3b9c-387a-b79f-9c93f5525237 name: 'Sr. Camilo William Bezerra' email: salas.lorenzo@example.net phone: '(46) 98546-8387' document: 01.513.134/0001-79 type: pj responsible: 'Dr. Camila Domingues Rezende Neto' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null items: type: object properties: id: type: string example: e0025951-2c4f-3dbc-acb8-ebfb60974f82 name: type: string example: 'Moisés Mário Gonçalves' email: type: string example: luciano08@example.org phone: type: string example: '(93) 3398-8343' document: type: string example: 48.756.084/0001-14 type: type: string example: pf responsible: type: string example: 'Dr. Flávio Denis Ferminiano' image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true address: type: object properties: street: type: string example: null nullable: true number: type: string example: null nullable: true complement: type: string example: null nullable: true neighborhood: type: string example: null nullable: true city: type: string example: null nullable: true state: type: string example: null nullable: true zip_code: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: e6e5e129-0aee-3e11-9c18-8fa775514379 name: 'Beatriz Hosana Neves Jr.' email: adriel.valdez@example.org phone: '(87) 93913-1869' document: 92.054.075/0001-73 type: pf responsible: 'Dr. Emília Sepúlveda Esteves' 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: e6e5e129-0aee-3e11-9c18-8fa775514379 name: type: string example: 'Beatriz Hosana Neves Jr.' email: type: string example: adriel.valdez@example.org phone: type: string example: '(87) 93913-1869' document: type: string example: 92.054.075/0001-73 type: type: string example: pf responsible: type: string example: 'Dr. Emília Sepúlveda Esteves' image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true address: type: object properties: street: type: string example: null nullable: true number: type: string example: null nullable: true complement: type: string example: null nullable: true neighborhood: type: string example: null nullable: true city: type: string example: null nullable: true state: type: string example: null nullable: true zip_code: type: string example: null nullable: true 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: 1 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: ee5f0b9b-0a1a-302f-a89d-4dd7b089320a name: 'Dr. Bruno Rios Jr.' description: 'Dolor voluptas facere ipsam eum impedit illo. Odio ratione veritatis in voluptate quos velit et. Reiciendis vitae harum vero.' type: entrada - id: a181028f-4512-3bbc-9237-6dcfe0638746 name: 'Eduardo Ramos da Rosa Filho' description: 'Nulla et sint ea sint omnis odit. Odit vel officiis et nostrum vel earum. Dolor libero neque quia aut hic aspernatur.' 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: ee5f0b9b-0a1a-302f-a89d-4dd7b089320a name: 'Dr. Bruno Rios Jr.' description: 'Dolor voluptas facere ipsam eum impedit illo. Odio ratione veritatis in voluptate quos velit et. Reiciendis vitae harum vero.' type: entrada - id: a181028f-4512-3bbc-9237-6dcfe0638746 name: 'Eduardo Ramos da Rosa Filho' description: 'Nulla et sint ea sint omnis odit. Odit vel officiis et nostrum vel earum. Dolor libero neque quia aut hic aspernatur.' type: saída items: type: object properties: id: type: string example: ee5f0b9b-0a1a-302f-a89d-4dd7b089320a name: type: string example: 'Dr. Bruno Rios Jr.' description: type: string example: 'Dolor voluptas facere ipsam eum impedit illo. Odio ratione veritatis in voluptate quos velit et. Reiciendis vitae harum vero.' type: type: string example: entrada links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 528fa194-3f6b-38a0-b566-3a760391ccfa name: 'Dr. Andres Galindo' description: 'Dignissimos fuga debitis fuga soluta perferendis. Nemo distinctio officia dolores rem quisquam rem. Dolores ipsa ullam dolor dolore incidunt sunt.' type: depósito properties: data: type: object properties: id: type: string example: 528fa194-3f6b-38a0-b566-3a760391ccfa name: type: string example: 'Dr. Andres Galindo' description: type: string example: 'Dignissimos fuga debitis fuga soluta perferendis. Nemo distinctio officia dolores rem quisquam rem. Dolores ipsa ullam dolor dolore incidunt sunt.' type: type: string example: depósito 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: porro 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: 85282f33-beb8-35a0-b3f1-bd4ece6fed32 name: 'Sr. Gilberto Fonseca Vieira Neto' abbreviation: 'Srta. Madalena da Cruz Jr.' description: 'Quia nostrum quas quis.' created_at: null updated_at: null - id: e44d6ae8-2b39-38bc-bb98-c0f1ef9c23b7 name: 'Catarina Garcia Sobrinho' abbreviation: 'Dr. Adriele Vale Neto' description: 'At error libero fuga 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: 85282f33-beb8-35a0-b3f1-bd4ece6fed32 name: 'Sr. Gilberto Fonseca Vieira Neto' abbreviation: 'Srta. Madalena da Cruz Jr.' description: 'Quia nostrum quas quis.' created_at: null updated_at: null - id: e44d6ae8-2b39-38bc-bb98-c0f1ef9c23b7 name: 'Catarina Garcia Sobrinho' abbreviation: 'Dr. Adriele Vale Neto' description: 'At error libero fuga ut.' created_at: null updated_at: null items: type: object properties: id: type: string example: 85282f33-beb8-35a0-b3f1-bd4ece6fed32 name: type: string example: 'Sr. Gilberto Fonseca Vieira Neto' abbreviation: type: string example: 'Srta. Madalena da Cruz Jr.' description: type: string example: 'Quia nostrum quas quis.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 8ced0277-ab48-3157-864b-c2d91e200dd1 name: 'George Godói Jr.' abbreviation: 'Sr. Eduardo Mascarenhas Rangel' description: 'Sint est dolorem unde.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 8ced0277-ab48-3157-864b-c2d91e200dd1 name: type: string example: 'George Godói Jr.' abbreviation: type: string example: 'Sr. Eduardo Mascarenhas Rangel' description: type: string example: 'Sint est dolorem unde.' created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: nostrum 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: facilis 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: 147faeb5-030b-3da5-9173-920d0b572573 name: 'Mr. Diamond Hahn' username: rolfson.bernadette email: mathias.lebsack@example.com image: id: null url: null sectors: [] roles: [] - id: fc49b918-3009-32a2-a6e1-8dc13bd4ee2a name: "Damon O'Hara" username: kiara.mcdermott email: dcrooks@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: 147faeb5-030b-3da5-9173-920d0b572573 name: 'Mr. Diamond Hahn' username: rolfson.bernadette email: mathias.lebsack@example.com image: id: null url: null sectors: [] roles: [] - id: fc49b918-3009-32a2-a6e1-8dc13bd4ee2a name: "Damon O'Hara" username: kiara.mcdermott email: dcrooks@example.net image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: 147faeb5-030b-3da5-9173-920d0b572573 name: type: string example: 'Mr. Diamond Hahn' username: type: string example: rolfson.bernadette email: type: string example: mathias.lebsack@example.com image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true 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 nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: rosella78 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: - 791fee41-e57f-30c1-8923-c2caddf663da items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - 682eae25-091b-369d-b9de-4020a5251c66 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: a522757f-5a36-3a42-87e8-1a6073f112b7 name: 'Carmine Funk PhD' username: ray68 email: edythe59@example.com image: id: null url: null sectors: [] roles: [] properties: data: type: object properties: id: type: string example: a522757f-5a36-3a42-87e8-1a6073f112b7 name: type: string example: 'Carmine Funk PhD' username: type: string example: ray68 email: type: string example: edythe59@example.com image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true 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: holly69 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: - 33b5b111-72de-37b5-8032-e29a51cd0600 items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - c6973b75-652d-31d0-97a7-4e4596580281 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: - 085263c7-ccd3-3d18-b5e5-bc24d1d63aff 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: ea display_name: 'Repudiandae delectus eligendi molestiae doloremque veniam pariatur eius.' - id: null name: ea display_name: 'Tenetur ut maiores similique molestiae ut cum doloribus.' properties: data: type: array example: - id: null name: ea display_name: 'Repudiandae delectus eligendi molestiae doloremque veniam pariatur eius.' - id: null name: ea display_name: 'Tenetur ut maiores similique molestiae ut cum doloribus.' items: type: object properties: id: type: string example: null nullable: true name: type: string example: ea display_name: type: string example: 'Repudiandae delectus eligendi molestiae doloremque veniam pariatur eius.' 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: 2ac780d0-2bf5-35b9-b57d-556994b65375 description: 'Milene Jéssica Salgado Sobrinho' work: id: null name: null documents: [] created_at: null updated_at: null - id: 34ac8951-b859-304d-ae36-850899d99217 description: 'Bárbara Vieira 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: 2ac780d0-2bf5-35b9-b57d-556994b65375 description: 'Milene Jéssica Salgado Sobrinho' work: id: null name: null documents: [] created_at: null updated_at: null - id: 34ac8951-b859-304d-ae36-850899d99217 description: 'Bárbara Vieira Rosa' work: id: null name: null documents: [] created_at: null updated_at: null items: type: object properties: id: type: string example: 2ac780d0-2bf5-35b9-b57d-556994b65375 description: type: string example: 'Milene Jéssica Salgado Sobrinho' work: type: object properties: id: type: string example: null nullable: true name: type: string example: null nullable: true documents: type: array example: [] created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 3fba244e-9a8a-3ebd-9bbd-1e5ca930b99e 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: 469499bb-71ea-363a-8b3c-08a6d810890e description: 'Maximiano David Quintana Filho' work: id: null name: null documents: [] created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 469499bb-71ea-363a-8b3c-08a6d810890e description: type: string example: 'Maximiano David Quintana Filho' work: type: object properties: id: type: string example: null nullable: true name: type: string example: null nullable: true documents: type: array example: [] created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 38bebbcb-825c-33d5-a29e-bfd2693c4f2e 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: 58a323d0-96f0-31de-a2ee-5178b531794f name: 'Aline Zamana Sobrinho' 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 product_requests_count: 0 product_request_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '2013-05-21 19:43:51.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null - id: ad959906-7a80-35a7-9a0e-ad28b7140712 name: 'Sr. Dante Augusto Salazar' 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 product_requests_count: 0 product_request_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '2007-07-20 11:00:15.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: 58a323d0-96f0-31de-a2ee-5178b531794f name: 'Aline Zamana Sobrinho' 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 product_requests_count: 0 product_request_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '2013-05-21 19:43:51.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null - id: ad959906-7a80-35a7-9a0e-ad28b7140712 name: 'Sr. Dante Augusto Salazar' 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 product_requests_count: 0 product_request_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '2007-07-20 11:00:15.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null items: type: object properties: id: type: string example: 58a323d0-96f0-31de-a2ee-5178b531794f name: type: string example: 'Aline Zamana Sobrinho' address: type: object properties: street: type: string example: null nullable: true number: type: string example: null nullable: true complement: type: string example: null nullable: true neighborhood: type: string example: null nullable: true city: type: string example: null nullable: true state: type: string example: null nullable: true zip_code: type: string example: null nullable: true 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 product_requests_count: type: integer example: 0 product_request_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: '2013-05-21 19:43:51.000000' timezone_type: type: integer example: 3 timezone: type: string example: America/Sao_Paulo created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: 3b63a6c9-c5f4-3f88-aeac-b2f8dc5be291 status_id: type: string description: 'Status id. The uuid of an existing record in the statuses table.' example: 843e3566-4892-3a7c-8f76-908671237236 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: 302e0ffb-ef7c-33bb-958f-a0e44962db1f name: 'Kauan Faria Jr.' address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null documents: [] locations: [] product_quantity_lists_count: 0 product_quantity_list_items_count: 0 product_requests_count: 0 product_request_items_count: 0 documents_count: 0 locations_documents_count: 0 total_documents_count: 0 started_at: date: '2014-10-06 09:52:14.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 302e0ffb-ef7c-33bb-958f-a0e44962db1f name: type: string example: 'Kauan Faria Jr.' address: type: object properties: street: type: string example: null nullable: true number: type: string example: null nullable: true complement: type: string example: null nullable: true neighborhood: type: string example: null nullable: true city: type: string example: null nullable: true state: type: string example: null nullable: true zip_code: type: string example: null nullable: true 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 product_requests_count: type: integer example: 0 product_request_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: '2014-10-06 09:52:14.000000' timezone_type: type: integer example: 3 timezone: type: string example: America/Sao_Paulo created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true 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: 7c0e26cc-cf99-3244-ba94-c898e8759a28 status_id: type: string description: 'Status id. The uuid of an existing record in the statuses table.' example: be9f38c5-efc4-35d4-ac29-a8b1c874da3e 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: ddf5185f-33a8-3ae0-b883-d6be44290735 name: 'Tillman Hermiston' username: annalise76 email: kristian81@example.net image: id: null url: null sectors: [] roles: [] - id: 4f5e19c8-fb2b-3286-9c7e-54110edad785 name: 'Emelia Bechtelar' username: daisha93 email: nkeeling@example.com image: id: null url: null sectors: [] roles: [] links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: ddf5185f-33a8-3ae0-b883-d6be44290735 name: 'Tillman Hermiston' username: annalise76 email: kristian81@example.net image: id: null url: null sectors: [] roles: [] - id: 4f5e19c8-fb2b-3286-9c7e-54110edad785 name: 'Emelia Bechtelar' username: daisha93 email: nkeeling@example.com image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: ddf5185f-33a8-3ae0-b883-d6be44290735 name: type: string example: 'Tillman Hermiston' username: type: string example: annalise76 email: type: string example: kristian81@example.net image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true 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 nullable: true next: type: string example: null nullable: true 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 nullable: true label: type: string example: '« Anterior' page: type: string example: null nullable: true 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: - 851979b6-92a5-3028-8010-5871fef5e6e3 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: - 7230f8ed-f33c-3573-bf54-9dc867a519be 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: - ad435df1-0d98-39ab-80a1-a546d39b52af items: type: string parameters: - in: path name: work description: 'Work UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string