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 Account Movements' description: 'Endpoints for bank account deposits, withdraws and transfers' - name: 'Bank Accounts' description: 'Endpoints for bank accounts' - name: 'Bank Statements' description: 'Endpoints for bank account statements (extrato bancário)' - 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: 'Fiscal Documents' description: 'Endpoints para gerenciar notas fiscais (arquivos XML/PDF e vínculo com obras).' - name: Import description: 'Endpoints for managing NFe imports and product processing.' - name: Locations description: 'Endpoints for states and cities' - 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: 3b65a232-0f04-3136-afc3-b7ac38def540 name: aut-6a397079ad9a4 display_name: 'Ut dignissimos eum qui autem ut.' permissions_count: null - id: 91cf45ae-3f2b-3e63-ba6a-be30f8d3b3ee name: architecto-6a397079b6f97 display_name: 'Et ut quae omnis libero.' 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: 3b65a232-0f04-3136-afc3-b7ac38def540 name: aut-6a397079ad9a4 display_name: 'Ut dignissimos eum qui autem ut.' permissions_count: null - id: 91cf45ae-3f2b-3e63-ba6a-be30f8d3b3ee name: architecto-6a397079b6f97 display_name: 'Et ut quae omnis libero.' permissions_count: null items: type: object properties: id: type: string example: 3b65a232-0f04-3136-afc3-b7ac38def540 name: type: string example: aut-6a397079ad9a4 display_name: type: string example: 'Ut dignissimos eum qui autem ut.' 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: - 7d834b81-aa6a-3a35-ad3c-77bdb2c00a4f 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: - 1c9d235e-d733-32e2-bc24-15b3394251a0 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: d540922a-c097-381c-8ca2-0826c5a066fe name: cumque-6a397079d28c9 display_name: 'Odio voluptatem eum alias perspiciatis.' permissions_count: null properties: data: type: object properties: id: type: string example: d540922a-c097-381c-8ca2-0826c5a066fe name: type: string example: cumque-6a397079d28c9 display_name: type: string example: 'Odio voluptatem eum alias perspiciatis.' 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: sed display_name: 'Dicta necessitatibus laboriosam magni nisi velit ut ut.' - id: null name: et display_name: 'In ut delectus quia saepe.' properties: data: type: array example: - id: null name: sed display_name: 'Dicta necessitatibus laboriosam magni nisi velit ut ut.' - id: null name: et display_name: 'In ut delectus quia saepe.' items: type: object properties: id: type: string example: null nullable: true name: type: string example: sed display_name: type: string example: 'Dicta necessitatibus laboriosam magni nisi velit ut ut.' tags: - ACL parameters: - in: path name: role description: 'The role.' example: 1 required: true schema: type: integer '/api/acl/roles/{role}': delete: summary: Delete operationId: delete description: 'Delete a role.' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - ACL parameters: - in: path name: role description: 'The role.' example: 1 required: true schema: type: integer /api/acl/permissions: get: summary: List operationId: list description: 'List permissions.' parameters: - in: query name: q description: 'Search query.' example: 'Permission name' required: false schema: type: string description: 'Search query.' example: 'Permission name' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: null name: doloremque display_name: 'Sit doloribus ad eos itaque unde saepe non.' - id: null name: nesciunt display_name: 'Totam qui qui possimus qui vel voluptas quia minima.' 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: doloremque display_name: 'Sit doloribus ad eos itaque unde saepe non.' - id: null name: nesciunt display_name: 'Totam qui qui possimus qui vel voluptas quia minima.' items: type: object properties: id: type: string example: null nullable: true name: type: string example: doloremque display_name: type: string example: 'Sit doloribus ad eos itaque unde saepe non.' 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: ut display_name: 'Dolores aut et doloribus voluptatem veritatis et deserunt laudantium.' properties: data: type: object properties: id: type: string example: null nullable: true name: type: string example: ut display_name: type: string example: 'Dolores aut et doloribus voluptatem veritatis et deserunt laudantium.' 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: 00b5d7a2-c4ef-36af-a410-743aceae805f code: null type: entrada payment_method: boleto amount: 5700.82 due_date: '2026-07-02T03: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: 'Consequatur beatae laborum iste quos ex minima corrupti a eaque quo sit.' 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: earum field2: 38 field3: true notes: 'Quo voluptatem amet aut consequatur.' created_at: null updated_at: null - id: 94b38aec-e6cb-3d03-8fb7-4f03fd92b5ce code: null type: entrada payment_method: boleto amount: 5710.8 due_date: '2026-07-02T03: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: 'Occaecati ipsum consequuntur et quia qui atque hic in eligendi.' 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: rerum field2: 76 field3: false notes: 'Ducimus aliquam omnis labore veniam.' created_at: null updated_at: null properties: data: type: array example: - id: 00b5d7a2-c4ef-36af-a410-743aceae805f code: null type: entrada payment_method: boleto amount: 5700.82 due_date: '2026-07-02T03: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: 'Consequatur beatae laborum iste quos ex minima corrupti a eaque quo sit.' 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: earum field2: 38 field3: true notes: 'Quo voluptatem amet aut consequatur.' created_at: null updated_at: null - id: 94b38aec-e6cb-3d03-8fb7-4f03fd92b5ce code: null type: entrada payment_method: boleto amount: 5710.8 due_date: '2026-07-02T03: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: 'Occaecati ipsum consequuntur et quia qui atque hic in eligendi.' 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: rerum field2: 76 field3: false notes: 'Ducimus aliquam omnis labore veniam.' created_at: null updated_at: null items: type: object properties: id: type: string example: 00b5d7a2-c4ef-36af-a410-743aceae805f code: type: string example: null nullable: true type: type: string example: entrada payment_method: type: string example: boleto amount: type: number example: 5700.82 due_date: type: string example: '2026-07-02T03: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: 'Consequatur beatae laborum iste quos ex minima corrupti a eaque quo sit.' 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: earum field2: type: integer example: 38 field3: type: boolean example: true notes: type: string example: 'Quo voluptatem amet aut consequatur.' 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: - quia required: true schema: type: array description: 'The uuid of an existing record in the account_payable_receivables table.' example: - quia 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: code description: 'Filter by account code.' example: CPR-000123 required: false schema: type: string description: 'Filter by account code.' example: CPR-000123 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: - odit required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - odit items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - cupiditate required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - cupiditate items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - sint required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - sint items: type: string - in: query name: statuses description: '' example: - 'a vencer' required: false schema: type: array description: '' example: - 'a vencer' 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-06-22T14:27:22' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-06-22T14:27:22' nullable: true - in: query name: protest_date_end description: 'O campo value deve ser uma data válida.' example: '2026-06-22T14:27:22' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-06-22T14:27:22' 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: 2177a342-c42e-3780-8f9d-a7cbc10ce1d4 code: null type: entrada payment_method: boleto amount: 8329.74 due_date: '2026-07-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: 'Sapiente odio voluptatum minima enim vero aut iusto dolores.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: et field2: 21 field3: false notes: 'Consequatur et qui error voluptas sunt et.' created_at: null updated_at: null - id: e8be35ff-c42e-3e0e-84c2-685b8d5f15ae code: null type: saída payment_method: cheque amount: 6995.93 due_date: '2026-06-30T03: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: 'Commodi optio ut consequatur nemo dolor velit.' 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: omnis field2: 43 field3: false notes: 'Aliquid asperiores sint molestias 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: 2177a342-c42e-3780-8f9d-a7cbc10ce1d4 code: null type: entrada payment_method: boleto amount: 8329.74 due_date: '2026-07-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: 'Sapiente odio voluptatum minima enim vero aut iusto dolores.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: et field2: 21 field3: false notes: 'Consequatur et qui error voluptas sunt et.' created_at: null updated_at: null - id: e8be35ff-c42e-3e0e-84c2-685b8d5f15ae code: null type: saída payment_method: cheque amount: 6995.93 due_date: '2026-06-30T03: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: 'Commodi optio ut consequatur nemo dolor velit.' 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: omnis field2: 43 field3: false notes: 'Aliquid asperiores sint molestias ut.' created_at: null updated_at: null items: type: object properties: id: type: string example: 2177a342-c42e-3780-8f9d-a7cbc10ce1d4 code: type: string example: null nullable: true type: type: string example: entrada payment_method: type: string example: boleto amount: type: number example: 8329.74 due_date: type: string example: '2026-07-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: 'Sapiente odio voluptatum minima enim vero aut iusto dolores.' 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: et field2: type: integer example: 21 field3: type: boolean example: false notes: type: string example: 'Consequatur et qui error voluptas sunt 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: code description: 'Filter by account code.' example: CPR-000123 required: false schema: type: string description: 'Filter by account code.' example: CPR-000123 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: - aut required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - aut items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - perspiciatis required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - perspiciatis items: type: string - in: query name: statuses description: '' example: - 'a vencer' required: false schema: type: array description: '' example: - 'a vencer' 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-06-22T14:27:22' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-06-22T14:27:22' nullable: true - in: query name: protest_date_end description: 'O campo value deve ser uma data válida.' example: '2026-06-22T14:27:22' required: false schema: type: string description: 'O campo value deve ser uma data válida.' example: '2026-06-22T14:27:22' 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: 9f1228be-5beb-3336-95a7-5ac63bb7e6df code: null type: saída payment_method: boleto amount: 6769.27 due_date: '2026-07-06T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Aut recusandae omnis est aspernatur quo dolorem.' 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: voluptatum field2: 70 field3: true notes: 'Nihil et non in distinctio est quam et.' created_at: null updated_at: null - id: 23a8ea41-647e-3165-8b85-2c10584d9c2d code: null type: entrada payment_method: cheque amount: 3582.34 due_date: '2026-07-18T03: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: 'Et iste quae vel rerum non non nemo perferendis.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: sed field2: 52 field3: false notes: 'At nemo aut qui dolore eius aut aliquid mollitia.' 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: 9f1228be-5beb-3336-95a7-5ac63bb7e6df code: null type: saída payment_method: boleto amount: 6769.27 due_date: '2026-07-06T03:00:00.000000Z' status: null payment_date: null protest_date: null paid_amount: null interest_amount: null penalty_amount: null notary_fee_amount: null description: 'Aut recusandae omnis est aspernatur quo dolorem.' 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: voluptatum field2: 70 field3: true notes: 'Nihil et non in distinctio est quam et.' created_at: null updated_at: null - id: 23a8ea41-647e-3165-8b85-2c10584d9c2d code: null type: entrada payment_method: cheque amount: 3582.34 due_date: '2026-07-18T03: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: 'Et iste quae vel rerum non non nemo perferendis.' is_recurring: null recurrence_config: null parent_id: null recurrence_order: 1 total_recurrences: null children_count: 0 remaining_recurrences: null has_children: false field1: sed field2: 52 field3: false notes: 'At nemo aut qui dolore eius aut aliquid mollitia.' created_at: null updated_at: null items: type: object properties: id: type: string example: 9f1228be-5beb-3336-95a7-5ac63bb7e6df code: type: string example: null nullable: true type: type: string example: saída payment_method: type: string example: boleto amount: type: number example: 6769.27 due_date: type: string example: '2026-07-06T03: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: 'Aut recusandae omnis est aspernatur quo dolorem.' 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: voluptatum field2: type: integer example: 70 field3: type: boolean example: true notes: type: string example: 'Nihil et non in distinctio est quam 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' 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: c217cfca-78ba-3b1a-878d-16479c11596a nullable: true customer_id: type: string description: 'Cliente. The uuid of an existing record in the customers table.' example: 0ed7c60d-2df6-3975-96cf-05840ddc0c44 nullable: true work_id: type: string description: 'Obra. The uuid of an existing record in the works table.' example: 3235569c-b44a-3ce6-b12d-3291d5a5f0a2 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: 030b4c20-bfba-3dee-ac1d-9b211730a6aa 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/import-nfe: post: summary: 'Import NFe installments' operationId: importNFeInstallments description: 'Gera contas a pagar para as parcelas selecionadas de uma nota fiscal.' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string total: integer properties: message: type: string example: string total: type: string example: integer tags: - 'Accounts Payable Receivable' requestBody: required: true content: application/json: schema: type: object properties: fiscal_document_id: type: string description: 'The uuid of an existing record in the fiscal_documents table.' example: sit installment_ids: type: array description: 'The uuid of an existing record in the fiscal_document_installments table.' example: - eius items: type: string payment_method: type: string description: '' example: cheque enum: - cheque - boleto - outro nullable: true required: - fiscal_document_id '/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: dolor 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: c89b66fe-4592-336f-bb6c-1d45199935ad code: null type: entrada payment_method: cheque amount: 5810.19 due_date: '2026-07-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: 'Natus tempore autem necessitatibus sint quidem iusto et laudantium.' 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: odit field2: 79 field3: true notes: 'Dolores aut est nam aut enim dolorem eos odio.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: c89b66fe-4592-336f-bb6c-1d45199935ad code: type: string example: null nullable: true type: type: string example: entrada payment_method: type: string example: cheque amount: type: number example: 5810.19 due_date: type: string example: '2026-07-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: 'Natus tempore autem necessitatibus sint quidem iusto et laudantium.' 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: odit field2: type: integer example: 79 field3: type: boolean example: true notes: type: string example: 'Dolores aut est nam aut enim dolorem eos odio.' 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: 730f8c3b-6abe-3bd3-958a-6a38139075a3 nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: 7b0cf902-64bf-3734-b004-0287b4a5c6d8 nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: cceba3e9-5c20-3687-b79d-60b4b6e1d345 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: e391ecfa-d5a6-3e87-8b4c-f3d9576b931b 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: harum 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: hallie68@example.com password: type: string description: 'User password.' example: password required: - email - password security: [] /api/auth/user: get: summary: Me operationId: me description: 'Get the current user' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: fb4a1034-7ccf-39a9-aa92-9d1cbd7d1837 name: 'Madie Bailey' username: lois39 email: orpha.bernier@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: fb4a1034-7ccf-39a9-aa92-9d1cbd7d1837 name: type: string example: 'Madie Bailey' username: type: string example: lois39 email: type: string example: orpha.bernier@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: ritchie.rod 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: - 954a106e-5db6-3a14-abfd-27c81118dca6 items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - 886f4116-b584-3bb3-b248-ab8759c0e99b 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: ikudrmpnsivykqql 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: ipsa 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/transfers: post: summary: 'Transfer between bank accounts' operationId: transferBetweenBankAccounts description: 'Transfers funds from a source account to a destination account' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string data: object properties: message: type: string example: string data: type: string example: object tags: - 'Bank Account Movements' requestBody: required: true content: application/json: schema: type: object properties: source_id: type: string description: 'Source id. The value and destination_id must be different. The uuid of an existing record in the bank_accounts table.' example: 'Example Source id' destination_id: type: string description: 'Destination id. The uuid of an existing record in the bank_accounts table.' example: 'Example Destination id' amount: type: number description: Amount. example: 1.0 description: type: string description: 'Description. O campo value não pode ser superior a 255 caracteres.' example: 'Example Description' nullable: true transaction_date: type: string description: 'Transaction date. Must be a valid date in the format Y-m-d H:i:s.' example: '2024-01-01' transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: 'Example Transaction category id' nullable: true required: - source_id - destination_id - amount - transaction_date '/api/bank-accounts/transfers/{bankTransfer}': delete: summary: 'Delete a bank transfer' operationId: deleteABankTransfer description: 'Reverts a transfer by deleting both cash flows and the transfer record' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Bank Account Movements' parameters: - in: path name: bankTransfer description: '' example: qui required: true schema: type: string '/api/bank-accounts/{bankAccount}/deposit': post: summary: 'Deposit into bank account' operationId: depositIntoBankAccount description: 'Adds funds to a bank account' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Bank Account Movements' requestBody: required: true content: application/json: schema: type: object properties: amount: type: number description: Amount. example: 1.0 description: type: string description: 'Description. O campo value não pode ser superior a 255 caracteres.' example: 'Example Description' nullable: true transaction_date: type: string description: 'Transaction date. Must be a valid date in the format Y-m-d H:i:s.' example: '2024-01-01' transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: 'Example Transaction category id' nullable: true required: - amount - transaction_date parameters: - in: path name: bankAccount description: '' example: 17 required: true schema: type: integer '/api/bank-accounts/{bankAccount}/withdraw': post: summary: 'Withdraw from bank account' operationId: withdrawFromBankAccount description: 'Removes funds from a bank account' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Bank Account Movements' requestBody: required: true content: application/json: schema: type: object properties: amount: type: number description: Amount. example: 1.0 description: type: string description: 'Description. O campo value não pode ser superior a 255 caracteres.' example: 'Example Description' nullable: true transaction_date: type: string description: 'Transaction date. Must be a valid date in the format Y-m-d H:i:s.' example: '2024-01-01' transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: 'Example Transaction category id' nullable: true required: - amount - transaction_date parameters: - in: path name: bankAccount description: '' example: 11 required: true schema: type: integer /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/default-by-payment-method: get: summary: 'Get default bank account by payment method' operationId: getDefaultBankAccountByPaymentMethod description: 'Returns the bank account configured as default for the given payment method. Responds 404 when no default is configured.' parameters: - in: query name: method description: 'Forma de pagamento (pix, bank_transfer, cash, check).' example: cash required: true schema: type: string description: 'Forma de pagamento (pix, bank_transfer, cash, check).' example: cash enum: - pix - bank_transfer - cash - check responses: 200: description: '' content: application/json: schema: type: object example: data: id: 898fdca7-7d8b-3b2a-aa58-28c178f0e05e agency: '3649' account: 2153344-4 type: corrente balance: 5086.99 holder_type: pf alias: rerum limit: 3429.69 available_balance: 8516.68 used_limit: 0 available_limit: 3429.69 is_default: null default_payment_method: null bank: id: null name: null code: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 898fdca7-7d8b-3b2a-aa58-28c178f0e05e agency: type: string example: '3649' account: type: string example: 2153344-4 type: type: string example: corrente balance: type: number example: 5086.99 holder_type: type: string example: pf alias: type: string example: rerum limit: type: number example: 3429.69 available_balance: type: number example: 8516.68 used_limit: type: integer example: 0 available_limit: type: number example: 3429.69 is_default: type: string example: null nullable: true default_payment_method: 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 404: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string 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: b7837884-419f-3401-a34f-a082adcc22ac agency: '8240' account: 7073471-2 type: poupança balance: 3683.88 holder_type: pf alias: est limit: 6410.31 available_balance: 10094.19 used_limit: 0 available_limit: 6410.31 is_default: null default_payment_method: null bank: id: null name: null code: null created_at: null updated_at: null - id: 2517c77f-bc29-362e-bb3c-b7422c1ebc88 agency: '4815' account: 7034613-0 type: poupança balance: 9812.76 holder_type: pj alias: harum limit: 5538.41 available_balance: 15351.17 used_limit: 0 available_limit: 5538.41 is_default: null default_payment_method: 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: b7837884-419f-3401-a34f-a082adcc22ac agency: '8240' account: 7073471-2 type: poupança balance: 3683.88 holder_type: pf alias: est limit: 6410.31 available_balance: 10094.19 used_limit: 0 available_limit: 6410.31 is_default: null default_payment_method: null bank: id: null name: null code: null created_at: null updated_at: null - id: 2517c77f-bc29-362e-bb3c-b7422c1ebc88 agency: '4815' account: 7034613-0 type: poupança balance: 9812.76 holder_type: pj alias: harum limit: 5538.41 available_balance: 15351.17 used_limit: 0 available_limit: 5538.41 is_default: null default_payment_method: null bank: id: null name: null code: null created_at: null updated_at: null items: type: object properties: id: type: string example: b7837884-419f-3401-a34f-a082adcc22ac agency: type: string example: '8240' account: type: string example: 7073471-2 type: type: string example: poupança balance: type: number example: 3683.88 holder_type: type: string example: pf alias: type: string example: est limit: type: number example: 6410.31 available_balance: type: number example: 10094.19 used_limit: type: integer example: 0 available_limit: type: number example: 6410.31 is_default: type: string example: null nullable: true default_payment_method: 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: 8639268-9 bank_id: type: string description: 'Bank id. The uuid of an existing record in the banks table.' example: 09bc7541-9c86-3be5-8261-3f1fae159ce5 type: type: string description: Type. example: 'Example Type' enum: - corrente - poupança - caixa 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 default_payment_method: type: string description: 'Default payment method.' example: 'Example Default payment method' enum: - pix - bank_transfer - cash - check nullable: true required: - agency - account - bank_id - type - holder_type - alias - balance '/api/bank-accounts/{bankAccount}': put: summary: 'Update bank account' operationId: updateBankAccount description: 'Update a bank account' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: string properties: message: type: string example: string tags: - 'Bank Accounts' requestBody: required: false content: application/json: schema: type: object properties: agency: type: string description: Agency. example: 'Example Agency' account: type: string description: Account. example: 9937544-4 bank_id: type: string description: 'Bank id. The uuid of an existing record in the banks table.' example: 6e39e48d-9eb2-3adc-86d9-39f6fc80a0c1 type: type: string description: Type. example: 'Example Type' enum: - corrente - poupança - caixa 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 default_payment_method: type: string description: 'Default payment method.' example: 'Example Default payment method' enum: - pix - bank_transfer - cash - check nullable: true get: summary: 'Show bank account' operationId: showBankAccount description: 'Show a bank account' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 5192609c-9f4b-31b4-bbe7-1e6d2a278938 agency: '8338' account: 8480814-5 type: corrente balance: 3680.61 holder_type: pj alias: fuga limit: 9819.41 available_balance: 13500.02 used_limit: 0 available_limit: 9819.41 is_default: null default_payment_method: null bank: id: null name: null code: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 5192609c-9f4b-31b4-bbe7-1e6d2a278938 agency: type: string example: '8338' account: type: string example: 8480814-5 type: type: string example: corrente balance: type: number example: 3680.61 holder_type: type: string example: pj alias: type: string example: fuga limit: type: number example: 9819.41 available_balance: type: number example: 13500.02 used_limit: type: integer example: 0 available_limit: type: number example: 9819.41 is_default: type: string example: null nullable: true default_payment_method: 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: 6 required: true schema: type: integer '/api/bank-accounts/{bankAccount}/statements/summary': get: summary: 'Bank statement summary' operationId: bankStatementSummary description: 'Get aggregated summary for the period' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: opening_balance: number closing_balance: number total_credit: number total_debit: number count: integer date_start: string date_end: string properties: data: type: object properties: opening_balance: type: string example: number closing_balance: type: string example: number total_credit: type: string example: number total_debit: type: string example: number count: type: string example: integer date_start: type: string example: string date_end: type: string example: string tags: - 'Bank Statements' requestBody: required: false content: application/json: schema: type: object properties: date_start: type: string description: 'Date start. O campo value deve ser uma data válida.' example: '2024-01-01' nullable: true date_end: type: string description: 'Date end. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a date_start.' example: '2024-01-01' nullable: true parameters: - in: path name: bankAccount description: '' example: 16 required: true schema: type: integer '/api/bank-accounts/{bankAccount}/statements': get: summary: 'List bank statements' operationId: listBankStatements description: 'List statements for a bank account. Default period: last 30 days.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: null type: null amount: null balance_after: null description: null date: null statement_date: null created_at: null updated_at: null - id: null type: null amount: null balance_after: null description: null date: null statement_date: 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: null type: null amount: null balance_after: null description: null date: null statement_date: null created_at: null updated_at: null - id: null type: null amount: null balance_after: null description: null date: null statement_date: null created_at: null updated_at: null items: type: object properties: id: type: string example: null nullable: true type: type: string example: null nullable: true amount: type: string example: null nullable: true balance_after: type: string example: null nullable: true description: type: string example: null nullable: true date: type: string example: null nullable: true statement_date: 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 Statements' requestBody: required: false content: application/json: schema: type: object properties: sort_by: type: string description: '' example: eaque nullable: true sort_desc: type: boolean description: '' example: true nullable: true page: type: integer description: 'O campo value deve ser pelo menos 1.' example: 25 nullable: true per_page: type: integer description: 'O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 4 nullable: true q: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: vmszrwgdozxkidjepjunjdj nullable: true type: type: string description: '' example: entrada enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste - 'ajuste saída' nullable: true date_start: type: string description: 'O campo value deve ser uma data válida.' example: '2026-06-22T14:27:23' nullable: true date_end: type: string description: 'O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a date_start.' example: '2044-07-15' nullable: true cash_flow_id: type: string description: 'The uuid of an existing record in the cash_flows table.' example: null nullable: true parameters: - in: path name: bankAccount description: '' example: 20 required: true schema: type: integer '/api/bank-accounts/{bankAccount}/statements/{bankStatement}': get: summary: 'Show bank statement' operationId: showBankStatement description: 'Show a specific statement entry' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: null type: null amount: null balance_after: null description: null date: null statement_date: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: null nullable: true type: type: string example: null nullable: true amount: type: string example: null nullable: true balance_after: type: string example: null nullable: true description: type: string example: null nullable: true date: type: string example: null nullable: true statement_date: type: string example: null nullable: true created_at: type: string example: null nullable: true updated_at: type: string example: null nullable: true tags: - 'Bank Statements' parameters: - in: path name: bankAccount description: '' example: 7 required: true schema: type: integer - in: path name: bankStatement description: '' example: dignissimos required: true schema: type: string /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: 55c255bd-1f74-31bc-b7c7-65f33158d642 name: 'Ferreira e Ferreira S.A.' code: '534' - id: 758c4d52-814f-396d-af28-c85d34547771 name: 'Pereira e Pereira' code: '302' 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: 55c255bd-1f74-31bc-b7c7-65f33158d642 name: 'Ferreira e Ferreira S.A.' code: '534' - id: 758c4d52-814f-396d-af28-c85d34547771 name: 'Pereira e Pereira' code: '302' items: type: object properties: id: type: string example: 55c255bd-1f74-31bc-b7c7-65f33158d642 name: type: string example: 'Ferreira e Ferreira S.A.' code: type: string example: '534' 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: 5662929e-eb71-34b4-94a5-6129d7899e46 name: 'Cruz e Serra' code: '320' properties: data: type: object properties: id: type: string example: 5662929e-eb71-34b4-94a5-6129d7899e46 name: type: string example: 'Cruz e Serra' code: type: string example: '320' 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 - 'ajuste saída' nullable: true - in: query name: description description: 'Description .' example: 'Voluptatibus explicabo culpa culpa ad ipsam amet nihil.' required: false schema: type: string description: 'Description .' example: 'Voluptatibus explicabo culpa culpa ad ipsam amet nihil.' - in: query name: categories description: 'The uuid of an existing record in the transaction_categories table.' example: - sunt required: false schema: type: array description: 'The uuid of an existing record in the transaction_categories table.' example: - sunt 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: - enim required: false schema: type: array description: 'The uuid of an existing record in the bank_accounts table.' example: - enim items: type: string - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - quia required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - quia items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - est required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - est items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - ex required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - ex 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 - 'ajuste saída' nullable: true - in: query name: description description: 'Description .' example: 'Quae ea et cupiditate molestias.' required: false schema: type: string description: 'Description .' example: 'Quae ea et cupiditate molestias.' - in: query name: categories description: 'The uuid of an existing record in the transaction_categories table.' example: - et required: false schema: type: array description: 'The uuid of an existing record in the transaction_categories table.' example: - et 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: - aliquid required: false schema: type: array description: 'The uuid of an existing record in the bank_accounts table.' example: - aliquid items: type: string - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - dolore required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - dolore items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - esse required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - esse items: type: string - in: query name: works description: 'The uuid of an existing record in the works table.' example: - exercitationem required: false schema: type: array description: 'The uuid of an existing record in the works table.' example: - exercitationem items: type: string responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 6260a579-4b3a-30ae-a3b5-95fce66c8998 code: FC-20094711 type: transferência amount: -4704.43 description: 'Vel voluptatem repudiandae illo ab rerum.' transaction_date: '2014-02-03T02:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null - id: bb97c45e-2100-399c-8bf3-f7ae09d69571 code: FC-63507609 type: transferência amount: -707.55 description: 'Ipsam sit totam sed ut omnis dolore et architecto.' transaction_date: '1974-11-04T03: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: 6260a579-4b3a-30ae-a3b5-95fce66c8998 code: FC-20094711 type: transferência amount: -4704.43 description: 'Vel voluptatem repudiandae illo ab rerum.' transaction_date: '2014-02-03T02:00:00.000000Z' transaction_category: id: null name: null type: null created_at: null updated_at: null - id: bb97c45e-2100-399c-8bf3-f7ae09d69571 code: FC-63507609 type: transferência amount: -707.55 description: 'Ipsam sit totam sed ut omnis dolore et architecto.' transaction_date: '1974-11-04T03: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: 6260a579-4b3a-30ae-a3b5-95fce66c8998 code: type: string example: FC-20094711 type: type: string example: transferência amount: type: number example: -4704.43 description: type: string example: 'Vel voluptatem repudiandae illo ab rerum.' transaction_date: type: string example: '2014-02-03T02: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 - 'ajuste saída' cash_session_id: type: string description: 'Cash session id. The uuid of an existing record in the cash_sessions table.' example: 407b7c18-e10c-343a-bd52-dfc5ac261462 transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: c6939ff3-56b7-3b2c-acf0-90358dfb5a4c bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: bd5743e4-7b2b-32a0-ace8-69a6085fe538 nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: 7c902a1f-40d6-3435-9521-fdcabf52729f nullable: true supplier_id: type: string description: 'Supplier id. The uuid of an existing record in the suppliers table.' example: 81984a1d-ff76-35d5-88d4-2574fd087039 nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: 2c8c7f1a-5a90-3834-bb6f-f78e79fa712f 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: cde0bc60-a9a3-3ecf-9b01-267aa501f0a4 code: FC-92235162 type: ajuste amount: 5362.9 description: 'Quod dolorum animi eius nulla aut laborum sed.' transaction_date: '2006-12-06T02: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: cde0bc60-a9a3-3ecf-9b01-267aa501f0a4 code: type: string example: FC-92235162 type: type: string example: ajuste amount: type: number example: 5362.9 description: type: string example: 'Quod dolorum animi eius nulla aut laborum sed.' transaction_date: type: string example: '2006-12-06T02: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 - 'ajuste saída' cash_session_id: type: string description: 'Cash session id. The uuid of an existing record in the cash_sessions table.' example: 3d0af9aa-0e61-3228-9347-c08b0c277de7 transaction_category_id: type: string description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.' example: 71f9a8d8-1f25-391f-9829-ee4df81d5b77 bank_account_id: type: string description: 'Bank account id. The uuid of an existing record in the bank_accounts table.' example: a600873f-e6af-3caa-b6ba-2e9e145eb4cc nullable: true customer_id: type: string description: 'Customer id. The uuid of an existing record in the customers table.' example: 0a48e05d-97b6-36ea-9df3-0149610e9709 nullable: true supplier_id: type: string description: 'Supplier id. The uuid of an existing record in the suppliers table.' example: 5cd8f242-207f-3074-a3a3-2a3023d88d6b nullable: true work_id: type: string description: 'Work id. The uuid of an existing record in the works table.' example: 75d15780-6b85-3da4-8bd3-3dfd1847aef3 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: 12 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: d660b251-2e4f-3fdc-84dc-e83089d924a2 code: null opened_by: null opened_at: '2010-03-01T11:17:35.000000Z' closed_by: null closed_at: '2025-02-15T05:39:15.000000Z' opening_balance: 2699.37 closing_balance: 6409.54 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1975-07-15T10:53:14.000000Z' updated_at: '1996-01-22T11:01:24.000000Z' - id: 02ffd136-f450-3434-ad0c-9fb685dadeae code: null opened_by: null opened_at: '1996-04-27T01:16:09.000000Z' closed_by: null closed_at: '2012-09-03T05:34:06.000000Z' opening_balance: 9118.66 closing_balance: 1052.65 total_income: 0 total_expense: 0 total_balance: 0 status: Fechado created_at: '2015-05-11T23:52:34.000000Z' updated_at: '2017-08-20T11:28:36.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: d660b251-2e4f-3fdc-84dc-e83089d924a2 code: null opened_by: null opened_at: '2010-03-01T11:17:35.000000Z' closed_by: null closed_at: '2025-02-15T05:39:15.000000Z' opening_balance: 2699.37 closing_balance: 6409.54 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1975-07-15T10:53:14.000000Z' updated_at: '1996-01-22T11:01:24.000000Z' - id: 02ffd136-f450-3434-ad0c-9fb685dadeae code: null opened_by: null opened_at: '1996-04-27T01:16:09.000000Z' closed_by: null closed_at: '2012-09-03T05:34:06.000000Z' opening_balance: 9118.66 closing_balance: 1052.65 total_income: 0 total_expense: 0 total_balance: 0 status: Fechado created_at: '2015-05-11T23:52:34.000000Z' updated_at: '2017-08-20T11:28:36.000000Z' items: type: object properties: id: type: string example: d660b251-2e4f-3fdc-84dc-e83089d924a2 code: type: string example: null nullable: true opened_by: type: string example: null nullable: true opened_at: type: string example: '2010-03-01T11:17:35.000000Z' closed_by: type: string example: null nullable: true closed_at: type: string example: '2025-02-15T05:39:15.000000Z' opening_balance: type: number example: 2699.37 closing_balance: type: number example: 6409.54 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: '1975-07-15T10:53:14.000000Z' updated_at: type: string example: '1996-01-22T11:01:24.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: 9bf4d492-3866-3b65-bdfe-9921e0be5008 code: null opened_by: null opened_at: '2015-10-28T21:24:49.000000Z' closed_by: null closed_at: '1982-05-26T16:59:35.000000Z' opening_balance: 3655.8 closing_balance: 238.42 total_income: 0 total_expense: 0 total_balance: 0 status: Aberto created_at: '1985-12-25T13:04:27.000000Z' updated_at: '2002-04-20T00:58:23.000000Z' properties: data: type: object properties: id: type: string example: 9bf4d492-3866-3b65-bdfe-9921e0be5008 code: type: string example: null nullable: true opened_by: type: string example: null nullable: true opened_at: type: string example: '2015-10-28T21:24:49.000000Z' closed_by: type: string example: null nullable: true closed_at: type: string example: '1982-05-26T16:59:35.000000Z' opening_balance: type: number example: 3655.8 closing_balance: type: number example: 238.42 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: '1985-12-25T13:04:27.000000Z' updated_at: type: string example: '2002-04-20T00:58:23.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: fb04aaf5-f57f-38c3-844f-5040fb060a5f 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: 39351998-a851-361a-b037-5ca6f535e586 code: null opened_by: null opened_at: '2022-02-26T18:50:04.000000Z' closed_by: null closed_at: '1976-11-30T01:56:50.000000Z' opening_balance: 7148.24 closing_balance: 4955.16 total_income: 0 total_expense: 0 total_balance: 0 status: Fechado created_at: '1980-04-22T06:04:55.000000Z' updated_at: '2009-06-15T11:59:32.000000Z' properties: data: type: object properties: id: type: string example: 39351998-a851-361a-b037-5ca6f535e586 code: type: string example: null nullable: true opened_by: type: string example: null nullable: true opened_at: type: string example: '2022-02-26T18:50:04.000000Z' closed_by: type: string example: null nullable: true closed_at: type: string example: '1976-11-30T01:56:50.000000Z' opening_balance: type: number example: 7148.24 closing_balance: type: number example: 4955.16 total_income: type: integer example: 0 total_expense: type: integer example: 0 total_balance: type: integer example: 0 status: type: string example: Fechado created_at: type: string example: '1980-04-22T06:04:55.000000Z' updated_at: type: string example: '2009-06-15T11:59:32.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: 317df7e8-b3fd-320a-9e52-520e427ac96b 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: 32f0f3c1-fd25-3b8f-90ea-8414a994fc73 name: 'Dr. Matheus Carrara Pacheco' email: delvalle.ana@example.net phone: '(94) 91958-2490' document: 165.966.926-04 type: pf responsible: 'Emiliano Estrada Mendes 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: 6d5db268-e995-3dc0-8fc5-ba46058dbf32 name: 'Ivana Gabi Serna Sobrinho' email: ohana.mendonca@example.com phone: '(92) 2509-0623' document: 960.406.287-58 type: pj responsible: 'Sra. Talita Flor Lira' 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: 32f0f3c1-fd25-3b8f-90ea-8414a994fc73 name: 'Dr. Matheus Carrara Pacheco' email: delvalle.ana@example.net phone: '(94) 91958-2490' document: 165.966.926-04 type: pf responsible: 'Emiliano Estrada Mendes 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: 6d5db268-e995-3dc0-8fc5-ba46058dbf32 name: 'Ivana Gabi Serna Sobrinho' email: ohana.mendonca@example.com phone: '(92) 2509-0623' document: 960.406.287-58 type: pj responsible: 'Sra. Talita Flor Lira' 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: 32f0f3c1-fd25-3b8f-90ea-8414a994fc73 name: type: string example: 'Dr. Matheus Carrara Pacheco' email: type: string example: delvalle.ana@example.net phone: type: string example: '(94) 91958-2490' document: type: string example: 165.966.926-04 type: type: string example: pf responsible: type: string example: 'Emiliano Estrada Mendes 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: 8f4afd11-8263-3fe5-9a85-a27bedafa10b name: 'Isaac Pereira Neto' email: paola81@example.com phone: '(12) 97929-0145' document: 563.398.617-25 type: pf responsible: 'Mônica Maia Neves' 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: 8f4afd11-8263-3fe5-9a85-a27bedafa10b name: type: string example: 'Isaac Pereira Neto' email: type: string example: paola81@example.com phone: type: string example: '(12) 97929-0145' document: type: string example: 563.398.617-25 type: type: string example: pf responsible: type: string example: 'Mônica Maia Neves' 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: 98c6068f-e186-34e1-83d9-00e49b011e42 name: 'Marília Renata Serra Filho' description: 'Totam quos debitis repudiandae laudantium officiis consectetur. Exercitationem possimus corporis ipsa est.' module: document - id: 3ce3108b-6574-3ecd-ac42-cfe611fa7475 name: 'Dr. Vicente Santiago Santacruz Sobrinho' description: 'Omnis quia et voluptas molestiae. Ducimus et deleniti ad eos maxime. Sint eaque in voluptas possimus.' 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: 98c6068f-e186-34e1-83d9-00e49b011e42 name: 'Marília Renata Serra Filho' description: 'Totam quos debitis repudiandae laudantium officiis consectetur. Exercitationem possimus corporis ipsa est.' module: document - id: 3ce3108b-6574-3ecd-ac42-cfe611fa7475 name: 'Dr. Vicente Santiago Santacruz Sobrinho' description: 'Omnis quia et voluptas molestiae. Ducimus et deleniti ad eos maxime. Sint eaque in voluptas possimus.' module: document items: type: object properties: id: type: string example: 98c6068f-e186-34e1-83d9-00e49b011e42 name: type: string example: 'Marília Renata Serra Filho' description: type: string example: 'Totam quos debitis repudiandae laudantium officiis consectetur. Exercitationem possimus corporis ipsa est.' 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: 248ac93c-2716-3381-a3e9-c12e327df1a9 name: 'Dr. Lucas Pontes Guerra' description: 'Ut et et necessitatibus et. Quia repudiandae architecto voluptate qui sint consectetur voluptates.' module: document properties: data: type: object properties: id: type: string example: 248ac93c-2716-3381-a3e9-c12e327df1a9 name: type: string example: 'Dr. Lucas Pontes Guerra' description: type: string example: 'Ut et et necessitatibus et. Quia repudiandae architecto voluptate qui sint consectetur voluptates.' 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: sed 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: - dolor required: false schema: type: array description: 'The uuid of an existing record in the document_categories table.' example: - dolor 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: cum required: false schema: type: string description: 'Type of the related documentable entity. The type of an existing record in the documentables table.' example: cum nullable: true - in: query name: customers description: 'The uuid of an existing record in the customers table.' example: - fugiat required: false schema: type: array description: 'The uuid of an existing record in the customers table.' example: - fugiat items: type: string - in: query name: suppliers description: 'The uuid of an existing record in the suppliers table.' example: - odio required: false schema: type: array description: 'The uuid of an existing record in the suppliers table.' example: - odio items: type: string responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 38e3d331-5f07-327d-991d-86b819593743 name: 'Dirce Estrada Neto' file: id: null url: null extension: null created_at: null updated_at: null - id: 78ab50c7-6e97-3cb3-8a7f-0fa99f230fe1 name: 'Arthur 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: 38e3d331-5f07-327d-991d-86b819593743 name: 'Dirce Estrada Neto' file: id: null url: null extension: null created_at: null updated_at: null - id: 78ab50c7-6e97-3cb3-8a7f-0fa99f230fe1 name: 'Arthur Rico Neto' file: id: null url: null extension: null created_at: null updated_at: null items: type: object properties: id: type: string example: 38e3d331-5f07-327d-991d-86b819593743 name: type: string example: 'Dirce Estrada Neto' 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: 4f35e65c-7e6d-31e7-879d-fcbc584b124c 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: 4c394963-5b66-3a32-9dfb-3db74177ac6f name: 'Lara Delvalle Padilha Neto' file: id: null url: null extension: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 4c394963-5b66-3a32-9dfb-3db74177ac6f name: type: string example: 'Lara Delvalle Padilha Neto' 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: 78a9a1ba-3ba6-3026-8c64-10e9d5ad9290 file: type: object description: Arquivo. example: - example1 - example2 properties: path: type: string description: 'Caminho do arquivo. This field is required when file is present.' example: 'Example File path' name: type: string description: 'Nome do arquivo.' example: 'Example Name' extension: type: string description: 'Extensão do arquivo.' example: 'Example File extension' size: type: string description: 'Tamanho do arquivo.' example: 'Example File size' documentable_type: type: string description: 'Documentable type.' example: 'Example Documentable type' enum: - customer - work - work_location - supplier - employee documentable_id: type: string description: 'Documentable id.' example: 'Example Documentable id' parameters: - in: path name: id description: 'The ID of the document.' example: 17 required: true schema: type: integer - in: path name: document description: 'Document ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string '/api/documents/{document}': delete: summary: 'Delete document' operationId: deleteDocument description: 'Delete a document' parameters: [] responses: 204: description: '' content: application/json: schema: type: object nullable: true tags: - Documents parameters: - in: path name: document description: 'Document ID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string /api/employee-roles: get: summary: 'List employee roles' operationId: listEmployeeRoles description: 'List all employee roles' parameters: - in: query name: sort_by description: 'Field to sort by.' example: created_at required: false schema: type: string description: 'Field to sort by.' example: created_at nullable: true - in: query name: sort_desc description: 'Sort order (true for descending, false for ascending).' example: true required: false schema: type: boolean description: 'Sort order (true for descending, false for ascending).' example: true nullable: true - in: query name: page description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 required: false schema: type: integer description: 'Page number for pagination. O campo value deve ser pelo menos 1.' example: 1 nullable: true - in: query name: per_page description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 required: false schema: type: integer description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 15 nullable: true - in: query name: q description: 'Search query.' example: Manager required: false schema: type: string description: 'Search query.' example: Manager nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: fb87afbb-6a34-4d28-a65c-fa1286e43efb name: ipsam description: null created_at: null updated_at: null - id: 2ad63a06-8896-4d4b-b255-35490ae8f12d name: labore description: 'Vel modi ex eum sunt.' 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: fb87afbb-6a34-4d28-a65c-fa1286e43efb name: ipsam description: null created_at: null updated_at: null - id: 2ad63a06-8896-4d4b-b255-35490ae8f12d name: labore description: 'Vel modi ex eum sunt.' created_at: null updated_at: null items: type: object properties: id: type: string example: fb87afbb-6a34-4d28-a65c-fa1286e43efb name: type: string example: ipsam 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: 3781f5ce-2078-4798-9caf-2a987bad7a2f name: quaerat description: 'Velit maiores error tenetur sunt voluptas fugit.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 3781f5ce-2078-4798-9caf-2a987bad7a2f name: type: string example: quaerat description: type: string example: 'Velit maiores error tenetur sunt voluptas fugit.' 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: omnis 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: bea1e9d5-d23e-4ca0-b3ae-df715bba026d name: 'Marisa Salazar Pena' cpf: 914.556.737-59 rg: null ctps: '179988584' phone: null birthdate: '1990-07-25T03:00:00.000000Z' email: amaral.wilson@example.com pis_pasep: '75062369264' admission_date: '2009-10-27T02:00:00.000000Z' daily_salary: null monthly_salary: null nationality: Paraguai place_of_birth: 'São Gael 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 - id: 31d0e49d-31d9-475d-8054-9a7c50e13c5c name: 'Dr. Alexandre Cruz Camacho Filho' cpf: 058.345.277-25 rg: null ctps: '915731811' phone: '(81) 3672-4362' birthdate: null email: pontes.suellen@example.net pis_pasep: '39581143900' admission_date: null daily_salary: '78.10' monthly_salary: '4447.92' nationality: Tonga place_of_birth: 'Santa Robson 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 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: bea1e9d5-d23e-4ca0-b3ae-df715bba026d name: 'Marisa Salazar Pena' cpf: 914.556.737-59 rg: null ctps: '179988584' phone: null birthdate: '1990-07-25T03:00:00.000000Z' email: amaral.wilson@example.com pis_pasep: '75062369264' admission_date: '2009-10-27T02:00:00.000000Z' daily_salary: null monthly_salary: null nationality: Paraguai place_of_birth: 'São Gael 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 - id: 31d0e49d-31d9-475d-8054-9a7c50e13c5c name: 'Dr. Alexandre Cruz Camacho Filho' cpf: 058.345.277-25 rg: null ctps: '915731811' phone: '(81) 3672-4362' birthdate: null email: pontes.suellen@example.net pis_pasep: '39581143900' admission_date: null daily_salary: '78.10' monthly_salary: '4447.92' nationality: Tonga place_of_birth: 'Santa Robson 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 items: type: object properties: id: type: string example: bea1e9d5-d23e-4ca0-b3ae-df715bba026d name: type: string example: 'Marisa Salazar Pena' cpf: type: string example: 914.556.737-59 rg: type: string example: null nullable: true ctps: type: string example: '179988584' phone: type: string example: null nullable: true birthdate: type: string example: '1990-07-25T03:00:00.000000Z' email: type: string example: amaral.wilson@example.com pis_pasep: type: string example: '75062369264' admission_date: type: string example: '2009-10-27T02:00:00.000000Z' daily_salary: type: string example: null nullable: true monthly_salary: type: string example: null nullable: true nationality: type: string example: Paraguai place_of_birth: type: string example: 'São Gael 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 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: d364b0f0-adc1-4e93-affb-a91e7fdc2e70 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: a36b4983-900a-4fc3-abec-f01b6d390102 name: 'Maria Delvalle' cpf: 503.187.486-03 rg: null ctps: null phone: null birthdate: '2006-04-15T03:00:00.000000Z' email: milene.fontes@example.net pis_pasep: null admission_date: null daily_salary: '215.49' monthly_salary: null nationality: Mônaco place_of_birth: "Vila Santiago d'Oeste" 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: a36b4983-900a-4fc3-abec-f01b6d390102 name: type: string example: 'Maria Delvalle' cpf: type: string example: 503.187.486-03 rg: type: string example: null nullable: true ctps: type: string example: null nullable: true phone: type: string example: null nullable: true birthdate: type: string example: '2006-04-15T03:00:00.000000Z' email: type: string example: milene.fontes@example.net pis_pasep: type: string example: null nullable: true admission_date: type: string example: null nullable: true daily_salary: type: string example: '215.49' monthly_salary: type: string example: null nullable: true nationality: type: string example: Mônaco place_of_birth: type: string example: "Vila Santiago d'Oeste" 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: 688144f6-2a0d-4aa5-afb7-c8f2627b940d 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: 2 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: adipisci agency: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: cxclfbawmdaqdlxxu account: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: svwgy account_type: type: string description: '' example: corrente enum: - corrente - poupança pix_key: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: etngfmj 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: 15 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: qui agency: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: mkocptrhbprihwrqxffzc account: type: string description: 'O campo value não pode ser superior a 255 caracteres.' example: fkqh 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: vtxgbdtchkphzqvmtyftibugt nullable: true favorite: type: boolean description: '' example: false parameters: - in: path name: employee_id description: 'The ID of the employee.' example: 20 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/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: 990c7356-761e-35be-900b-d85cb46e39eb 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: 39509b95-80cc-331d-a10c-bffdc75a4683 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: 11723af0-0093-36fc-a76b-44c63377987a 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/fiscal-documents: get: summary: 'List fiscal documents' operationId: listFiscalDocuments description: 'Lista notas fiscais com filtros por busca, fornecedor, obra e período.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: null nfe_access_key: null nfe_number: null nfe_series: null issue_date: null total_value: null emit: cnpj: null name: null dest: document: null name: null financial_status: pending products_imported_at: null created_at: null - id: null nfe_access_key: null nfe_number: null nfe_series: null issue_date: null total_value: null emit: cnpj: null name: null dest: document: null name: null financial_status: pending products_imported_at: null 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: 15 to: 2 total: 2 properties: data: type: array example: - id: null nfe_access_key: null nfe_number: null nfe_series: null issue_date: null total_value: null emit: cnpj: null name: null dest: document: null name: null financial_status: pending products_imported_at: null created_at: null - id: null nfe_access_key: null nfe_number: null nfe_series: null issue_date: null total_value: null emit: cnpj: null name: null dest: document: null name: null financial_status: pending products_imported_at: null created_at: null items: type: object properties: id: type: string example: null nullable: true nfe_access_key: type: string example: null nullable: true nfe_number: type: string example: null nullable: true nfe_series: type: string example: null nullable: true issue_date: type: string example: null nullable: true total_value: type: string example: null nullable: true emit: type: object properties: cnpj: type: string example: null nullable: true name: type: string example: null nullable: true dest: type: object properties: document: type: string example: null nullable: true name: type: string example: null nullable: true financial_status: type: string example: pending products_imported_at: type: string example: null nullable: true 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: 15 to: type: integer example: 2 total: type: integer example: 2 tags: - 'Fiscal Documents' requestBody: required: false content: application/json: schema: type: object properties: q: type: string description: '' example: architecto supplier_id: type: string description: 'The uuid of an existing record in the suppliers table.' example: excepturi work_id: type: string description: 'The uuid of an existing record in the works table.' example: cupiditate start_date: type: string description: 'O campo value deve ser uma data válida.' example: '2026-06-22T14:27:25' end_date: type: string description: 'O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a start_date.' example: '2095-01-09' per_page: type: integer description: 'O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 21 post: summary: 'Create fiscal document' operationId: createFiscalDocument description: 'Registra uma NFe a partir do XML já enviado ao S3 e o vincula às obras informadas.' parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: data: id: null nfe_access_key: null nfe_number: null nfe_series: null issue_date: null total_value: null emit: cnpj: null name: null dest: document: null name: null financial_status: pending products_imported_at: null created_at: null properties: data: type: object properties: id: type: string example: null nullable: true nfe_access_key: type: string example: null nullable: true nfe_number: type: string example: null nullable: true nfe_series: type: string example: null nullable: true issue_date: type: string example: null nullable: true total_value: type: string example: null nullable: true emit: type: object properties: cnpj: type: string example: null nullable: true name: type: string example: null nullable: true dest: type: object properties: document: type: string example: null nullable: true name: type: string example: null nullable: true financial_status: type: string example: pending products_imported_at: type: string example: null nullable: true created_at: type: string example: null nullable: true tags: - 'Fiscal Documents' requestBody: required: true content: application/json: schema: type: object properties: s3_file_path: type: string description: '' example: voluptas original_filename: type: string description: 'Must match the regex /\.xml$/i.' example: .xml$/i work_ids: type: array description: 'The uuid of an existing record in the works table.' example: - ducimus items: type: string required: - s3_file_path - original_filename '/api/fiscal-documents/{fiscalDocument}': get: summary: 'Get fiscal document' operationId: getFiscalDocument description: 'Detalha uma nota fiscal com arquivos e obras vinculadas.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: null nfe_access_key: null nfe_number: null nfe_series: null issue_date: null total_value: null emit: cnpj: null name: null dest: document: null name: null financial_status: pending products_imported_at: null created_at: null properties: data: type: object properties: id: type: string example: null nullable: true nfe_access_key: type: string example: null nullable: true nfe_number: type: string example: null nullable: true nfe_series: type: string example: null nullable: true issue_date: type: string example: null nullable: true total_value: type: string example: null nullable: true emit: type: object properties: cnpj: type: string example: null nullable: true name: type: string example: null nullable: true dest: type: object properties: document: type: string example: null nullable: true name: type: string example: null nullable: true financial_status: type: string example: pending products_imported_at: type: string example: null nullable: true created_at: type: string example: null nullable: true tags: - 'Fiscal Documents' parameters: - in: path name: fiscalDocument description: 'UUID da nota fiscal' example: et required: true schema: type: string '/api/fiscal-documents/{fiscalDocument}/files': post: summary: 'Attach file' operationId: attachFile description: 'Anexa um arquivo (ex.: PDF da NF) já enviado ao S3 à nota fiscal.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: null nfe_access_key: null nfe_number: null nfe_series: null issue_date: null total_value: null emit: cnpj: null name: null dest: document: null name: null financial_status: pending products_imported_at: null created_at: null properties: data: type: object properties: id: type: string example: null nullable: true nfe_access_key: type: string example: null nullable: true nfe_number: type: string example: null nullable: true nfe_series: type: string example: null nullable: true issue_date: type: string example: null nullable: true total_value: type: string example: null nullable: true emit: type: object properties: cnpj: type: string example: null nullable: true name: type: string example: null nullable: true dest: type: object properties: document: type: string example: null nullable: true name: type: string example: null nullable: true financial_status: type: string example: pending products_imported_at: type: string example: null nullable: true created_at: type: string example: null nullable: true tags: - 'Fiscal Documents' requestBody: required: true content: application/json: schema: type: object properties: file: type: object description: '' example: [] properties: path: type: string description: '' example: rerum name: type: string description: '' example: architecto extension: type: string description: '' example: a size: type: string description: '' example: null nullable: true required: - path - name - extension required: - file parameters: - in: path name: fiscalDocument description: 'UUID da nota fiscal' example: perferendis required: true schema: type: string '/api/fiscal-documents/{fiscalDocument}/works': put: summary: 'Sync works' operationId: syncWorks description: 'Sincroniza o vínculo documental da nota fiscal com N obras.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: null nfe_access_key: null nfe_number: null nfe_series: null issue_date: null total_value: null emit: cnpj: null name: null dest: document: null name: null financial_status: pending products_imported_at: null created_at: null properties: data: type: object properties: id: type: string example: null nullable: true nfe_access_key: type: string example: null nullable: true nfe_number: type: string example: null nullable: true nfe_series: type: string example: null nullable: true issue_date: type: string example: null nullable: true total_value: type: string example: null nullable: true emit: type: object properties: cnpj: type: string example: null nullable: true name: type: string example: null nullable: true dest: type: object properties: document: type: string example: null nullable: true name: type: string example: null nullable: true financial_status: type: string example: pending products_imported_at: type: string example: null nullable: true created_at: type: string example: null nullable: true tags: - 'Fiscal Documents' requestBody: required: false content: application/json: schema: type: object properties: work_ids: type: array description: 'The uuid of an existing record in the works table.' example: - quae items: type: string parameters: - in: path name: fiscalDocument description: 'UUID da nota fiscal' example: sunt required: true schema: type: string /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 fiscal_document_id: type: string description: 'Fiscal document id. The uuid of an existing record in the fiscal_documents table.' example: 019556e7-2e9f-777c-a177-30bbf0646c32 nullable: true required: - s3_file_path - original_filename - import_type /api/imports: get: summary: 'List Imports' operationId: listImports description: 'List all NFe imports 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: tempora 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: sunt 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: - sint items: type: string required: - mappings parameters: - in: path name: importId description: '' example: iusto required: true schema: type: string /api/locations/states: get: summary: 'List states' operationId: listStates description: 'List all states paginated' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: null name: 'nihil quidem' abbreviation: CE - id: null name: 'totam id' abbreviation: QC 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: 30 to: 2 total: 2 properties: data: type: array example: - id: null name: 'nihil quidem' abbreviation: CE - id: null name: 'totam id' abbreviation: QC items: type: object properties: id: type: string example: null nullable: true name: type: string example: 'nihil quidem' abbreviation: type: string example: CE 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: 30 to: type: integer example: 2 total: type: integer example: 2 tags: - Locations requestBody: required: false content: application/json: schema: type: object properties: sort_by: type: string description: '' example: quibusdam nullable: true sort_desc: type: boolean description: '' example: false nullable: true page: type: integer description: 'O campo value deve ser pelo menos 1.' example: 73 nullable: true per_page: type: integer description: 'O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.' example: 13 nullable: true '/api/locations/states/{state}/cities': get: summary: 'List cities by state' operationId: listCitiesByState description: 'List all cities for a given state' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: null name: Feeneyview - id: null name: Parkerport properties: data: type: array example: - id: null name: Feeneyview - id: null name: Parkerport items: type: object properties: id: type: string example: null nullable: true name: type: string example: Feeneyview tags: - Locations parameters: - in: path name: state description: 'State UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 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: quod required: false schema: type: string description: '' example: quod - in: query name: document description: '' example: molestiae required: false schema: type: string description: '' example: molestiae - 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: 778b5591-cfca-3118-b9d9-f3fda995436c receipt_number: REC-1156 receiver_type: employee receiver: id: null name: 'Justyn Paucek' document: 430.308.268-49 payment: amount: 1481.5 amount_in_words: 'Valor por extenso de teste' method: pix description: 'In mollitia laboriosam consequatur consequatur.' issuer: name: 'Schowalter PLC' document: 03.364.526/3371-69 issue: date: '2026-06-01' city: 'Port Tinachester' state: SP created_by: id: a215e546-0453-4751-939f-05ee0842fd77 name: 'Kailey Greenfelder DVM' created_at: null updated_at: null - id: 8dd3afae-c898-3688-b460-936eb6387f29 receipt_number: REC-7348 receiver_type: employee receiver: id: null name: 'Zackery Weber' document: 732.211.592-23 payment: amount: 4433.1 amount_in_words: 'Valor por extenso de teste' method: cash description: 'Aut consectetur et provident.' issuer: name: 'Heathcote, Mayer and Sawayn' document: 86.878.704/6381-93 issue: date: '2026-06-14' city: Lazaroshire state: GO created_by: id: a215e546-0f21-4e38-ad6e-6eeaa5ad2037 name: 'Anastacio Willms' 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: 778b5591-cfca-3118-b9d9-f3fda995436c receipt_number: REC-1156 receiver_type: employee receiver: id: null name: 'Justyn Paucek' document: 430.308.268-49 payment: amount: 1481.5 amount_in_words: 'Valor por extenso de teste' method: pix description: 'In mollitia laboriosam consequatur consequatur.' issuer: name: 'Schowalter PLC' document: 03.364.526/3371-69 issue: date: '2026-06-01' city: 'Port Tinachester' state: SP created_by: id: a215e546-0453-4751-939f-05ee0842fd77 name: 'Kailey Greenfelder DVM' created_at: null updated_at: null - id: 8dd3afae-c898-3688-b460-936eb6387f29 receipt_number: REC-7348 receiver_type: employee receiver: id: null name: 'Zackery Weber' document: 732.211.592-23 payment: amount: 4433.1 amount_in_words: 'Valor por extenso de teste' method: cash description: 'Aut consectetur et provident.' issuer: name: 'Heathcote, Mayer and Sawayn' document: 86.878.704/6381-93 issue: date: '2026-06-14' city: Lazaroshire state: GO created_by: id: a215e546-0f21-4e38-ad6e-6eeaa5ad2037 name: 'Anastacio Willms' created_at: null updated_at: null items: type: object properties: id: type: string example: 778b5591-cfca-3118-b9d9-f3fda995436c receipt_number: type: string example: REC-1156 receiver_type: type: string example: employee receiver: type: object properties: id: type: string example: null nullable: true name: type: string example: 'Justyn Paucek' document: type: string example: 430.308.268-49 payment: type: object properties: amount: type: number example: 1481.5 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: pix description: type: string example: 'In mollitia laboriosam consequatur consequatur.' issuer: type: object properties: name: type: string example: 'Schowalter PLC' document: type: string example: 03.364.526/3371-69 issue: type: object properties: date: type: string example: '2026-06-01' city: type: string example: 'Port Tinachester' state: type: string example: SP created_by: type: object properties: id: type: string example: a215e546-0453-4751-939f-05ee0842fd77 name: type: string example: 'Kailey Greenfelder DVM' 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: 2eb7b046-ac54-4320-b190-079d260f71d5 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: 09078179-cc30-3b27-9290-7c3058234bbf 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: ddf80cfe-94a3-3671-96d9-fa72b69adbf6 nullable: true required: - receiver_type - amount - payment_method - description - issuer_name - issuer_document - issue_date - city - state /api/payment-receipts/cash-flow-config: get: summary: 'Show receipt cash flow config' operationId: showReceiptCashFlowConfig description: 'Lista cada forma de pagamento e se ela gera lancamento automatico no fluxo de caixa' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Payment Receipts' put: summary: 'Update receipt cash flow config' operationId: updateReceiptCashFlowConfig description: 'Define, por forma de pagamento, se o recibo gera lancamento automatico no fluxo de caixa' parameters: [] responses: { } tags: - 'Payment Receipts' requestBody: required: true content: application/json: schema: type: object properties: methods: type: array description: 'O campo value deve ter pelo menos 1 itens.' example: - [] items: type: object properties: method: type: string description: '' example: cash enum: - pix - bank_transfer - cash - check eligible: type: boolean description: '' example: true required: - method - eligible required: - methods '/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: 0f7042e5-3cf0-37d4-bf80-fc2c61df9212 receipt_number: REC-4615 receiver_type: custom receiver: id: null name: 'Dr. Tiffany Bernhard III' document: 466.282.750-89 payment: amount: 6264.47 amount_in_words: 'Valor por extenso de teste' method: check description: 'Quia nihil iusto eum commodi.' issuer: name: 'Mann LLC' document: 30.595.974/4496-21 issue: date: '2026-06-07' city: Idellaberg state: RJ created_by: id: a215e546-358e-4603-8cb0-7c6abf64c8d3 name: 'Presley Klocko' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 0f7042e5-3cf0-37d4-bf80-fc2c61df9212 receipt_number: type: string example: REC-4615 receiver_type: type: string example: custom receiver: type: object properties: id: type: string example: null nullable: true name: type: string example: 'Dr. Tiffany Bernhard III' document: type: string example: 466.282.750-89 payment: type: object properties: amount: type: number example: 6264.47 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: check description: type: string example: 'Quia nihil iusto eum commodi.' issuer: type: object properties: name: type: string example: 'Mann LLC' document: type: string example: 30.595.974/4496-21 issue: type: object properties: date: type: string example: '2026-06-07' city: type: string example: Idellaberg state: type: string example: RJ created_by: type: object properties: id: type: string example: a215e546-358e-4603-8cb0-7c6abf64c8d3 name: type: string example: 'Presley Klocko' 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: a1e03feb-9365-4040-b669-fe915b824956 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: 131c875d-0454-31a6-9851-c4f22f70c4db 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: 20cd0b19-a268-3237-9068-cacd643b423c 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: 19f9e8dc-fefb-35d4-98a5-0b60589e9c65 receipt_number: REC-1955 receiver_type: custom receiver: id: null name: 'Braxton Hoeger' document: 876.148.615-64 payment: amount: 3574.18 amount_in_words: 'Valor por extenso de teste' method: bank_transfer description: 'Eum exercitationem placeat exercitationem qui et quas.' issuer: name: Runolfsson-Ruecker document: 75.089.833/5608-08 issue: date: '2026-05-24' city: Myriamborough state: SP created_by: id: a215e546-7600-4693-95b2-1a1dba218390 name: 'Hershel Ernser' created_at: null updated_at: null - id: 3976eb5f-0728-3ed9-8a2d-01f13e2ede2a receipt_number: REC-3775 receiver_type: custom receiver: id: null name: 'Dr. Dock Beer' document: 879.114.413-69 payment: amount: 7987.06 amount_in_words: 'Valor por extenso de teste' method: cash description: 'Enim rerum temporibus repellendus explicabo nihil aliquid.' issuer: name: Nikolaus-Schumm document: 28.115.156/7239-57 issue: date: '2026-06-13' city: 'North Lysannetown' state: GO created_by: id: a215e546-7bca-45f5-b94b-605baa578103 name: 'Ms. Vada Herzog' 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: 19f9e8dc-fefb-35d4-98a5-0b60589e9c65 receipt_number: REC-1955 receiver_type: custom receiver: id: null name: 'Braxton Hoeger' document: 876.148.615-64 payment: amount: 3574.18 amount_in_words: 'Valor por extenso de teste' method: bank_transfer description: 'Eum exercitationem placeat exercitationem qui et quas.' issuer: name: Runolfsson-Ruecker document: 75.089.833/5608-08 issue: date: '2026-05-24' city: Myriamborough state: SP created_by: id: a215e546-7600-4693-95b2-1a1dba218390 name: 'Hershel Ernser' created_at: null updated_at: null - id: 3976eb5f-0728-3ed9-8a2d-01f13e2ede2a receipt_number: REC-3775 receiver_type: custom receiver: id: null name: 'Dr. Dock Beer' document: 879.114.413-69 payment: amount: 7987.06 amount_in_words: 'Valor por extenso de teste' method: cash description: 'Enim rerum temporibus repellendus explicabo nihil aliquid.' issuer: name: Nikolaus-Schumm document: 28.115.156/7239-57 issue: date: '2026-06-13' city: 'North Lysannetown' state: GO created_by: id: a215e546-7bca-45f5-b94b-605baa578103 name: 'Ms. Vada Herzog' created_at: null updated_at: null items: type: object properties: id: type: string example: 19f9e8dc-fefb-35d4-98a5-0b60589e9c65 receipt_number: type: string example: REC-1955 receiver_type: type: string example: custom receiver: type: object properties: id: type: string example: null nullable: true name: type: string example: 'Braxton Hoeger' document: type: string example: 876.148.615-64 payment: type: object properties: amount: type: number example: 3574.18 amount_in_words: type: string example: 'Valor por extenso de teste' method: type: string example: bank_transfer description: type: string example: 'Eum exercitationem placeat exercitationem qui et quas.' issuer: type: object properties: name: type: string example: Runolfsson-Ruecker document: type: string example: 75.089.833/5608-08 issue: type: object properties: date: type: string example: '2026-05-24' city: type: string example: Myriamborough state: type: string example: SP created_by: type: object properties: id: type: string example: a215e546-7600-4693-95b2-1a1dba218390 name: type: string example: 'Hershel Ernser' 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: 9 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: 0d6d1d01-ba17-3ffc-99fb-e35045806490 name: alias-ut-suscipit display_name: 'animi sed praesentium' created_at: null updated_at: null - id: 8a66b3cc-eb48-38b8-bb5c-68a8a6ecde6c name: voluptatibus-repellat-harum display_name: 'aut similique optio' 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: 0d6d1d01-ba17-3ffc-99fb-e35045806490 name: alias-ut-suscipit display_name: 'animi sed praesentium' created_at: null updated_at: null - id: 8a66b3cc-eb48-38b8-bb5c-68a8a6ecde6c name: voluptatibus-repellat-harum display_name: 'aut similique optio' created_at: null updated_at: null items: type: object properties: id: type: string example: 0d6d1d01-ba17-3ffc-99fb-e35045806490 name: type: string example: alias-ut-suscipit display_name: type: string example: 'animi sed praesentium' 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: 0b61a178-54ff-3a44-8efe-7209be42e778 name: omnis-sequi display_name: 'quisquam ea magnam' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 0b61a178-54ff-3a44-8efe-7209be42e778 name: type: string example: omnis-sequi display_name: type: string example: 'quisquam ea magnam' 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: 320c1d12-73b3-3b8a-9aad-3d8d9f6e59e9 name: 'Sr. Lucio Batista Lutero' created_at: null updated_at: null - id: 3462d027-4563-308f-9bc1-230804fa921e name: 'Camilo Rocha Vasques Filho' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 320c1d12-73b3-3b8a-9aad-3d8d9f6e59e9 name: 'Sr. Lucio Batista Lutero' created_at: null updated_at: null - id: 3462d027-4563-308f-9bc1-230804fa921e name: 'Camilo Rocha Vasques Filho' created_at: null updated_at: null items: type: object properties: id: type: string example: 320c1d12-73b3-3b8a-9aad-3d8d9f6e59e9 name: type: string example: 'Sr. Lucio Batista Lutero' 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: f38c8216-af05-37d3-97d8-1be13d66b6e1 name: 'Joaquin Pacheco Jr.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: f38c8216-af05-37d3-97d8-1be13d66b6e1 name: type: string example: 'Joaquin Pacheco Jr.' 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: dolorem 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: 44e8872a-0a96-3114-ae85-d36d61a8deb9 name: 'Adriel Abreu Neto' created_at: null updated_at: null - id: 462049f1-c48e-30af-96f3-b7508283396a name: 'Lara Mayara Guerra' 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: 44e8872a-0a96-3114-ae85-d36d61a8deb9 name: 'Adriel Abreu Neto' created_at: null updated_at: null - id: 462049f1-c48e-30af-96f3-b7508283396a name: 'Lara Mayara Guerra' created_at: null updated_at: null items: type: object properties: id: type: string example: 44e8872a-0a96-3114-ae85-d36d61a8deb9 name: type: string example: 'Adriel Abreu Neto' 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: 682a2061-2e3c-3c4e-8b05-af9fa6dcfff0 name: 'Srta. Luiza Garcia Mendonça Filho' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 682a2061-2e3c-3c4e-8b05-af9fa6dcfff0 name: type: string example: 'Srta. Luiza Garcia Mendonça Filho' 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: quis 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: f521e070-c6ac-37bf-8b70-bf570c9d173a name: 'Perferendis occaecati sit.' description: 'Occaecati ut aut eum et a et id. Accusantium odio quae doloremque quisquam voluptas quas quod. Ut eos aut omnis molestiae maxime ut qui porro.' work: id: a215e547-9403-4cbf-b443-d1355f2af760 name: 'Dr. Gean Jorge das Neves' user: id: a215e547-a097-4f44-b4c4-e3466daea06d name: 'Gideon Wisozk' created_at: null updated_at: null - id: 94aed025-24b6-38b9-a479-e03641808bf5 name: 'Voluptatem ut ducimus.' description: null work: id: a215e547-ac24-42db-a5a7-07b25e3b0844 name: 'Dr. Wellington Adriano Maia' user: id: a215e547-b2b6-4316-9cc2-8f51a998626f name: 'Maurine Runolfsson' 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: f521e070-c6ac-37bf-8b70-bf570c9d173a name: 'Perferendis occaecati sit.' description: 'Occaecati ut aut eum et a et id. Accusantium odio quae doloremque quisquam voluptas quas quod. Ut eos aut omnis molestiae maxime ut qui porro.' work: id: a215e547-9403-4cbf-b443-d1355f2af760 name: 'Dr. Gean Jorge das Neves' user: id: a215e547-a097-4f44-b4c4-e3466daea06d name: 'Gideon Wisozk' created_at: null updated_at: null - id: 94aed025-24b6-38b9-a479-e03641808bf5 name: 'Voluptatem ut ducimus.' description: null work: id: a215e547-ac24-42db-a5a7-07b25e3b0844 name: 'Dr. Wellington Adriano Maia' user: id: a215e547-b2b6-4316-9cc2-8f51a998626f name: 'Maurine Runolfsson' created_at: null updated_at: null items: type: object properties: id: type: string example: f521e070-c6ac-37bf-8b70-bf570c9d173a name: type: string example: 'Perferendis occaecati sit.' description: type: string example: 'Occaecati ut aut eum et a et id. Accusantium odio quae doloremque quisquam voluptas quas quod. Ut eos aut omnis molestiae maxime ut qui porro.' work: type: object properties: id: type: string example: a215e547-9403-4cbf-b443-d1355f2af760 name: type: string example: 'Dr. Gean Jorge das Neves' user: type: object properties: id: type: string example: a215e547-a097-4f44-b4c4-e3466daea06d name: type: string example: 'Gideon Wisozk' 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: 968e7865-c302-3a94-abd7-29c11f7aef08 nullable: true user_id: type: string description: 'Usuário. The uuid of an existing record in the users table.' example: 360bc352-3679-30c6-a3cc-c64a78c61c5a nullable: true responsible_id: type: string description: 'Responsável. The uuid of an existing record in the users table.' example: 9e7ec0fe-c0a5-3090-b927-8e9b84f1e566 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: 66ede55b-68f3-3ce2-b9e9-e338d4230f6d 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: 448dc74b-429f-374a-98c9-85169e1d168e 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: b0216801-ac2e-3973-a8f2-5effd7d2ac41 name: 'Accusamus et et quis.' description: 'Et reiciendis quo ipsum sunt facere nobis provident. Deleniti modi quia eum quo sed dolore quia. Temporibus nemo culpa saepe eum dolores. Omnis perferendis sapiente sed eaque.' work: id: a215e547-c4af-47b7-a98d-0814fca3c218 name: 'Erik Dias Urias' user: id: a215e547-c954-4285-b3b3-34288510c13a name: 'Modesta Trantow' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: b0216801-ac2e-3973-a8f2-5effd7d2ac41 name: type: string example: 'Accusamus et et quis.' description: type: string example: 'Et reiciendis quo ipsum sunt facere nobis provident. Deleniti modi quia eum quo sed dolore quia. Temporibus nemo culpa saepe eum dolores. Omnis perferendis sapiente sed eaque.' work: type: object properties: id: type: string example: a215e547-c4af-47b7-a98d-0814fca3c218 name: type: string example: 'Erik Dias Urias' user: type: object properties: id: type: string example: a215e547-c954-4285-b3b3-34288510c13a name: type: string example: 'Modesta Trantow' 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: 13688684-c36a-3e21-a9da-031d0e63b5e0 product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 9f61b1cb-e6d8-3073-ae5d-b8c22ddda1d4 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: iste 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: 8027613e-284f-344d-8484-ea63a275abc6 product: id: a215e547-faf2-4438-9f49-aa77f2267f8b name: 'Sr. Diogo Espinoza Martines' code: PRD-307822 unit: id: a215e547-f52e-4258-aa07-f2585fc718c1 name: 'Dr. Marisa de Souza Lourenço Sobrinho' abbreviation: 'Simon Salgado Rosa' quantity: 585.3173 observation: 'Non molestias vel voluptate qui.' created_at: null updated_at: null - id: 6151593a-b699-3225-9ca8-154f3fe897df product: id: a215e548-216f-47ff-a19a-0c15e6863513 name: 'Srta. Carol Paulina Solano Sobrinho' code: PRD-897386 unit: id: a215e548-1b51-47f2-b212-248482e5882d name: 'Maitê Padilha Garcia Neto' abbreviation: 'Dr. Fernando Gil Cordeiro Sobrinho' quantity: 630.3032 observation: 'Eaque iste rerum eveniet voluptatum.' 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: 8027613e-284f-344d-8484-ea63a275abc6 product: id: a215e547-faf2-4438-9f49-aa77f2267f8b name: 'Sr. Diogo Espinoza Martines' code: PRD-307822 unit: id: a215e547-f52e-4258-aa07-f2585fc718c1 name: 'Dr. Marisa de Souza Lourenço Sobrinho' abbreviation: 'Simon Salgado Rosa' quantity: 585.3173 observation: 'Non molestias vel voluptate qui.' created_at: null updated_at: null - id: 6151593a-b699-3225-9ca8-154f3fe897df product: id: a215e548-216f-47ff-a19a-0c15e6863513 name: 'Srta. Carol Paulina Solano Sobrinho' code: PRD-897386 unit: id: a215e548-1b51-47f2-b212-248482e5882d name: 'Maitê Padilha Garcia Neto' abbreviation: 'Dr. Fernando Gil Cordeiro Sobrinho' quantity: 630.3032 observation: 'Eaque iste rerum eveniet voluptatum.' created_at: null updated_at: null items: type: object properties: id: type: string example: 8027613e-284f-344d-8484-ea63a275abc6 product: type: object properties: id: type: string example: a215e547-faf2-4438-9f49-aa77f2267f8b name: type: string example: 'Sr. Diogo Espinoza Martines' code: type: string example: PRD-307822 unit: type: object properties: id: type: string example: a215e547-f52e-4258-aa07-f2585fc718c1 name: type: string example: 'Dr. Marisa de Souza Lourenço Sobrinho' abbreviation: type: string example: 'Simon Salgado Rosa' quantity: type: number example: 585.3173 observation: type: string example: 'Non molestias vel voluptate qui.' 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: 3a0e90f3-4c7f-3f03-9c00-7bfb72cd2b96 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: - 1e62964a-fcd7-3ec0-8f37-26f32c6593be items: type: string required: - items parameters: - in: path name: productQuantityList description: 'Product Quantity List UUID' example: in required: true schema: type: string '/api/product-quantity-lists/items/{id}': put: summary: 'Update item' operationId: updateItem description: 'Update a product item in the list' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: object properties: data: type: string example: object tags: - 'Product Quantity Lists' requestBody: required: false content: application/json: schema: type: object properties: quantity: type: number description: 'Quantidade. O campo value deve ser pelo menos 0.0001.' example: 1.0 observation: type: string description: Observação. example: 'Example Observation' nullable: true parameters: - in: path name: id description: 'The ID of the item.' example: et required: true schema: type: string - in: path name: item description: 'Product Quantity List Item UUID' example: qui 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: 1c7e090e-892e-3c59-a938-f35e58a10d6c product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: bb5f67df-30d4-3093-aac0-631e893d6853 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: aliquid 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: 614aff45-52b0-3d9f-9e10-e7dbc33a971c 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: 401a2ff1-0f50-3e46-9221-66a2bd106bf4 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: bc4de31d-fcc0-366c-bf78-05cb790eb73c 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: rerum 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: 83e608c5-5cc2-3807-bb2d-046dc567b3c6 quantity: 80.4271 fulfilled_at: '2026-06-06T04:51:46.000000Z' created_at: null - id: e9e49f87-17b3-3768-9651-5e4d17cc28af quantity: 29.4291 fulfilled_at: '2026-05-24T05:33:48.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: 83e608c5-5cc2-3807-bb2d-046dc567b3c6 quantity: 80.4271 fulfilled_at: '2026-06-06T04:51:46.000000Z' created_at: null - id: e9e49f87-17b3-3768-9651-5e4d17cc28af quantity: 29.4291 fulfilled_at: '2026-05-24T05:33:48.000000Z' created_at: null items: type: object properties: id: type: string example: 83e608c5-5cc2-3807-bb2d-046dc567b3c6 quantity: type: number example: 80.4271 fulfilled_at: type: string example: '2026-06-06T04:51:46.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: non 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: 4bf20e55-fc5b-3a89-b019-885e0f30169d product: id: a215e54d-9f75-419b-92c3-bf6aa835eaa8 name: 'Richard Ferreira' code: PRD-761329 unit: id: a215e54d-9b85-4c0e-946b-a2c103c7a89c name: 'Sr. Ícaro Alonso Batista Neto' abbreviation: 'Elias Rivera Jr.' quantity: 175.6329 quantity_fulfilled: 0 quantity_pending: 175.6329 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 4bf20e55-fc5b-3a89-b019-885e0f30169d product: type: object properties: id: type: string example: a215e54d-9f75-419b-92c3-bf6aa835eaa8 name: type: string example: 'Richard Ferreira' code: type: string example: PRD-761329 unit: type: object properties: id: type: string example: a215e54d-9b85-4c0e-946b-a2c103c7a89c name: type: string example: 'Sr. Ícaro Alonso Batista Neto' abbreviation: type: string example: 'Elias Rivera Jr.' quantity: type: number example: 175.6329 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 175.6329 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' 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: 063a75a9-665f-36b3-95e9-5b5b2c87ba1e nullable: true parameters: - in: path name: id description: 'The ID of the item.' example: aut required: true schema: type: string - in: path name: item description: 'Product Request Item UUID' example: esse 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: c60ad9c3-d6e0-36ce-8d9b-f983ebc7a434 product: id: a215e54d-d60b-498b-945f-291e1dde63fa name: 'Srta. Ornela Ferreira Lourenço' code: PRD-590904 unit: id: a215e54d-d302-49cf-bb71-5f7db3539d5a name: 'Sr. Maurício Rezende Jr.' abbreviation: 'Ronaldo Marin Ortiz' quantity: 293.3871 quantity_fulfilled: 0 quantity_pending: 293.3871 is_fulfilled: false is_partially_fulfilled: false observation: 'Nostrum consectetur vel ad illum recusandae asperiores quibusdam.' created_at: null updated_at: null - id: e8baa106-9cb4-33a2-b4d4-ca4b71a43c73 product: id: a215e54e-0f40-4f5d-aaad-6b798accba33 name: 'Laura Rico Neto' code: PRD-278585 unit: id: a215e54e-0c2e-4cec-bc5e-78726053b163 name: 'Srta. Luiza Jaqueline Marinho Filho' abbreviation: 'Wilson Sergio Dominato' quantity: 636.3912 quantity_fulfilled: 0 quantity_pending: 636.3912 is_fulfilled: false is_partially_fulfilled: false observation: 'Rerum deleniti sunt aliquam similique earum quibusdam rerum.' created_at: null updated_at: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: c60ad9c3-d6e0-36ce-8d9b-f983ebc7a434 product: id: a215e54d-d60b-498b-945f-291e1dde63fa name: 'Srta. Ornela Ferreira Lourenço' code: PRD-590904 unit: id: a215e54d-d302-49cf-bb71-5f7db3539d5a name: 'Sr. Maurício Rezende Jr.' abbreviation: 'Ronaldo Marin Ortiz' quantity: 293.3871 quantity_fulfilled: 0 quantity_pending: 293.3871 is_fulfilled: false is_partially_fulfilled: false observation: 'Nostrum consectetur vel ad illum recusandae asperiores quibusdam.' created_at: null updated_at: null - id: e8baa106-9cb4-33a2-b4d4-ca4b71a43c73 product: id: a215e54e-0f40-4f5d-aaad-6b798accba33 name: 'Laura Rico Neto' code: PRD-278585 unit: id: a215e54e-0c2e-4cec-bc5e-78726053b163 name: 'Srta. Luiza Jaqueline Marinho Filho' abbreviation: 'Wilson Sergio Dominato' quantity: 636.3912 quantity_fulfilled: 0 quantity_pending: 636.3912 is_fulfilled: false is_partially_fulfilled: false observation: 'Rerum deleniti sunt aliquam similique earum quibusdam rerum.' created_at: null updated_at: null items: type: object properties: id: type: string example: c60ad9c3-d6e0-36ce-8d9b-f983ebc7a434 product: type: object properties: id: type: string example: a215e54d-d60b-498b-945f-291e1dde63fa name: type: string example: 'Srta. Ornela Ferreira Lourenço' code: type: string example: PRD-590904 unit: type: object properties: id: type: string example: a215e54d-d302-49cf-bb71-5f7db3539d5a name: type: string example: 'Sr. Maurício Rezende Jr.' abbreviation: type: string example: 'Ronaldo Marin Ortiz' quantity: type: number example: 293.3871 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 293.3871 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: 'Nostrum consectetur vel ad illum recusandae asperiores quibusdam.' 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: quia 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: cab16c40-6495-3bf4-aa5e-428f42efd625 product: id: a215e54e-4223-42cf-86f4-3701eb7239a4 name: 'Louise Ferreira Jr.' code: PRD-519763 unit: id: a215e54e-3f81-4263-ab45-6c690081b3cb name: 'Dr. Fabiano Leal Estrada Neto' abbreviation: 'Dr. Wagner Ortega Filho' quantity: 942.8721 quantity_fulfilled: 0 quantity_pending: 942.8721 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: f3becb74-944c-3c80-b0f9-fd8a88abcb43 product: id: a215e54e-70fc-4dac-8951-29a0d615e599 name: 'Dr. Dener Natan de Freitas Sobrinho' code: PRD-261673 unit: id: a215e54e-6ccc-4968-9056-1ccb93fb4c3c name: 'Srta. Raquel Luna Faria Neto' abbreviation: 'Leandro Guilherme Leon Sobrinho' quantity: 804.1848 quantity_fulfilled: 0 quantity_pending: 804.1848 is_fulfilled: false is_partially_fulfilled: false observation: 'Sequi voluptas rem non nemo sed veniam sunt.' created_at: null updated_at: null properties: data: type: array example: - id: cab16c40-6495-3bf4-aa5e-428f42efd625 product: id: a215e54e-4223-42cf-86f4-3701eb7239a4 name: 'Louise Ferreira Jr.' code: PRD-519763 unit: id: a215e54e-3f81-4263-ab45-6c690081b3cb name: 'Dr. Fabiano Leal Estrada Neto' abbreviation: 'Dr. Wagner Ortega Filho' quantity: 942.8721 quantity_fulfilled: 0 quantity_pending: 942.8721 is_fulfilled: false is_partially_fulfilled: false observation: null created_at: null updated_at: null - id: f3becb74-944c-3c80-b0f9-fd8a88abcb43 product: id: a215e54e-70fc-4dac-8951-29a0d615e599 name: 'Dr. Dener Natan de Freitas Sobrinho' code: PRD-261673 unit: id: a215e54e-6ccc-4968-9056-1ccb93fb4c3c name: 'Srta. Raquel Luna Faria Neto' abbreviation: 'Leandro Guilherme Leon Sobrinho' quantity: 804.1848 quantity_fulfilled: 0 quantity_pending: 804.1848 is_fulfilled: false is_partially_fulfilled: false observation: 'Sequi voluptas rem non nemo sed veniam sunt.' created_at: null updated_at: null items: type: object properties: id: type: string example: cab16c40-6495-3bf4-aa5e-428f42efd625 product: type: object properties: id: type: string example: a215e54e-4223-42cf-86f4-3701eb7239a4 name: type: string example: 'Louise Ferreira Jr.' code: type: string example: PRD-519763 unit: type: object properties: id: type: string example: a215e54e-3f81-4263-ab45-6c690081b3cb name: type: string example: 'Dr. Fabiano Leal Estrada Neto' abbreviation: type: string example: 'Dr. Wagner Ortega Filho' quantity: type: number example: 942.8721 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 942.8721 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: facere 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: 23fdcb5f-509f-3d9f-a150-0adf446b6294 code: null name: 'Omnis dicta sit.' description: 'Voluptatem et recusandae et eaque. Rerum non voluptate autem voluptatem dolor dicta.' work: id: a215e549-dc12-4eee-9d8e-4fb05fe2086f name: 'Dr. Marta Tamoio Neto' user: id: a215e549-e474-4575-93ee-11a989f87e5d name: 'Kristin Daniel' status: id: a215e549-e967-418a-9ee6-6f61cfd78ce9 slug: null name: null description: 'Joaquin Campos Soto' abbreviation: adipisci color: '#275cbd' text_color: '#1f002f' priority: high priority_label: Alta needed_at: '2026-06-22' approved_at: null rejection_reason: null created_at: null updated_at: null - id: f958a20c-892b-338f-9902-51db0b5be1eb code: null name: 'Dolorem voluptas qui debitis.' description: null work: id: a215e549-f241-4eb9-924a-4f71cf5f9e85 name: 'Dr. Hortência Bonilha Rios Jr.' user: id: a215e549-f816-4191-809c-7a33c5536b13 name: 'Candace Leannon' status: id: a215e549-fb09-4970-8798-83591d74e975 slug: null name: null description: 'Dr. Antonella Noemi Leon Jr.' abbreviation: rerum color: '#9171d5' text_color: '#6aa57b' priority: medium priority_label: Média needed_at: '2026-06-28' 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: 23fdcb5f-509f-3d9f-a150-0adf446b6294 code: null name: 'Omnis dicta sit.' description: 'Voluptatem et recusandae et eaque. Rerum non voluptate autem voluptatem dolor dicta.' work: id: a215e549-dc12-4eee-9d8e-4fb05fe2086f name: 'Dr. Marta Tamoio Neto' user: id: a215e549-e474-4575-93ee-11a989f87e5d name: 'Kristin Daniel' status: id: a215e549-e967-418a-9ee6-6f61cfd78ce9 slug: null name: null description: 'Joaquin Campos Soto' abbreviation: adipisci color: '#275cbd' text_color: '#1f002f' priority: high priority_label: Alta needed_at: '2026-06-22' approved_at: null rejection_reason: null created_at: null updated_at: null - id: f958a20c-892b-338f-9902-51db0b5be1eb code: null name: 'Dolorem voluptas qui debitis.' description: null work: id: a215e549-f241-4eb9-924a-4f71cf5f9e85 name: 'Dr. Hortência Bonilha Rios Jr.' user: id: a215e549-f816-4191-809c-7a33c5536b13 name: 'Candace Leannon' status: id: a215e549-fb09-4970-8798-83591d74e975 slug: null name: null description: 'Dr. Antonella Noemi Leon Jr.' abbreviation: rerum color: '#9171d5' text_color: '#6aa57b' priority: medium priority_label: Média needed_at: '2026-06-28' approved_at: null rejection_reason: null created_at: null updated_at: null items: type: object properties: id: type: string example: 23fdcb5f-509f-3d9f-a150-0adf446b6294 code: type: string example: null nullable: true name: type: string example: 'Omnis dicta sit.' description: type: string example: 'Voluptatem et recusandae et eaque. Rerum non voluptate autem voluptatem dolor dicta.' work: type: object properties: id: type: string example: a215e549-dc12-4eee-9d8e-4fb05fe2086f name: type: string example: 'Dr. Marta Tamoio Neto' user: type: object properties: id: type: string example: a215e549-e474-4575-93ee-11a989f87e5d name: type: string example: 'Kristin Daniel' status: type: object properties: id: type: string example: a215e549-e967-418a-9ee6-6f61cfd78ce9 slug: type: string example: null nullable: true name: type: string example: null nullable: true description: type: string example: 'Joaquin Campos Soto' abbreviation: type: string example: adipisci color: type: string example: '#275cbd' text_color: type: string example: '#1f002f' priority: type: string example: high priority_label: type: string example: Alta needed_at: type: string example: '2026-06-22' 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: 66353ded-3af7-3e79-be59-e315f3dfc522 nullable: true work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: 9686769a-0929-3478-89e5-111fc629d4e8 nullable: true user_id: type: string description: 'Usuário. The uuid of an existing record in the users table.' example: f534df33-9f28-3a27-8caa-1ffc886beac7 nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: 7fbe0112-a49f-392c-ac37-c10e3bffae35 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: 4190633a-dc27-3ecc-94bf-2aa551538d5a 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: 2fc14170-87b3-35ba-92f8-c249aa2bd70a work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: 67766c86-4019-3e99-a1bb-a814316e93f1 nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: cdd083a3-0b57-3fdc-a9ad-1b0d607e91c3 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: 9cd91d47-9f35-3b8d-b62b-1bd8bd05efad 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: 918ae9bf-2587-3531-820a-0c93cca45919 code: null name: 'Id sint labore.' description: null work: id: a215e54a-0cf6-4c6d-a086-db25b3f7517d name: 'Sra. Emilly Flores Sobrinho' user: id: a215e54a-1177-4e98-bb1b-77d4ebaa5ba1 name: 'Cara Dickens' status: id: a215e54a-1678-4d61-9023-e20a4db2c607 slug: null name: null description: 'Sr. William Ramos Fontes Filho' abbreviation: rerum color: '#91694b' text_color: '#fa4942' priority: low priority_label: Baixa needed_at: '2026-07-15' approved_at: null rejection_reason: null created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 918ae9bf-2587-3531-820a-0c93cca45919 code: type: string example: null nullable: true name: type: string example: 'Id sint labore.' description: type: string example: null nullable: true work: type: object properties: id: type: string example: a215e54a-0cf6-4c6d-a086-db25b3f7517d name: type: string example: 'Sra. Emilly Flores Sobrinho' user: type: object properties: id: type: string example: a215e54a-1177-4e98-bb1b-77d4ebaa5ba1 name: type: string example: 'Cara Dickens' status: type: object properties: id: type: string example: a215e54a-1678-4d61-9023-e20a4db2c607 slug: type: string example: null nullable: true name: type: string example: null nullable: true description: type: string example: 'Sr. William Ramos Fontes Filho' abbreviation: type: string example: rerum color: type: string example: '#91694b' text_color: type: string example: '#fa4942' priority: type: string example: low priority_label: type: string example: Baixa needed_at: type: string example: '2026-07-15' 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: 1087f17d-9ea7-3098-9841-82b6984fad03 work_location_id: type: string description: 'Local da obra. The uuid of an existing record in the work_locations table.' example: e0735dcc-84b9-337b-b673-29cd5c780a50 nullable: true status_id: type: string description: 'Status. The uuid of an existing record in the statuses table.' example: 20975846-02bb-306f-a357-955818f45716 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: f5fb8531-bdde-3fcf-a930-d82aef4e3ce0 product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: e3bddaf6-a6c0-341f-94e5-04a8131141a9 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: qui 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: 7953c20a-fdd8-396c-af81-195e5ad6fe3d product: id: a215e54a-4e43-428e-b5dc-65c6203ca423 name: 'Dr. Edilson Brito Jr.' code: PRD-456526 unit: id: a215e54a-4cec-49ab-b39b-ed33fb59c224 name: 'Miguel Ferraz Quintana' abbreviation: 'Simone Esther Corona Neto' quantity: 686.4892 quantity_fulfilled: 0 quantity_pending: 686.4892 is_fulfilled: false is_partially_fulfilled: false observation: 'Ut ab sit ullam sequi.' created_at: null updated_at: null - id: ffc1cb17-161e-38b7-b9e7-9419ccf63c1d product: id: a215e54a-7e7c-4561-b413-159f8f780707 name: 'Dr. Bruno Maldonado Jr.' code: PRD-861418 unit: id: a215e54a-797e-410c-b6d0-a7f69d781c0c name: 'Jean Rodrigues' abbreviation: 'Sra. Tábata Ramos Sobrinho' quantity: 322.4176 quantity_fulfilled: 0 quantity_pending: 322.4176 is_fulfilled: false is_partially_fulfilled: false observation: 'Sunt quaerat qui ipsam numquam.' 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: 7953c20a-fdd8-396c-af81-195e5ad6fe3d product: id: a215e54a-4e43-428e-b5dc-65c6203ca423 name: 'Dr. Edilson Brito Jr.' code: PRD-456526 unit: id: a215e54a-4cec-49ab-b39b-ed33fb59c224 name: 'Miguel Ferraz Quintana' abbreviation: 'Simone Esther Corona Neto' quantity: 686.4892 quantity_fulfilled: 0 quantity_pending: 686.4892 is_fulfilled: false is_partially_fulfilled: false observation: 'Ut ab sit ullam sequi.' created_at: null updated_at: null - id: ffc1cb17-161e-38b7-b9e7-9419ccf63c1d product: id: a215e54a-7e7c-4561-b413-159f8f780707 name: 'Dr. Bruno Maldonado Jr.' code: PRD-861418 unit: id: a215e54a-797e-410c-b6d0-a7f69d781c0c name: 'Jean Rodrigues' abbreviation: 'Sra. Tábata Ramos Sobrinho' quantity: 322.4176 quantity_fulfilled: 0 quantity_pending: 322.4176 is_fulfilled: false is_partially_fulfilled: false observation: 'Sunt quaerat qui ipsam numquam.' created_at: null updated_at: null items: type: object properties: id: type: string example: 7953c20a-fdd8-396c-af81-195e5ad6fe3d product: type: object properties: id: type: string example: a215e54a-4e43-428e-b5dc-65c6203ca423 name: type: string example: 'Dr. Edilson Brito Jr.' code: type: string example: PRD-456526 unit: type: object properties: id: type: string example: a215e54a-4cec-49ab-b39b-ed33fb59c224 name: type: string example: 'Miguel Ferraz Quintana' abbreviation: type: string example: 'Simone Esther Corona Neto' quantity: type: number example: 686.4892 quantity_fulfilled: type: integer example: 0 quantity_pending: type: number example: 686.4892 is_fulfilled: type: boolean example: false is_partially_fulfilled: type: boolean example: false observation: type: string example: 'Ut ab sit ullam sequi.' 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: 10ae57b8-569d-3b65-9146-41f80c1e0d5b 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: - 60f60e8f-3cf6-3fb3-9d99-06d488c1abfb items: type: string required: - items parameters: - in: path name: productRequest description: 'Product Request UUID' example: totam 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: occaecati 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: qui 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: c345c7ae-0a96-3e57-973a-b37a5e71c9b4 product_id: type: string description: 'Produto. The uuid of an existing record in the products table.' example: 34595e9b-aaba-3428-b3f9-b7538773bea1 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: laborum 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 - in: query name: code description: 'Filter by product code.' example: PROD-00003 required: false schema: type: string description: 'Filter by product code.' example: PROD-00003 nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: c7ad983d-5341-391f-b759-2e602a8a047c name: 'Alana Madeira Balestero' code: PRD-403733 stock: 416636 product_family: id: a215e546-b524-4590-8c5c-41d97348345c name: 'Joaquim Martines Rosa' product_brand: id: a215e546-ba42-405c-b824-56928ed7d15a name: 'Bianca Zambrano Sobrinho' unit: id: a215e546-beb8-450a-915c-f0a9fd4f6b73 name: 'Evandro Ramires Jr.' abbreviation: 'Sra. Elisa Melina Pontes' image: id: null url: null description: 'Ipsum aliquam vitae voluptatem impedit quo.' created_at: null updated_at: null - id: 47526c06-e40a-35be-b13a-019bf0c861e8 name: 'Joyce Sônia Leon' code: PRD-115445 stock: 46289949 product_family: id: a215e546-c7a4-4206-a04c-4fb9d7db5a56 name: 'Cristian Ferraz Ferreira Jr.' product_brand: id: a215e546-ca38-4a71-9207-3060ff01896f name: 'Dr. Cezar Santana Sobrinho' unit: id: a215e546-ce43-4f1c-991d-4049d7eb7f63 name: 'Benício Gael Assunção Neto' abbreviation: 'Guilherme Padrão Neto' image: id: null url: null description: 'Totam consequuntur ut accusantium occaecati.' 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: c7ad983d-5341-391f-b759-2e602a8a047c name: 'Alana Madeira Balestero' code: PRD-403733 stock: 416636 product_family: id: a215e546-b524-4590-8c5c-41d97348345c name: 'Joaquim Martines Rosa' product_brand: id: a215e546-ba42-405c-b824-56928ed7d15a name: 'Bianca Zambrano Sobrinho' unit: id: a215e546-beb8-450a-915c-f0a9fd4f6b73 name: 'Evandro Ramires Jr.' abbreviation: 'Sra. Elisa Melina Pontes' image: id: null url: null description: 'Ipsum aliquam vitae voluptatem impedit quo.' created_at: null updated_at: null - id: 47526c06-e40a-35be-b13a-019bf0c861e8 name: 'Joyce Sônia Leon' code: PRD-115445 stock: 46289949 product_family: id: a215e546-c7a4-4206-a04c-4fb9d7db5a56 name: 'Cristian Ferraz Ferreira Jr.' product_brand: id: a215e546-ca38-4a71-9207-3060ff01896f name: 'Dr. Cezar Santana Sobrinho' unit: id: a215e546-ce43-4f1c-991d-4049d7eb7f63 name: 'Benício Gael Assunção Neto' abbreviation: 'Guilherme Padrão Neto' image: id: null url: null description: 'Totam consequuntur ut accusantium occaecati.' created_at: null updated_at: null items: type: object properties: id: type: string example: c7ad983d-5341-391f-b759-2e602a8a047c name: type: string example: 'Alana Madeira Balestero' code: type: string example: PRD-403733 stock: type: integer example: 416636 product_family: type: object properties: id: type: string example: a215e546-b524-4590-8c5c-41d97348345c name: type: string example: 'Joaquim Martines Rosa' product_brand: type: object properties: id: type: string example: a215e546-ba42-405c-b824-56928ed7d15a name: type: string example: 'Bianca Zambrano Sobrinho' unit: type: object properties: id: type: string example: a215e546-beb8-450a-915c-f0a9fd4f6b73 name: type: string example: 'Evandro Ramires Jr.' abbreviation: type: string example: 'Sra. Elisa Melina Pontes' image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true description: type: string example: 'Ipsum aliquam vitae voluptatem impedit quo.' 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: 1c5e6b27-e390-3125-8ee8-5adff4cd1e02 product_brand_id: type: string description: 'Marca do Produto. The uuid of an existing record in the product_brands table.' example: 5e85f8d1-899c-34ea-980c-155feb31b8ca unit_id: type: string description: 'Unidade. The uuid of an existing record in the units table.' example: f90f0846-510b-33b4-8183-5188e67288d0 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: fe3b523e-daa3-36ca-a5dc-2a68ba2c2df0 name: 'Sra. Olga Balestero' code: PRD-797616 stock: 40334 product_family: id: a215e546-e116-4892-8dc3-81e18e0a3314 name: 'Martinho Feliciano Neto' product_brand: id: a215e546-e581-44f4-b5d3-f3392e1f2da0 name: 'Suelen Emília Duarte' unit: id: a215e546-ea08-4742-a232-1c197a11fef7 name: 'Luiz de Souza' abbreviation: 'Dr. Manoela Santacruz Neto' image: id: null url: null description: 'Quia suscipit doloremque quo autem molestias.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: fe3b523e-daa3-36ca-a5dc-2a68ba2c2df0 name: type: string example: 'Sra. Olga Balestero' code: type: string example: PRD-797616 stock: type: integer example: 40334 product_family: type: object properties: id: type: string example: a215e546-e116-4892-8dc3-81e18e0a3314 name: type: string example: 'Martinho Feliciano Neto' product_brand: type: object properties: id: type: string example: a215e546-e581-44f4-b5d3-f3392e1f2da0 name: type: string example: 'Suelen Emília Duarte' unit: type: object properties: id: type: string example: a215e546-ea08-4742-a232-1c197a11fef7 name: type: string example: 'Luiz de Souza' abbreviation: type: string example: 'Dr. Manoela Santacruz Neto' image: type: object properties: id: type: string example: null nullable: true url: type: string example: null nullable: true description: type: string example: 'Quia suscipit doloremque quo autem molestias.' 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: 16c44814-d5e5-3330-ac80-b16492f73b14 product_brand_id: type: string description: 'Marca do Produto. The uuid of an existing record in the product_brands table.' example: 1544fca9-8341-381c-9d4a-644b80a837e5 unit_id: type: string description: 'Unidade. The uuid of an existing record in the units table.' example: ce05fc8d-a54b-3040-9c76-38f54ce6d06a 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: vero 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: facere 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: dolorum required: true schema: type: string /api/reports/cash-flow/excel: get: summary: 'Export Cash Flow to Excel' operationId: exportCashFlowToExcel description: 'Dispatches async Excel generation. Frontend receives notification via Pusher when ready.' parameters: - in: query name: q description: '' example: fugiat required: false schema: type: string description: '' example: fugiat nullable: true - in: query name: type description: 'Tipo de lançamento.' example: entrada required: false schema: type: string description: 'Tipo de lançamento.' example: entrada enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste - 'ajuste saída' nullable: true - in: query name: description description: '' example: 'Dolor ipsam voluptatem quia aut impedit.' required: false schema: type: string description: '' example: 'Dolor ipsam voluptatem quia aut impedit.' nullable: true - in: query name: categories description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the transaction_categories table.' example: - 6661a8ee-8090-31a0-bf3e-a3ab20b9635f required: false schema: type: array description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the transaction_categories table.' example: - 6661a8ee-8090-31a0-bf3e-a3ab20b9635f items: type: string - in: query name: exclude_categories description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the transaction_categories table.' example: - 2f4e709d-7c58-3eed-b5df-2ca3b4088400 required: false schema: type: array description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the transaction_categories table.' example: - 2f4e709d-7c58-3eed-b5df-2ca3b4088400 items: type: string - in: query name: date_start description: 'Início do período (data). O campo value deve ser uma data válida.' example: '2026-01-01' required: false schema: type: string description: 'Início do período (data). O campo value deve ser uma data válida.' example: '2026-01-01' nullable: true - in: query name: date_end description: 'Fim do período (data). O campo value deve ser uma data válida.' example: '2026-12-31' required: false schema: type: string description: 'Fim do período (data). O campo value deve ser uma data válida.' example: '2026-12-31' nullable: true - in: query name: bank_accounts description: 'O campo value deve ser um UUID válido.' example: - 52ebf893-487c-353d-a490-6c80233cbd38 required: false schema: type: array description: 'O campo value deve ser um UUID válido.' example: - 52ebf893-487c-353d-a490-6c80233cbd38 items: type: string - in: query name: customers description: 'O campo value deve ser um UUID válido.' example: - 601fb8a9-9347-3167-a915-9b9f88dde6ff required: false schema: type: array description: 'O campo value deve ser um UUID válido.' example: - 601fb8a9-9347-3167-a915-9b9f88dde6ff items: type: string - in: query name: suppliers description: 'O campo value deve ser um UUID válido.' example: - dcb2960e-4a5e-3e9d-b4ed-780977e5ed1f required: false schema: type: array description: 'O campo value deve ser um UUID válido.' example: - dcb2960e-4a5e-3e9d-b4ed-780977e5ed1f items: type: string - in: query name: cash_session description: 'O campo value deve ser um UUID válido.' example: 756fb632-7087-39d7-ae78-b76222b54684 required: false schema: type: string description: 'O campo value deve ser um UUID válido.' example: 756fb632-7087-39d7-ae78-b76222b54684 nullable: true - in: query name: works description: 'O campo value deve ser um UUID válido.' example: - 1d753c31-ee97-3f9d-9c86-369e620568df required: false schema: type: array description: 'O campo value deve ser um UUID válido.' example: - 1d753c31-ee97-3f9d-9c86-369e620568df items: type: string - in: query name: url description: '' example: null required: false schema: type: string description: '' example: null - in: query name: base64 description: '' example: null required: false schema: type: string description: '' example: null - in: query name: aba_unica description: '' example: null required: false schema: type: string description: '' example: null responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Reports /api/reports/cash-flow: get: summary: '' operationId: getApiReportsCashFlow description: '' parameters: - in: query name: q description: '' example: voluptatem required: false schema: type: string description: '' example: voluptatem nullable: true - in: query name: type description: 'Tipo de lançamento.' example: entrada required: false schema: type: string description: 'Tipo de lançamento.' example: entrada enum: - entrada - saída - tarifa - depósito - saque - transferência - pagamento - juros - ajuste - 'ajuste saída' nullable: true - in: query name: description description: '' example: 'Et quam aperiam non necessitatibus iusto.' required: false schema: type: string description: '' example: 'Et quam aperiam non necessitatibus iusto.' nullable: true - in: query name: categories description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the transaction_categories table.' example: - 1cd8d871-26cd-3671-96e0-ce14108d273e required: false schema: type: array description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the transaction_categories table.' example: - 1cd8d871-26cd-3671-96e0-ce14108d273e items: type: string - in: query name: exclude_categories description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the transaction_categories table.' example: - ad8e4b37-0277-374f-a991-fab61946dcba required: false schema: type: array description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the transaction_categories table.' example: - ad8e4b37-0277-374f-a991-fab61946dcba items: type: string - in: query name: date_start description: 'Início do período (data). O campo value deve ser uma data válida.' example: '2026-01-01' required: false schema: type: string description: 'Início do período (data). O campo value deve ser uma data válida.' example: '2026-01-01' nullable: true - in: query name: date_end description: 'Fim do período (data). O campo value deve ser uma data válida.' example: '2026-12-31' required: false schema: type: string description: 'Fim do período (data). O campo value deve ser uma data válida.' example: '2026-12-31' nullable: true - in: query name: bank_accounts description: 'O campo value deve ser um UUID válido.' example: - ec0956db-f67a-32ef-b9c6-8a0e0478c732 required: false schema: type: array description: 'O campo value deve ser um UUID válido.' example: - ec0956db-f67a-32ef-b9c6-8a0e0478c732 items: type: string - in: query name: customers description: 'O campo value deve ser um UUID válido.' example: - 766b1b55-1713-3b20-b44a-d5495e74550f required: false schema: type: array description: 'O campo value deve ser um UUID válido.' example: - 766b1b55-1713-3b20-b44a-d5495e74550f items: type: string - in: query name: suppliers description: 'O campo value deve ser um UUID válido.' example: - 312e68a3-8fe1-3586-adb0-0a8b0a0fb83c required: false schema: type: array description: 'O campo value deve ser um UUID válido.' example: - 312e68a3-8fe1-3586-adb0-0a8b0a0fb83c items: type: string - in: query name: cash_session description: 'O campo value deve ser um UUID válido.' example: 687675a2-3672-31d0-8127-b3119f13c288 required: false schema: type: string description: 'O campo value deve ser um UUID válido.' example: 687675a2-3672-31d0-8127-b3119f13c288 nullable: true - in: query name: works description: 'O campo value deve ser um UUID válido.' example: - a4f08ed8-91a4-3acb-93e0-7e02ad634871 required: false schema: type: array description: 'O campo value deve ser um UUID válido.' example: - a4f08ed8-91a4-3acb-93e0-7e02ad634871 items: type: string - in: query name: url description: '' example: null required: false schema: type: string description: '' example: null - in: query name: base64 description: '' example: null required: false schema: type: string description: '' example: null - in: query name: aba_unica description: '' example: null required: false schema: type: string description: '' example: null responses: 401: description: '' content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - Reports security: [] /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: 2dfc07cf-08e9-3c7a-8f55-f3973371eeae name: 'atque sed' slug: null description: null abbreviation: mnc created_at: null updated_at: null - id: 2af2f87d-b692-3864-8c31-188b6693d484 name: 'maxime aut' slug: null description: 'Sint assumenda maiores sequi nisi cum. Provident aut ea assumenda veniam repudiandae dolore esse. Harum laborum eveniet ut voluptates amet doloremque.' abbreviation: kiz 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: 2dfc07cf-08e9-3c7a-8f55-f3973371eeae name: 'atque sed' slug: null description: null abbreviation: mnc created_at: null updated_at: null - id: 2af2f87d-b692-3864-8c31-188b6693d484 name: 'maxime aut' slug: null description: 'Sint assumenda maiores sequi nisi cum. Provident aut ea assumenda veniam repudiandae dolore esse. Harum laborum eveniet ut voluptates amet doloremque.' abbreviation: kiz created_at: null updated_at: null items: type: object properties: id: type: string example: 2dfc07cf-08e9-3c7a-8f55-f3973371eeae name: type: string example: 'atque sed' slug: type: string example: null nullable: true description: type: string example: null nullable: true abbreviation: type: string example: mnc 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: 98124060-1db2-3735-a17b-52e1e13382cf name: 'fuga quidem' slug: null description: 'Debitis quia aut sed eaque non. Est necessitatibus sed alias asperiores rerum dolor ea doloribus. Sit cumque nihil quo omnis nemo. Iusto ut sed beatae est. Ipsa aut perferendis natus consequatur debitis.' abbreviation: vjj created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 98124060-1db2-3735-a17b-52e1e13382cf name: type: string example: 'fuga quidem' slug: type: string example: null nullable: true description: type: string example: 'Debitis quia aut sed eaque non. Est necessitatibus sed alias asperiores rerum dolor ea doloribus. Sit cumque nihil quo omnis nemo. Iusto ut sed beatae est. Ipsa aut perferendis natus consequatur debitis.' abbreviation: type: string example: vjj 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: c9abae8f-5c44-3dcc-8e20-299f8d246bc8 name: 'Dr. Evan Schinner Sr.' username: jillian23 email: bennett.trantow@example.com image: id: null url: null sectors: [] roles: [] - id: 9593def0-6ce2-3e21-9cd3-7190d91b048d name: 'Prof. Rick Beier' username: jessie.schoen email: bette.johnson@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: c9abae8f-5c44-3dcc-8e20-299f8d246bc8 name: 'Dr. Evan Schinner Sr.' username: jillian23 email: bennett.trantow@example.com image: id: null url: null sectors: [] roles: [] - id: 9593def0-6ce2-3e21-9cd3-7190d91b048d name: 'Prof. Rick Beier' username: jessie.schoen email: bette.johnson@example.com image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: c9abae8f-5c44-3dcc-8e20-299f8d246bc8 name: type: string example: 'Dr. Evan Schinner Sr.' username: type: string example: jillian23 email: type: string example: bennett.trantow@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: - 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: - c763fada-109a-39ce-bda5-51e973619a3f 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: - 6db7cda1-b4e3-38d8-83b9-a805df90e471 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: - 5c1795b5-367f-349a-897a-16b32014d91a 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: 'quisquam ut' slug: ratione-et-inventore-quisquam - name: 'quaerat autem' slug: voluptatem-voluptatem-et-iure-distinctio properties: data: type: array example: - name: 'quisquam ut' slug: ratione-et-inventore-quisquam - name: 'quaerat autem' slug: voluptatem-voluptatem-et-iure-distinctio items: type: object properties: name: type: string example: 'quisquam ut' slug: type: string example: ratione-et-inventore-quisquam 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: 8a531c7b-6edc-38e6-ae51-171786a5a254 slug: null name: null description: 'Deivid Garcia Quintana Neto' abbreviation: dolorum color: '#49bf0c' text_color: '#49d415' module: name: Obras slug: work created_at: null updated_at: null - id: 982f7501-da47-3f98-a53e-6c28c3e63e2c slug: null name: null description: 'Lorenzo Gil Paes Neto' abbreviation: sunt color: '#440448' text_color: '#fb6e37' module: name: Obras slug: work 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: 8a531c7b-6edc-38e6-ae51-171786a5a254 slug: null name: null description: 'Deivid Garcia Quintana Neto' abbreviation: dolorum color: '#49bf0c' text_color: '#49d415' module: name: Obras slug: work created_at: null updated_at: null - id: 982f7501-da47-3f98-a53e-6c28c3e63e2c slug: null name: null description: 'Lorenzo Gil Paes Neto' abbreviation: sunt color: '#440448' text_color: '#fb6e37' module: name: Obras slug: work created_at: null updated_at: null items: type: object properties: id: type: string example: 8a531c7b-6edc-38e6-ae51-171786a5a254 slug: type: string example: null nullable: true name: type: string example: null nullable: true description: type: string example: 'Deivid Garcia Quintana Neto' abbreviation: type: string example: dolorum color: type: string example: '#49bf0c' text_color: type: string example: '#49d415' 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 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: 4602fab1-8031-3b8b-b509-d1461849c946 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: b9c31b56-e3e0-3f53-831d-8900a4a3e0fb slug: null name: null description: 'Ícaro Santos Zambrano' abbreviation: consequatur color: '#5b4f83' text_color: '#4af12e' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: b9c31b56-e3e0-3f53-831d-8900a4a3e0fb slug: type: string example: null nullable: true name: type: string example: null nullable: true description: type: string example: 'Ícaro Santos Zambrano' abbreviation: type: string example: consequatur color: type: string example: '#5b4f83' text_color: type: string example: '#4af12e' 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: 53a2ec67-e256-3ee4-9001-e720afdeae99 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: 77f8c46a-211b-3347-b577-135604e9c501 quantity: 463.9722 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 1a002909-6fe0-3931-a1a5-b3a233747bfa quantity: 730.43 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null properties: data: type: array example: - id: 77f8c46a-211b-3347-b577-135604e9c501 quantity: 463.9722 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: 1a002909-6fe0-3931-a1a5-b3a233747bfa quantity: 730.43 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: 77f8c46a-211b-3347-b577-135604e9c501 quantity: type: number example: 463.9722 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: 88f1d044-6b47-37b5-9c1c-802157f4bfbc name: 'Estoque Batista-Vale' module: work is_active: true is_main: false created_at: null updated_at: null - id: 108764b5-7dfa-350f-885e-7fd3d0618327 name: 'Estoque Oliveira-Rodrigues' 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: 88f1d044-6b47-37b5-9c1c-802157f4bfbc name: 'Estoque Batista-Vale' module: work is_active: true is_main: false created_at: null updated_at: null - id: 108764b5-7dfa-350f-885e-7fd3d0618327 name: 'Estoque Oliveira-Rodrigues' module: work is_active: true is_main: false created_at: null updated_at: null items: type: object properties: id: type: string example: 88f1d044-6b47-37b5-9c1c-802157f4bfbc name: type: string example: 'Estoque Batista-Vale' 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: e3e396dd-1002-38e1-916d-fbff679e5e25 name: 'Estoque Verdugo-Padrão' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: e3e396dd-1002-38e1-916d-fbff679e5e25 name: type: string example: 'Estoque Verdugo-Padrão' 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: cd922f7f-d7cd-37ed-b4b0-65c84ca99359 name: 'Estoque Padrão e Leal' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: cd922f7f-d7cd-37ed-b4b0-65c84ca99359 name: type: string example: 'Estoque Padrão e Leal' 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: b263b354-44f8-3f8e-99f8-f78489d21ebf name: 'Estoque Zaragoça-Queirós' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: b263b354-44f8-3f8e-99f8-f78489d21ebf name: type: string example: 'Estoque Zaragoça-Queirós' 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: ab181ef0-dd6c-3b0e-ae2c-7db8a449508f name: 'Estoque de Aguiar S.A.' module: work is_active: true is_main: false created_at: null updated_at: null properties: data: type: object properties: id: type: string example: ab181ef0-dd6c-3b0e-ae2c-7db8a449508f name: type: string example: 'Estoque de Aguiar S.A.' module: type: string example: work is_active: type: boolean example: true is_main: type: boolean example: false created_at: type: string example: null 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: cdd6f797-7cfc-3eeb-9b67-b48e40c4ff32 quantity: 661.8207 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: a3c973ab-d239-396d-a100-9bbf164e1598 quantity: 504.1162 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: cdd6f797-7cfc-3eeb-9b67-b48e40c4ff32 quantity: 661.8207 min_quantity: null max_quantity: null below_minimum: false above_maximum: false created_at: null updated_at: null - id: a3c973ab-d239-396d-a100-9bbf164e1598 quantity: 504.1162 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: cdd6f797-7cfc-3eeb-9b67-b48e40c4ff32 quantity: type: number example: 661.8207 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: 3eb42b1a-c369-35cb-979a-0336e1701284 quantity: 7.1864 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: 3eb42b1a-c369-35cb-979a-0336e1701284 quantity: type: number example: 7.1864 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: non 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: 9bb56ff3-64fc-32e6-b257-d178e9852e35 code: MOV-403407 type: alocação type_name: ALLOCATION is_entry: true is_exit: false quantity: 81.4369 previous_quantity: 522.3343 new_quantity: 603.7712 reason: null movement_date: '2026-06-08T12:47:37.000000Z' created_at: null - id: d38cfe57-018b-3895-b0f1-99680aa00b98 code: MOV-558602 type: perda type_name: LOSS is_entry: false is_exit: true quantity: 14.3847 previous_quantity: 293.0464 new_quantity: 278.6617 reason: null movement_date: '2026-05-31T05:53:49.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: 9bb56ff3-64fc-32e6-b257-d178e9852e35 code: MOV-403407 type: alocação type_name: ALLOCATION is_entry: true is_exit: false quantity: 81.4369 previous_quantity: 522.3343 new_quantity: 603.7712 reason: null movement_date: '2026-06-08T12:47:37.000000Z' created_at: null - id: d38cfe57-018b-3895-b0f1-99680aa00b98 code: MOV-558602 type: perda type_name: LOSS is_entry: false is_exit: true quantity: 14.3847 previous_quantity: 293.0464 new_quantity: 278.6617 reason: null movement_date: '2026-05-31T05:53:49.000000Z' created_at: null items: type: object properties: id: type: string example: 9bb56ff3-64fc-32e6-b257-d178e9852e35 code: type: string example: MOV-403407 type: type: string example: alocação type_name: type: string example: ALLOCATION is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 81.4369 previous_quantity: type: number example: 522.3343 new_quantity: type: number example: 603.7712 reason: type: string example: null nullable: true movement_date: type: string example: '2026-06-08T12:47:37.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: 47551e74-5617-3678-8019-6703aef641ca code: MOV-346716 type: vencido type_name: EXPIRED is_entry: false is_exit: true quantity: 73.3946 previous_quantity: 136.5215 new_quantity: 63.1269 reason: null movement_date: '2026-06-19T13:28:33.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 47551e74-5617-3678-8019-6703aef641ca code: type: string example: MOV-346716 type: type: string example: vencido type_name: type: string example: EXPIRED is_entry: type: boolean example: false is_exit: type: boolean example: true quantity: type: number example: 73.3946 previous_quantity: type: number example: 136.5215 new_quantity: type: number example: 63.1269 reason: type: string example: null nullable: true movement_date: type: string example: '2026-06-19T13:28:33.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: b9f3851b-2068-399e-bda1-b5c952a478a8 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: a348c494-ee74-3287-8708-65d2c6d767f7 code: MOV-210363 type: alocação type_name: ALLOCATION is_entry: true is_exit: false quantity: 9.4237 previous_quantity: 509.1995 new_quantity: 518.6232 reason: null movement_date: '2026-06-18T11:29:36.000000Z' created_at: null properties: data: type: object properties: id: type: string example: a348c494-ee74-3287-8708-65d2c6d767f7 code: type: string example: MOV-210363 type: type: string example: alocação type_name: type: string example: ALLOCATION is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 9.4237 previous_quantity: type: number example: 509.1995 new_quantity: type: number example: 518.6232 reason: type: string example: null nullable: true movement_date: type: string example: '2026-06-18T11:29:36.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: 31a8f3b8-3fbd-3b66-8be5-a1bc4ae2df4f 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: 2543adb3-002c-302d-ac1e-b0421949c2c2 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: 7d1fe8d1-c710-3565-a851-08c05d5a5d9e code: MOV-481927 type: produção type_name: PRODUCTION is_entry: true is_exit: false quantity: 12.9093 previous_quantity: 900.9483 new_quantity: 913.8576 reason: null movement_date: '2026-06-02T01:44:28.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 7d1fe8d1-c710-3565-a851-08c05d5a5d9e code: type: string example: MOV-481927 type: type: string example: produção type_name: type: string example: PRODUCTION is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 12.9093 previous_quantity: type: number example: 900.9483 new_quantity: type: number example: 913.8576 reason: type: string example: null nullable: true movement_date: type: string example: '2026-06-02T01:44:28.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: 92fa6640-e08a-308b-8b0e-4be984cd09b4 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: 99d1a9d5-007f-39f9-b784-66f3b610aaf5 code: MOV-348026 type: produção type_name: PRODUCTION is_entry: true is_exit: false quantity: 68.4759 previous_quantity: 384.9405 new_quantity: 453.4164 reason: 'Adipisci commodi ut ad odit incidunt qui non dolor.' movement_date: '2026-06-14T07:23:37.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 99d1a9d5-007f-39f9-b784-66f3b610aaf5 code: type: string example: MOV-348026 type: type: string example: produção type_name: type: string example: PRODUCTION is_entry: type: boolean example: true is_exit: type: boolean example: false quantity: type: number example: 68.4759 previous_quantity: type: number example: 384.9405 new_quantity: type: number example: 453.4164 reason: type: string example: 'Adipisci commodi ut ad odit incidunt qui non dolor.' movement_date: type: string example: '2026-06-14T07:23:37.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: c94a8248-7add-365e-81ab-5f501e757dd2 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: 051bfc59-bd7a-3165-b8d3-53fb40986acf code: MOV-828876 type: venda type_name: SALE is_entry: false is_exit: true quantity: 54.0169 previous_quantity: 238.2312 new_quantity: 184.2143 reason: 'Laudantium aut suscipit excepturi ab laboriosam facere sint libero.' movement_date: '2026-06-16T18:19:42.000000Z' created_at: null properties: data: type: object properties: id: type: string example: 051bfc59-bd7a-3165-b8d3-53fb40986acf code: type: string example: MOV-828876 type: type: string example: venda type_name: type: string example: SALE is_entry: type: boolean example: false is_exit: type: boolean example: true quantity: type: number example: 54.0169 previous_quantity: type: number example: 238.2312 new_quantity: type: number example: 184.2143 reason: type: string example: 'Laudantium aut suscipit excepturi ab laboriosam facere sint libero.' movement_date: type: string example: '2026-06-16T18:19:42.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: 95b334d1-e8e7-3e3c-bcc9-e669031fff9f name: 'Jean Santana Leon' email: mirella97@example.com phone: '(88) 92984-9991' document: 18.248.190/0001-26 type: pj responsible: 'Alexa Queirós Filho' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null - id: f6f83712-b243-3e4f-ae1d-6bd42ea09781 name: 'Benedito Barreto Branco Neto' email: veronica13@example.net phone: '(67) 90346-6465' document: 07.100.590/0001-73 type: pf responsible: 'Bruno Gabriel Rezende Jr.' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: '« Anterior' page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: 'Próximo »' page: null active: false path: / per_page: 10 to: 2 total: 2 properties: data: type: array example: - id: 95b334d1-e8e7-3e3c-bcc9-e669031fff9f name: 'Jean Santana Leon' email: mirella97@example.com phone: '(88) 92984-9991' document: 18.248.190/0001-26 type: pj responsible: 'Alexa Queirós Filho' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null - id: f6f83712-b243-3e4f-ae1d-6bd42ea09781 name: 'Benedito Barreto Branco Neto' email: veronica13@example.net phone: '(67) 90346-6465' document: 07.100.590/0001-73 type: pf responsible: 'Bruno Gabriel Rezende Jr.' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null items: type: object properties: id: type: string example: 95b334d1-e8e7-3e3c-bcc9-e669031fff9f name: type: string example: 'Jean Santana Leon' email: type: string example: mirella97@example.com phone: type: string example: '(88) 92984-9991' document: type: string example: 18.248.190/0001-26 type: type: string example: pj responsible: type: string example: 'Alexa Queirós 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 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: 8771e3a9-89e9-36f5-b511-a58e07881b93 name: 'Antônio Robson da Rosa Jr.' email: bonilha.tomas@example.com phone: '(84) 3749-9064' document: 87.926.250/0001-35 type: pf responsible: 'Dr. Teobaldo Vasques Marinho Jr.' image: id: null url: null address: street: null number: null complement: null neighborhood: null city: null state: null zip_code: null properties: data: type: object properties: id: type: string example: 8771e3a9-89e9-36f5-b511-a58e07881b93 name: type: string example: 'Antônio Robson da Rosa Jr.' email: type: string example: bonilha.tomas@example.com phone: type: string example: '(84) 3749-9064' document: type: string example: 87.926.250/0001-35 type: type: string example: pf responsible: type: string example: 'Dr. Teobaldo Vasques Marinho Jr.' 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 - 'ajuste saída' nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: d18f89c4-fee8-3515-8332-080e1e1cc3dc name: 'Thalissa Eloá Esteves Filho' description: 'Est molestias non dolorum incidunt pariatur odio. Odit culpa qui ullam aut ad. Et nihil consequuntur quo ipsum reiciendis perferendis perferendis a.' type: 'ajuste saída' - id: 0aa304af-d204-346c-b4c0-c953fa1417a1 name: 'Tiago David Molina' description: 'Alias et optio qui deserunt harum ut. Ipsam labore veritatis dolorem rem atque itaque dolor. Enim velit cupiditate dolores voluptatibus. Ut veritatis saepe quia laboriosam.' type: ajuste 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: d18f89c4-fee8-3515-8332-080e1e1cc3dc name: 'Thalissa Eloá Esteves Filho' description: 'Est molestias non dolorum incidunt pariatur odio. Odit culpa qui ullam aut ad. Et nihil consequuntur quo ipsum reiciendis perferendis perferendis a.' type: 'ajuste saída' - id: 0aa304af-d204-346c-b4c0-c953fa1417a1 name: 'Tiago David Molina' description: 'Alias et optio qui deserunt harum ut. Ipsam labore veritatis dolorem rem atque itaque dolor. Enim velit cupiditate dolores voluptatibus. Ut veritatis saepe quia laboriosam.' type: ajuste items: type: object properties: id: type: string example: d18f89c4-fee8-3515-8332-080e1e1cc3dc name: type: string example: 'Thalissa Eloá Esteves Filho' description: type: string example: 'Est molestias non dolorum incidunt pariatur odio. Odit culpa qui ullam aut ad. Et nihil consequuntur quo ipsum reiciendis perferendis perferendis a.' type: type: string example: 'ajuste saída' 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 - 'ajuste saída' 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: 17caa26d-c07a-3228-b7cf-c3eae40ef5b6 name: 'Otávio Evandro Meireles Filho' description: 'Placeat maxime animi repellendus consequatur. Ut dolor sequi repellendus dolores ut. Aut delectus voluptatem quaerat rerum quis aliquid odit.' type: depósito properties: data: type: object properties: id: type: string example: 17caa26d-c07a-3228-b7cf-c3eae40ef5b6 name: type: string example: 'Otávio Evandro Meireles Filho' description: type: string example: 'Placeat maxime animi repellendus consequatur. Ut dolor sequi repellendus dolores ut. Aut delectus voluptatem quaerat rerum quis aliquid odit.' 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 - 'ajuste saída' 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: et 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: 6d2eac40-fcda-39b7-bb69-217249897dea name: 'Sr. Ivan Delgado Vieira' abbreviation: 'Sr. Emiliano Teobaldo Carrara Sobrinho' description: 'Eos enim maxime aut et qui.' created_at: null updated_at: null - id: f7fbc6e1-2ecb-3a9b-885a-bef226e03b37 name: 'Sra. Mila Santacruz' abbreviation: 'Igor Rocha' description: 'Eos recusandae qui optio.' 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: 6d2eac40-fcda-39b7-bb69-217249897dea name: 'Sr. Ivan Delgado Vieira' abbreviation: 'Sr. Emiliano Teobaldo Carrara Sobrinho' description: 'Eos enim maxime aut et qui.' created_at: null updated_at: null - id: f7fbc6e1-2ecb-3a9b-885a-bef226e03b37 name: 'Sra. Mila Santacruz' abbreviation: 'Igor Rocha' description: 'Eos recusandae qui optio.' created_at: null updated_at: null items: type: object properties: id: type: string example: 6d2eac40-fcda-39b7-bb69-217249897dea name: type: string example: 'Sr. Ivan Delgado Vieira' abbreviation: type: string example: 'Sr. Emiliano Teobaldo Carrara Sobrinho' description: type: string example: 'Eos enim maxime aut et qui.' 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: 7d072ee2-a179-3d75-b390-6b4f798dd478 name: 'Lorena Valência' abbreviation: 'Ivan Azevedo Cortês' description: 'Et tempora inventore a.' created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 7d072ee2-a179-3d75-b390-6b4f798dd478 name: type: string example: 'Lorena Valência' abbreviation: type: string example: 'Ivan Azevedo Cortês' description: type: string example: 'Et tempora inventore a.' 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: ducimus 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: omnis 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: a333e080-f820-3e17-8178-6263dcac720b name: 'Samanta Franecki DDS' username: margret83 email: tony.johnson@example.com image: id: null url: null sectors: [] roles: [] - id: 64852878-4a01-335a-8641-7f22db2f274b name: 'Frederick Hilpert' username: lind.harold email: buckridge.lempi@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: a333e080-f820-3e17-8178-6263dcac720b name: 'Samanta Franecki DDS' username: margret83 email: tony.johnson@example.com image: id: null url: null sectors: [] roles: [] - id: 64852878-4a01-335a-8641-7f22db2f274b name: 'Frederick Hilpert' username: lind.harold email: buckridge.lempi@example.net image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: a333e080-f820-3e17-8178-6263dcac720b name: type: string example: 'Samanta Franecki DDS' username: type: string example: margret83 email: type: string example: tony.johnson@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: hagenes.alfredo 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: - d7b5a78c-f1af-3588-acf0-20d51c46752a items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - e3f167bb-2801-30e7-bc66-f628830d5384 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: b83c66ce-405d-3d30-9a8e-5aec389182bd name: 'Mr. Arne Hermiston DDS' username: wilkinson.caden email: karley18@example.com image: id: null url: null sectors: [] roles: [] properties: data: type: object properties: id: type: string example: b83c66ce-405d-3d30-9a8e-5aec389182bd name: type: string example: 'Mr. Arne Hermiston DDS' username: type: string example: wilkinson.caden email: type: string example: karley18@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: waino.hermann 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: - f9390345-206a-3322-ae20-4823e58e5559 items: type: string roles: type: array description: 'UUID da função. The uuid of an existing record in the roles table.' example: - 576a425a-e3a2-37dd-b3c5-5364f9774dc2 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: - 1d78a79b-802e-3e3c-a66e-0649f81fd569 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: veniam display_name: 'Facere sed excepturi tempora facilis.' - id: null name: velit display_name: 'Eum repellat illum quis laborum ullam et unde iure.' properties: data: type: array example: - id: null name: veniam display_name: 'Facere sed excepturi tempora facilis.' - id: null name: velit display_name: 'Eum repellat illum quis laborum ullam et unde iure.' items: type: object properties: id: type: string example: null nullable: true name: type: string example: veniam display_name: type: string example: 'Facere sed excepturi tempora facilis.' 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: 33c1fc1f-d757-3d93-9063-d04ff35c483a description: 'Sr. Filipe Rico' work: id: null name: null documents: [] created_at: null updated_at: null - id: ddef6b02-740d-3505-b812-ae89db5bf16e description: 'Wilson Erik Leon' 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: 33c1fc1f-d757-3d93-9063-d04ff35c483a description: 'Sr. Filipe Rico' work: id: null name: null documents: [] created_at: null updated_at: null - id: ddef6b02-740d-3505-b812-ae89db5bf16e description: 'Wilson Erik Leon' work: id: null name: null documents: [] created_at: null updated_at: null items: type: object properties: id: type: string example: 33c1fc1f-d757-3d93-9063-d04ff35c483a description: type: string example: 'Sr. Filipe Rico' 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: 95eabe51-1321-3a36-8be7-179de48ab30b 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: 11f642c0-275a-3a10-a3c5-125cd26da3b2 description: 'Ingrid Pacheco Alves' work: id: null name: null documents: [] created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 11f642c0-275a-3a10-a3c5-125cd26da3b2 description: type: string example: 'Ingrid Pacheco Alves' 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: e8f0aff3-4978-3bed-9124-727721b2dcde 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: 8d698a99-aa95-3250-aeb1-69a7fc5b8a01 name: 'Sr. Emerson Ferraz Leon 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: '2019-09-26 18:12:48.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null - id: 8014caca-78e6-30ef-a15e-785f45274647 name: "Graziela Daniella D'ávila Filho" 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: '1975-04-21 01:28:56.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: 8d698a99-aa95-3250-aeb1-69a7fc5b8a01 name: 'Sr. Emerson Ferraz Leon 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: '2019-09-26 18:12:48.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null - id: 8014caca-78e6-30ef-a15e-785f45274647 name: "Graziela Daniella D'ávila Filho" 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: '1975-04-21 01:28:56.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null items: type: object properties: id: type: string example: 8d698a99-aa95-3250-aeb1-69a7fc5b8a01 name: type: string example: 'Sr. Emerson Ferraz Leon 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: '2019-09-26 18:12:48.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: af1c73a9-0683-354f-a627-0da337b0def8 status_id: type: string description: 'Status id. The uuid of an existing record in the statuses table.' example: d5b898fe-38d4-3b10-a605-3132b641e5af 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: 4787f6cc-9ac1-3dce-98d2-65ad8647a4bf name: 'Sra. Aline Serrano 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: '2024-04-07 05:08:19.000000' timezone_type: 3 timezone: America/Sao_Paulo created_at: null updated_at: null properties: data: type: object properties: id: type: string example: 4787f6cc-9ac1-3dce-98d2-65ad8647a4bf name: type: string example: 'Sra. Aline Serrano 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: '2024-04-07 05:08:19.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: c429aef6-39ac-3be4-a387-8f656508cbfb status_id: type: string description: 'Status id. The uuid of an existing record in the statuses table.' example: 164fe287-dade-39ff-9849-9c86a6049a21 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: f01bb388-9b90-3ba5-92bc-8c4a596b75e4 name: "Eula O'Reilly" username: beatrice23 email: gfadel@example.net image: id: null url: null sectors: [] roles: [] - id: 6801a7c2-1472-33a4-bd1d-2d46a11db7b2 name: 'Madonna Kuphal' username: ywindler email: aida.parker@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: f01bb388-9b90-3ba5-92bc-8c4a596b75e4 name: "Eula O'Reilly" username: beatrice23 email: gfadel@example.net image: id: null url: null sectors: [] roles: [] - id: 6801a7c2-1472-33a4-bd1d-2d46a11db7b2 name: 'Madonna Kuphal' username: ywindler email: aida.parker@example.net image: id: null url: null sectors: [] roles: [] items: type: object properties: id: type: string example: f01bb388-9b90-3ba5-92bc-8c4a596b75e4 name: type: string example: "Eula O'Reilly" username: type: string example: beatrice23 email: type: string example: gfadel@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: - abc032ea-dbd7-3a86-ad7c-879bcfcfbe64 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: - 196f9261-5423-38f2-abfc-4f09b58f2970 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: - 78aadc72-b4e4-380d-85fa-ddc47ec8bb3e items: type: string parameters: - in: path name: work description: 'Work UUID' example: 019556e7-2e9f-777c-a177-30bbf0646c32 required: true schema: type: string