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: 'Central de Tutoriais'
description: 'Consulta dos tutoriais liberados para quem está autenticado'
-
name: Contracts
description: 'Endpoints for managing work contracts'
-
name: 'Cost Centers'
description: 'Endpoints for cost centers'
-
name: Customers
description: 'Endpoints for customers'
-
name: 'Daily Logs (RDO)'
description: 'Endpoints for managing daily work reports (RDO)'
-
name: Disciplines
description: 'Endpoints for engineering disciplines'
-
name: 'Document Categories'
description: 'Endpoints for document categories'
-
name: Documents
description: 'Endpoints for documents'
-
name: 'EPI Renewals'
description: 'Endpoints for EPI pending renewals'
-
name: 'EPI Types'
description: 'Endpoints for EPI types catalog'
-
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: 'Project Versions'
description: 'Endpoints for project revisions'
-
name: Projects
description: 'Endpoints for engineering projects'
-
name: Reports
description: 'Endpoints for reports'
-
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: 'Tutoriais (administração)'
description: 'Cadastro do catálogo de módulos da Central de Tutoriais'
-
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: 41a6c147-dbfe-388b-bdc3-df2819c78a1b
name: delectus-6aedfa3c8f813
display_name: 'Laudantium et non ullam.'
permissions_count: null
-
id: a838ef73-4be4-35f1-baea-8a02bc939059
name: voluptatum-6aedfa3c938ef
display_name: 'Aut est et et ut enim architecto odio iure.'
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: 41a6c147-dbfe-388b-bdc3-df2819c78a1b
name: delectus-6aedfa3c8f813
display_name: 'Laudantium et non ullam.'
permissions_count: null
-
id: a838ef73-4be4-35f1-baea-8a02bc939059
name: voluptatum-6aedfa3c938ef
display_name: 'Aut est et et ut enim architecto odio iure.'
permissions_count: null
items:
type: object
properties:
id:
type: string
example: 41a6c147-dbfe-388b-bdc3-df2819c78a1b
name:
type: string
example: delectus-6aedfa3c8f813
display_name:
type: string
example: 'Laudantium et non ullam.'
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:
- 09477fa9-9141-301a-b05a-5bdad15d2d08
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:
- 7aa218e9-e0eb-34bb-bbba-4db7926cf300
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: 0b1ae0c7-5533-3fec-bfe9-1d85af51b1d2
name: facere-6aedfa3ca0835
display_name: 'Ipsam rem aut dolor magni velit exercitationem laboriosam.'
permissions_count: null
properties:
data:
type: object
properties:
id:
type: string
example: 0b1ae0c7-5533-3fec-bfe9-1d85af51b1d2
name:
type: string
example: facere-6aedfa3ca0835
display_name:
type: string
example: 'Ipsam rem aut dolor magni velit exercitationem laboriosam.'
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: eum
display_name: 'Perspiciatis ut alias et reiciendis labore.'
-
id: null
name: est
display_name: 'Architecto pariatur aut odit velit exercitationem.'
properties:
data:
type: array
example:
-
id: null
name: eum
display_name: 'Perspiciatis ut alias et reiciendis labore.'
-
id: null
name: est
display_name: 'Architecto pariatur aut odit velit exercitationem.'
items:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: eum
display_name:
type: string
example: 'Perspiciatis ut alias et reiciendis labore.'
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: est
display_name: 'Temporibus reprehenderit molestiae et tempore voluptatibus.'
-
id: null
name: voluptas
display_name: 'Ut qui magnam beatae dolores fugit dolorum earum ut.'
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Anterior'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Próximo »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
properties:
data:
type: array
example:
-
id: null
name: est
display_name: 'Temporibus reprehenderit molestiae et tempore voluptatibus.'
-
id: null
name: voluptas
display_name: 'Ut qui magnam beatae dolores fugit dolorum earum ut.'
items:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: est
display_name:
type: string
example: 'Temporibus reprehenderit molestiae et tempore voluptatibus.'
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: maiores
display_name: 'Id voluptatibus minus ullam quae aut rerum.'
properties:
data:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: maiores
display_name:
type: string
example: 'Id voluptatibus minus ullam quae aut rerum.'
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: df399040-1489-3a8d-adbc-0d97a04468cb
code: null
type: saída
payment_method: boleto
amount: 5042.57
due_date: '2026-12-04T03:00:00.000000Z'
status: null
payment_date: null
protest_date: null
paid_amount: null
interest_amount: null
penalty_amount: null
notary_fee_amount: null
description: 'Sit eveniet et labore aspernatur et fuga ducimus commodi magni praesentium.'
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: sit
field2: 8
field3: false
notes: 'Aut aspernatur dolore id sed voluptates.'
created_at: null
updated_at: null
-
id: e781b60c-92e2-39e8-930a-bdfca10c0812
code: null
type: entrada
payment_method: cheque
amount: 8125.51
due_date: '2026-12-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 est et eligendi vitae aspernatur facere similique.'
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: neque
field2: 44
field3: true
notes: 'Harum suscipit sapiente voluptas impedit.'
created_at: null
updated_at: null
properties:
data:
type: array
example:
-
id: df399040-1489-3a8d-adbc-0d97a04468cb
code: null
type: saída
payment_method: boleto
amount: 5042.57
due_date: '2026-12-04T03:00:00.000000Z'
status: null
payment_date: null
protest_date: null
paid_amount: null
interest_amount: null
penalty_amount: null
notary_fee_amount: null
description: 'Sit eveniet et labore aspernatur et fuga ducimus commodi magni praesentium.'
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: sit
field2: 8
field3: false
notes: 'Aut aspernatur dolore id sed voluptates.'
created_at: null
updated_at: null
-
id: e781b60c-92e2-39e8-930a-bdfca10c0812
code: null
type: entrada
payment_method: cheque
amount: 8125.51
due_date: '2026-12-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 est et eligendi vitae aspernatur facere similique.'
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: neque
field2: 44
field3: true
notes: 'Harum suscipit sapiente voluptas impedit.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: df399040-1489-3a8d-adbc-0d97a04468cb
code:
type: string
example: null
nullable: true
type:
type: string
example: saída
payment_method:
type: string
example: boleto
amount:
type: number
example: 5042.57
due_date:
type: string
example: '2026-12-04T03: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: 'Sit eveniet et labore aspernatur et fuga ducimus commodi magni praesentium.'
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: sit
field2:
type: integer
example: 8
field3:
type: boolean
example: false
notes:
type: string
example: 'Aut aspernatur dolore id sed voluptates.'
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:
- aut
required: true
schema:
type: array
description: 'The uuid of an existing record in the account_payable_receivables table.'
example:
- aut
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:
- esse
required: false
schema:
type: array
description: 'The uuid of an existing record in the customers table.'
example:
- esse
items:
type: string
-
in: query
name: suppliers
description: 'The uuid of an existing record in the suppliers table.'
example:
- non
required: false
schema:
type: array
description: 'The uuid of an existing record in the suppliers table.'
example:
- non
items:
type: string
-
in: query
name: works
description: 'The uuid of an existing record in the works table.'
example:
- quo
required: false
schema:
type: array
description: 'The uuid of an existing record in the works table.'
example:
- quo
items:
type: string
-
in: query
name: cost_centers
description: 'The uuid of an existing record in the cost_centers table.'
example:
- reiciendis
required: false
schema:
type: array
description: 'The uuid of an existing record in the cost_centers table.'
example:
- reiciendis
items:
type: string
-
in: query
name: statuses
description: ''
example:
- cancelado
required: false
schema:
type: array
description: ''
example:
- cancelado
items:
type: string
enum:
- 'a vencer'
- pago
- 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
- pix
- cartao
- 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-11-06T13:03:08'
required: false
schema:
type: string
description: 'O campo value deve ser uma data válida.'
example: '2026-11-06T13:03:08'
nullable: true
-
in: query
name: protest_date_end
description: 'O campo value deve ser uma data válida.'
example: '2026-11-06T13:03:08'
required: false
schema:
type: string
description: 'O campo value deve ser uma data válida.'
example: '2026-11-06T13:03:08'
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: c31e5ac3-915a-3981-a2e2-2c41823b2a91
code: null
type: saída
payment_method: cheque
amount: 982.09
due_date: '2026-11-23T03: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: 'Velit molestiae id eius id quibusdam sint voluptatem quia nulla.'
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: fugiat
field2: 87
field3: false
notes: 'Eius quo est est sapiente sequi ut mollitia.'
created_at: null
updated_at: null
-
id: c6f2d6d9-9e9f-3a59-bb84-c8b6653332f2
code: null
type: entrada
payment_method: cheque
amount: 6870.53
due_date: '2026-11-27T03:00:00.000000Z'
status: null
payment_date: null
protest_date: null
paid_amount: null
interest_amount: null
penalty_amount: null
notary_fee_amount: null
description: 'Aut sit repellendus hic officia omnis amet dolorum et ut tenetur temporibus.'
is_recurring: null
recurrence_config: null
parent_id: null
recurrence_order: 1
total_recurrences: null
children_count: 0
remaining_recurrences: null
has_children: false
field1: deleniti
field2: 73
field3: true
notes: 'Dolor perferendis molestias sed quis assumenda.'
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: c31e5ac3-915a-3981-a2e2-2c41823b2a91
code: null
type: saída
payment_method: cheque
amount: 982.09
due_date: '2026-11-23T03: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: 'Velit molestiae id eius id quibusdam sint voluptatem quia nulla.'
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: fugiat
field2: 87
field3: false
notes: 'Eius quo est est sapiente sequi ut mollitia.'
created_at: null
updated_at: null
-
id: c6f2d6d9-9e9f-3a59-bb84-c8b6653332f2
code: null
type: entrada
payment_method: cheque
amount: 6870.53
due_date: '2026-11-27T03:00:00.000000Z'
status: null
payment_date: null
protest_date: null
paid_amount: null
interest_amount: null
penalty_amount: null
notary_fee_amount: null
description: 'Aut sit repellendus hic officia omnis amet dolorum et ut tenetur temporibus.'
is_recurring: null
recurrence_config: null
parent_id: null
recurrence_order: 1
total_recurrences: null
children_count: 0
remaining_recurrences: null
has_children: false
field1: deleniti
field2: 73
field3: true
notes: 'Dolor perferendis molestias sed quis assumenda.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: c31e5ac3-915a-3981-a2e2-2c41823b2a91
code:
type: string
example: null
nullable: true
type:
type: string
example: saída
payment_method:
type: string
example: cheque
amount:
type: number
example: 982.09
due_date:
type: string
example: '2026-11-23T03: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: 'Velit molestiae id eius id quibusdam sint voluptatem quia nulla.'
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: fugiat
field2:
type: integer
example: 87
field3:
type: boolean
example: false
notes:
type: string
example: 'Eius quo est est sapiente sequi ut mollitia.'
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:
- officia
required: false
schema:
type: array
description: 'The uuid of an existing record in the customers table.'
example:
- officia
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:
- rem
required: false
schema:
type: array
description: 'The uuid of an existing record in the works table.'
example:
- rem
items:
type: string
-
in: query
name: cost_centers
description: 'The uuid of an existing record in the cost_centers table.'
example:
- consequatur
required: false
schema:
type: array
description: 'The uuid of an existing record in the cost_centers table.'
example:
- consequatur
items:
type: string
-
in: query
name: statuses
description: ''
example:
- pago
required: false
schema:
type: array
description: ''
example:
- pago
items:
type: string
enum:
- 'a vencer'
- pago
- 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
- pix
- cartao
- 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-11-06T13:03:08'
required: false
schema:
type: string
description: 'O campo value deve ser uma data válida.'
example: '2026-11-06T13:03:08'
nullable: true
-
in: query
name: protest_date_end
description: 'O campo value deve ser uma data válida.'
example: '2026-11-06T13:03:08'
required: false
schema:
type: string
description: 'O campo value deve ser uma data válida.'
example: '2026-11-06T13:03:08'
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: da773aa2-daff-32e7-a1c6-6234e7dbc2fc
code: null
type: saída
payment_method: cheque
amount: 8539.14
due_date: '2026-12-03T03: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: 'Magni ullam ipsum velit cupiditate dignissimos sequi consectetur.'
is_recurring: null
recurrence_config: null
parent_id: null
recurrence_order: 1
total_recurrences: null
children_count: 0
remaining_recurrences: null
has_children: false
field1: quos
field2: 78
field3: true
notes: 'Voluptas velit officia expedita.'
created_at: null
updated_at: null
-
id: ea160bca-de70-3796-8ba9-432be3a1bc48
code: null
type: saída
payment_method: boleto
amount: 9607.61
due_date: '2026-11-20T03: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: 'Cupiditate distinctio velit dolorem culpa et qui quos similique.'
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: eos
field2: 33
field3: false
notes: 'Dignissimos iure alias quod eligendi nam.'
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: da773aa2-daff-32e7-a1c6-6234e7dbc2fc
code: null
type: saída
payment_method: cheque
amount: 8539.14
due_date: '2026-12-03T03: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: 'Magni ullam ipsum velit cupiditate dignissimos sequi consectetur.'
is_recurring: null
recurrence_config: null
parent_id: null
recurrence_order: 1
total_recurrences: null
children_count: 0
remaining_recurrences: null
has_children: false
field1: quos
field2: 78
field3: true
notes: 'Voluptas velit officia expedita.'
created_at: null
updated_at: null
-
id: ea160bca-de70-3796-8ba9-432be3a1bc48
code: null
type: saída
payment_method: boleto
amount: 9607.61
due_date: '2026-11-20T03: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: 'Cupiditate distinctio velit dolorem culpa et qui quos similique.'
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: eos
field2: 33
field3: false
notes: 'Dignissimos iure alias quod eligendi nam.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: da773aa2-daff-32e7-a1c6-6234e7dbc2fc
code:
type: string
example: null
nullable: true
type:
type: string
example: saída
payment_method:
type: string
example: cheque
amount:
type: number
example: 8539.14
due_date:
type: string
example: '2026-12-03T03: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: 'Magni ullam ipsum velit cupiditate dignissimos sequi consectetur.'
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: quos
field2:
type: integer
example: 78
field3:
type: boolean
example: true
notes:
type: string
example: 'Voluptas velit officia expedita.'
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
- pix
- cartao
- 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: e3bd2ba9-5c44-389e-a2f9-d2d5aa0f5edf
nullable: true
customer_id:
type: string
description: 'Cliente. The uuid of an existing record in the customers table.'
example: c3d7ed09-7427-3500-90ab-da18fb1ba376
nullable: true
work_id:
type: string
description: 'Obra. The uuid of an existing record in the works table.'
example: 50af7513-b55f-3381-b8eb-d91c7141a602
nullable: true
cost_center_id:
type: string
description: 'Cost center id. The uuid of an existing record in the cost_centers table.'
example: db1ea72e-33e9-3709-8732-9215d6bf1343
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: 1e101d1b-c4fa-3349-8899-1a50eee58544
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
- cost_center_id
/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. A obra é opcional: quando omitida, só é herdada se a NF tiver exatamente uma obra vinculada.'
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: explicabo
installment_ids:
type: array
description: 'The uuid of an existing record in the fiscal_document_installments table.'
example:
- ullam
items:
type: string
payment_method:
type: string
description: ''
example: cheque
enum:
- cheque
- boleto
- pix
- cartao
- outro
nullable: true
work_id:
type: string
description: 'The uuid of an existing record in the works table.'
example: totam
nullable: true
cost_center_id:
type: string
description: 'The uuid of an existing record in the cost_centers table.'
example: earum
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: velit
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: de7014d8-17a3-3111-ba39-f7aded1f6b20
code: null
type: entrada
payment_method: boleto
amount: 8044.74
due_date: '2026-11-21T03: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: 'Est itaque fugit mollitia voluptas reprehenderit sint adipisci voluptas aspernatur.'
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: ex
field2: 11
field3: true
notes: 'Id minus id at sed et quo.'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: de7014d8-17a3-3111-ba39-f7aded1f6b20
code:
type: string
example: null
nullable: true
type:
type: string
example: entrada
payment_method:
type: string
example: boleto
amount:
type: number
example: 8044.74
due_date:
type: string
example: '2026-11-21T03: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: 'Est itaque fugit mollitia voluptas reprehenderit sint adipisci voluptas aspernatur.'
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: ex
field2:
type: integer
example: 11
field3:
type: boolean
example: true
notes:
type: string
example: 'Id minus id at sed et quo.'
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: true
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
- pix
- cartao
- 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: ba84e2a2-d687-3da0-89d8-c484332af22c
nullable: true
customer_id:
type: string
description: 'Customer id. The uuid of an existing record in the customers table.'
example: e962fa44-001f-3b46-9067-39451079b821
nullable: true
work_id:
type: string
description: 'Work id. The uuid of an existing record in the works table.'
example: ee6c92f1-14d5-3716-9310-be700aa1698c
nullable: true
cost_center_id:
type: string
description: 'Cost center id. The uuid of an existing record in the cost_centers table.'
example: be52003e-6688-3378-8506-ab95987981c2
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: beb1cab7-2fe3-3eba-96ac-3c2951277e83
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:
- cost_center_id
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: sunt
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: yadira.donnelly@example.org
password:
type: string
description: 'User password.'
example: password
required:
- email
- password
security: []
/api/auth/user:
get:
summary: Me
operationId: me
description: 'Get the current user'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: b6d55999-2df7-3c96-8d7e-8378437196bd
name: 'Sidney Grimes Jr.'
username: emerson.balistreri
email: willy69@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: b6d55999-2df7-3c96-8d7e-8378437196bd
name:
type: string
example: 'Sidney Grimes Jr.'
username:
type: string
example: emerson.balistreri
email:
type: string
example: willy69@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'
certification:
type: string
description: 'Certificação. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Certification'
nullable: true
crea:
type: string
description: 'CREA. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Crea'
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
username:
type: string
description: Usuário.
example: heidi91
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:
- cb6a82b5-55bf-3859-8557-b760d1910b7a
items:
type: string
roles:
type: array
description: 'UUID da função. The uuid of an existing record in the roles table.'
example:
- da1e364e-febc-3df7-9c84-4c76c949dd12
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: cxivssmedaimfrwrhl
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: occaecati
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: eius
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: 1
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: 12
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: ca9662b4-3af7-3a37-9b61-8670c6d70a8d
agency: '5664'
account: 8966064-1
type: corrente
balance: 4768.62
holder_type: pf
alias: et
limit: 2724.98
available_balance: 7493.6
used_limit: 0
available_limit: 2724.98
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: ca9662b4-3af7-3a37-9b61-8670c6d70a8d
agency:
type: string
example: '5664'
account:
type: string
example: 8966064-1
type:
type: string
example: corrente
balance:
type: number
example: 4768.62
holder_type:
type: string
example: pf
alias:
type: string
example: et
limit:
type: number
example: 2724.98
available_balance:
type: number
example: 7493.6
used_limit:
type: integer
example: 0
available_limit:
type: number
example: 2724.98
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: 04f0a697-ec08-3524-b4f0-560a93fae321
agency: '4840'
account: 3920333-8
type: poupança
balance: 39.33
holder_type: pj
alias: sint
limit: 8726.74
available_balance: 8766.07
used_limit: 0
available_limit: 8726.74
is_default: null
default_payment_method: null
bank:
id: null
name: null
code: null
created_at: null
updated_at: null
-
id: e36e4575-e626-3c74-8441-c5029416de68
agency: '1305'
account: 2968714-7
type: corrente
balance: 2787.68
holder_type: pj
alias: consequatur
limit: 5086.15
available_balance: 7873.83
used_limit: 0
available_limit: 5086.15
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: 04f0a697-ec08-3524-b4f0-560a93fae321
agency: '4840'
account: 3920333-8
type: poupança
balance: 39.33
holder_type: pj
alias: sint
limit: 8726.74
available_balance: 8766.07
used_limit: 0
available_limit: 8726.74
is_default: null
default_payment_method: null
bank:
id: null
name: null
code: null
created_at: null
updated_at: null
-
id: e36e4575-e626-3c74-8441-c5029416de68
agency: '1305'
account: 2968714-7
type: corrente
balance: 2787.68
holder_type: pj
alias: consequatur
limit: 5086.15
available_balance: 7873.83
used_limit: 0
available_limit: 5086.15
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: 04f0a697-ec08-3524-b4f0-560a93fae321
agency:
type: string
example: '4840'
account:
type: string
example: 3920333-8
type:
type: string
example: poupança
balance:
type: number
example: 39.33
holder_type:
type: string
example: pj
alias:
type: string
example: sint
limit:
type: number
example: 8726.74
available_balance:
type: number
example: 8766.07
used_limit:
type: integer
example: 0
available_limit:
type: number
example: 8726.74
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: 9456642-5
bank_id:
type: string
description: 'Bank id. The uuid of an existing record in the banks table.'
example: 51afef1d-5691-38d2-8cc0-9f8c4485664b
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: 3168706-6
bank_id:
type: string
description: 'Bank id. The uuid of an existing record in the banks table.'
example: 77f9c59e-b176-3b8c-a64f-f68f8e17a2fc
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: e4e980d4-fbc5-3b22-8edf-8344aa6d0d97
agency: '1365'
account: 9318664-9
type: corrente
balance: 1998.26
holder_type: pj
alias: reprehenderit
limit: 6383.5
available_balance: 8381.76
used_limit: 0
available_limit: 6383.5
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: e4e980d4-fbc5-3b22-8edf-8344aa6d0d97
agency:
type: string
example: '1365'
account:
type: string
example: 9318664-9
type:
type: string
example: corrente
balance:
type: number
example: 1998.26
holder_type:
type: string
example: pj
alias:
type: string
example: reprehenderit
limit:
type: number
example: 6383.5
available_balance:
type: number
example: 8381.76
used_limit:
type: integer
example: 0
available_limit:
type: number
example: 6383.5
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: 3
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: 1
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: est
nullable: true
sort_desc:
type: boolean
description: ''
example: false
nullable: true
page:
type: integer
description: 'O campo value deve ser pelo menos 1.'
example: 62
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: 2
nullable: true
q:
type: string
description: 'O campo value não pode ser superior a 255 caracteres.'
example: edvrlgbjbctra
nullable: true
type:
type: string
description: ''
example: saída
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-11-06T13:03:09'
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: '2065-04-24'
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: 14
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: 19
required: true
schema:
type: integer
-
in: path
name: bankStatement
description: ''
example: rem
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: 89c55070-7183-3f26-8481-cffcc9a06591
name: 'Gomes e Colaço Ltda.'
code: '411'
-
id: ee247d4c-18f2-3673-a5e5-a7aa20343fc2
name: Rios-Furtado
code: '863'
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: 89c55070-7183-3f26-8481-cffcc9a06591
name: 'Gomes e Colaço Ltda.'
code: '411'
-
id: ee247d4c-18f2-3673-a5e5-a7aa20343fc2
name: Rios-Furtado
code: '863'
items:
type: object
properties:
id:
type: string
example: 89c55070-7183-3f26-8481-cffcc9a06591
name:
type: string
example: 'Gomes e Colaço Ltda.'
code:
type: string
example: '411'
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: 35d01543-f0a4-3be6-b022-631a772d413b
name: 'Aragão e Arruda e Filhos'
code: '737'
properties:
data:
type: object
properties:
id:
type: string
example: 35d01543-f0a4-3be6-b022-631a772d413b
name:
type: string
example: 'Aragão e Arruda e Filhos'
code:
type: string
example: '737'
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: 'Nam ratione perferendis sed sunt laborum et.'
required: false
schema:
type: string
description: 'Description .'
example: 'Nam ratione perferendis sed sunt laborum et.'
-
in: query
name: categories
description: 'The uuid of an existing record in the transaction_categories table.'
example:
- molestias
required: false
schema:
type: array
description: 'The uuid of an existing record in the transaction_categories table.'
example:
- molestias
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:
- perferendis
required: false
schema:
type: array
description: 'The uuid of an existing record in the bank_accounts table.'
example:
- perferendis
items:
type: string
-
in: query
name: customers
description: 'The uuid of an existing record in the customers table.'
example:
- ea
required: false
schema:
type: array
description: 'The uuid of an existing record in the customers table.'
example:
- ea
items:
type: string
-
in: query
name: suppliers
description: 'The uuid of an existing record in the suppliers table.'
example:
- totam
required: false
schema:
type: array
description: 'The uuid of an existing record in the suppliers table.'
example:
- totam
items:
type: string
-
in: query
name: works
description: 'The uuid of an existing record in the works table.'
example:
- inventore
required: false
schema:
type: array
description: 'The uuid of an existing record in the works table.'
example:
- inventore
items:
type: string
-
in: query
name: cost_centers
description: 'The uuid of an existing record in the cost_centers table.'
example:
- numquam
required: false
schema:
type: array
description: 'The uuid of an existing record in the cost_centers table.'
example:
- numquam
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: 'Quaerat voluptatum veritatis qui molestias aspernatur mollitia molestiae enim.'
required: false
schema:
type: string
description: 'Description .'
example: 'Quaerat voluptatum veritatis qui molestias aspernatur mollitia molestiae enim.'
-
in: query
name: categories
description: 'The uuid of an existing record in the transaction_categories table.'
example:
- omnis
required: false
schema:
type: array
description: 'The uuid of an existing record in the transaction_categories table.'
example:
- omnis
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:
- aut
required: false
schema:
type: array
description: 'The uuid of an existing record in the bank_accounts table.'
example:
- aut
items:
type: string
-
in: query
name: customers
description: 'The uuid of an existing record in the customers table.'
example:
- et
required: false
schema:
type: array
description: 'The uuid of an existing record in the customers table.'
example:
- et
items:
type: string
-
in: query
name: suppliers
description: 'The uuid of an existing record in the suppliers table.'
example:
- ipsa
required: false
schema:
type: array
description: 'The uuid of an existing record in the suppliers table.'
example:
- ipsa
items:
type: string
-
in: query
name: works
description: 'The uuid of an existing record in the works table.'
example:
- voluptatem
required: false
schema:
type: array
description: 'The uuid of an existing record in the works table.'
example:
- voluptatem
items:
type: string
-
in: query
name: cost_centers
description: 'The uuid of an existing record in the cost_centers table.'
example:
- atque
required: false
schema:
type: array
description: 'The uuid of an existing record in the cost_centers table.'
example:
- atque
items:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: ee2d3e59-5b8e-3414-8afd-5bf2a45171f6
code: FC-51892312
type: saque
amount: -2968.41
description: 'Vero odit ratione ut voluptatem.'
transaction_date: '2021-02-02T03:00:00.000000Z'
transaction_category:
id: null
name: null
type: null
created_at: null
updated_at: null
-
id: 8a20d714-3c99-37af-9d35-cb708248cb5f
code: FC-06421289
type: saída
amount: -1479.82
description: 'Consequatur voluptates iusto expedita aliquam.'
transaction_date: '1983-02-15T03: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: ee2d3e59-5b8e-3414-8afd-5bf2a45171f6
code: FC-51892312
type: saque
amount: -2968.41
description: 'Vero odit ratione ut voluptatem.'
transaction_date: '2021-02-02T03:00:00.000000Z'
transaction_category:
id: null
name: null
type: null
created_at: null
updated_at: null
-
id: 8a20d714-3c99-37af-9d35-cb708248cb5f
code: FC-06421289
type: saída
amount: -1479.82
description: 'Consequatur voluptates iusto expedita aliquam.'
transaction_date: '1983-02-15T03: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: ee2d3e59-5b8e-3414-8afd-5bf2a45171f6
code:
type: string
example: FC-51892312
type:
type: string
example: saque
amount:
type: number
example: -2968.41
description:
type: string
example: 'Vero odit ratione ut voluptatem.'
transaction_date:
type: string
example: '2021-02-02T03: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: 9fda7a3d-83d8-3a1f-a81c-6b512ab33643
transaction_category_id:
type: string
description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.'
example: 3f1783d2-cb2e-3d6b-9b56-1454ecf7428b
bank_account_id:
type: string
description: 'Bank account id. The uuid of an existing record in the bank_accounts table.'
example: 19bd60a8-6b24-3523-8041-e6929f5ad9c3
nullable: true
customer_id:
type: string
description: 'Customer id. The uuid of an existing record in the customers table.'
example: f649ce8b-0050-3059-af49-38a31b8d508e
nullable: true
supplier_id:
type: string
description: 'Supplier id. The uuid of an existing record in the suppliers table.'
example: 5e0b9454-cd5a-32e4-8325-28f34c3c9570
nullable: true
work_id:
type: string
description: 'Work id. The uuid of an existing record in the works table.'
example: f365b3cf-260d-3d46-b8a2-253bb55cc885
nullable: true
cost_center_id:
type: string
description: 'Cost center id. The uuid of an existing record in the cost_centers table.'
example: 127ca393-c3ad-3e01-bffc-46d35d00ad56
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
- cost_center_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: d0dd9751-7711-3dc0-b0a4-226483ef6758
code: FC-50556747
type: pagamento
amount: -3344.85
description: 'Nemo aut aut dolorem.'
transaction_date: '1976-10-12T03: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: d0dd9751-7711-3dc0-b0a4-226483ef6758
code:
type: string
example: FC-50556747
type:
type: string
example: pagamento
amount:
type: number
example: -3344.85
description:
type: string
example: 'Nemo aut aut dolorem.'
transaction_date:
type: string
example: '1976-10-12T03: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: 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: 9c92e749-88c8-3041-9a28-cd65d04fb13d
transaction_category_id:
type: string
description: 'Transaction category id. The uuid of an existing record in the transaction_categories table.'
example: 79245e79-bca5-3ece-a696-62a09a388771
bank_account_id:
type: string
description: 'Bank account id. The uuid of an existing record in the bank_accounts table.'
example: 3edc0755-df89-3670-b92a-48766a3aca09
nullable: true
customer_id:
type: string
description: 'Customer id. The uuid of an existing record in the customers table.'
example: 9df8846a-3531-38f5-bbdc-6fbe1fc14f16
nullable: true
supplier_id:
type: string
description: 'Supplier id. The uuid of an existing record in the suppliers table.'
example: 7cf37e4d-61f0-37f8-8ae4-f2df9b9c96a6
nullable: true
work_id:
type: string
description: 'Work id. The uuid of an existing record in the works table.'
example: 5f3ad9c2-2071-37fa-b2ad-57806ce1312c
nullable: true
cost_center_id:
type: string
description: 'Cost center id. The uuid of an existing record in the cost_centers table.'
example: 7ca085f9-8479-3f19-9d20-903948943aae
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:
- cost_center_id
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: 3
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: d9878a6a-f1ff-3229-91fa-01b704734a6a
code: null
opened_by: null
opened_at: '2010-07-04T17:37:30.000000Z'
closed_by: null
closed_at: '1999-03-26T06:09:10.000000Z'
opening_balance: 7687.1
closing_balance: 7941.58
total_income: 0
total_expense: 0
total_balance: 0
status: Aberto
hasSnapshot: false
created_at: '2009-03-03T02:20:11.000000Z'
updated_at: '1974-05-15T15:40:43.000000Z'
-
id: a7b34977-1f7a-38a0-be99-a8c5f2354be5
code: null
opened_by: null
opened_at: '2005-05-10T00:11:48.000000Z'
closed_by: null
closed_at: '1991-01-05T03:26:07.000000Z'
opening_balance: 6465.63
closing_balance: 5935.37
total_income: 0
total_expense: 0
total_balance: 0
status: Fechado
hasSnapshot: false
created_at: '1977-06-16T21:33:08.000000Z'
updated_at: '1976-06-15T15:46:02.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: d9878a6a-f1ff-3229-91fa-01b704734a6a
code: null
opened_by: null
opened_at: '2010-07-04T17:37:30.000000Z'
closed_by: null
closed_at: '1999-03-26T06:09:10.000000Z'
opening_balance: 7687.1
closing_balance: 7941.58
total_income: 0
total_expense: 0
total_balance: 0
status: Aberto
hasSnapshot: false
created_at: '2009-03-03T02:20:11.000000Z'
updated_at: '1974-05-15T15:40:43.000000Z'
-
id: a7b34977-1f7a-38a0-be99-a8c5f2354be5
code: null
opened_by: null
opened_at: '2005-05-10T00:11:48.000000Z'
closed_by: null
closed_at: '1991-01-05T03:26:07.000000Z'
opening_balance: 6465.63
closing_balance: 5935.37
total_income: 0
total_expense: 0
total_balance: 0
status: Fechado
hasSnapshot: false
created_at: '1977-06-16T21:33:08.000000Z'
updated_at: '1976-06-15T15:46:02.000000Z'
items:
type: object
properties:
id:
type: string
example: d9878a6a-f1ff-3229-91fa-01b704734a6a
code:
type: string
example: null
nullable: true
opened_by:
type: string
example: null
nullable: true
opened_at:
type: string
example: '2010-07-04T17:37:30.000000Z'
closed_by:
type: string
example: null
nullable: true
closed_at:
type: string
example: '1999-03-26T06:09:10.000000Z'
opening_balance:
type: number
example: 7687.1
closing_balance:
type: number
example: 7941.58
total_income:
type: integer
example: 0
total_expense:
type: integer
example: 0
total_balance:
type: integer
example: 0
status:
type: string
example: Aberto
hasSnapshot:
type: boolean
example: false
created_at:
type: string
example: '2009-03-03T02:20:11.000000Z'
updated_at:
type: string
example: '1974-05-15T15:40:43.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: 16c0beed-a080-3a61-9139-0689a21fa84a
code: null
opened_by: null
opened_at: '1987-09-27T09:04:16.000000Z'
closed_by: null
closed_at: '1981-12-16T03:22:53.000000Z'
opening_balance: 8386.96
closing_balance: 2526.43
total_income: 0
total_expense: 0
total_balance: 0
status: Aberto
hasSnapshot: false
created_at: '2020-12-30T10:24:23.000000Z'
updated_at: '2014-03-03T10:45:36.000000Z'
properties:
data:
type: object
properties:
id:
type: string
example: 16c0beed-a080-3a61-9139-0689a21fa84a
code:
type: string
example: null
nullable: true
opened_by:
type: string
example: null
nullable: true
opened_at:
type: string
example: '1987-09-27T09:04:16.000000Z'
closed_by:
type: string
example: null
nullable: true
closed_at:
type: string
example: '1981-12-16T03:22:53.000000Z'
opening_balance:
type: number
example: 8386.96
closing_balance:
type: number
example: 2526.43
total_income:
type: integer
example: 0
total_expense:
type: integer
example: 0
total_balance:
type: integer
example: 0
status:
type: string
example: Aberto
hasSnapshot:
type: boolean
example: false
created_at:
type: string
example: '2020-12-30T10:24:23.000000Z'
updated_at:
type: string
example: '2014-03-03T10:45:36.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: f0408cf7-6437-3f22-b20c-c0c14362edde
required: true
schema:
type: string
'/api/cash-sessions/{uuid}/account-snapshot':
get:
summary: 'Cash session account snapshot'
operationId: cashSessionAccountSnapshot
description: 'List the account balance snapshot captured when the cash session was closed'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Cash Session'
parameters:
-
in: path
name: uuid
description: ''
example: 4971d795-b828-33da-a7b3-d0461c7a762f
required: true
schema:
type: integer
'/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: 043aeaf4-bc15-3943-b432-44c3ef263800
code: null
opened_by: null
opened_at: '2018-02-05T17:59:00.000000Z'
closed_by: null
closed_at: '2010-11-02T08:00:55.000000Z'
opening_balance: 3699.16
closing_balance: 3264.13
total_income: 0
total_expense: 0
total_balance: 0
status: Aberto
hasSnapshot: false
created_at: '1995-10-27T14:50:13.000000Z'
updated_at: '2011-09-18T16:51:43.000000Z'
properties:
data:
type: object
properties:
id:
type: string
example: 043aeaf4-bc15-3943-b432-44c3ef263800
code:
type: string
example: null
nullable: true
opened_by:
type: string
example: null
nullable: true
opened_at:
type: string
example: '2018-02-05T17:59:00.000000Z'
closed_by:
type: string
example: null
nullable: true
closed_at:
type: string
example: '2010-11-02T08:00:55.000000Z'
opening_balance:
type: number
example: 3699.16
closing_balance:
type: number
example: 3264.13
total_income:
type: integer
example: 0
total_expense:
type: integer
example: 0
total_balance:
type: integer
example: 0
status:
type: string
example: Aberto
hasSnapshot:
type: boolean
example: false
created_at:
type: string
example: '1995-10-27T14:50:13.000000Z'
updated_at:
type: string
example: '2011-09-18T16:51:43.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: 44ffcdf9-f7b7-3649-bf2a-07a4b75ccf70
required: true
schema:
type: integer
/api/tutorials/sectors:
get:
summary: 'Setores da central'
operationId: setoresDaCentral
description: 'Setores da pessoa que tenham ao menos um tutorial visível, com a contagem'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: eeb5a27f-7d34-37e5-9b4d-729c0902c5b6
name: 'voluptate aperiam'
slug: null
abbreviation: null
tutorials_count: 0
-
id: 1d6e85a3-80aa-3145-adfd-5382e40755ff
name: 'maiores qui'
slug: null
abbreviation: null
tutorials_count: 0
properties:
data:
type: array
example:
-
id: eeb5a27f-7d34-37e5-9b4d-729c0902c5b6
name: 'voluptate aperiam'
slug: null
abbreviation: null
tutorials_count: 0
-
id: 1d6e85a3-80aa-3145-adfd-5382e40755ff
name: 'maiores qui'
slug: null
abbreviation: null
tutorials_count: 0
items:
type: object
properties:
id:
type: string
example: eeb5a27f-7d34-37e5-9b4d-729c0902c5b6
name:
type: string
example: 'voluptate aperiam'
slug:
type: string
example: null
nullable: true
abbreviation:
type: string
example: null
nullable: true
tutorials_count:
type: integer
example: 0
tags:
- 'Central de Tutoriais'
/api/tutorials/modules:
get:
summary: 'Módulos da central'
operationId: mdulosDaCentral
description: 'Módulos ativos com tutoriais visíveis para a pessoa; aceita filtro de setor'
parameters:
-
in: query
name: sector_id
description: ''
example: null
required: false
schema:
type: array
description: ''
example: null
items:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 6eb4e111-a9a5-3857-9dff-59c1f50da98c
name: 'Unde nihil'
slug: unde-nihil-158238
description: 'Dicta autem sit in velit nihil qui vel asperiores.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
-
id: 07446c04-75dc-36c4-8839-edeaa897bca0
name: 'Saepe est'
slug: saepe-est-297535
description: 'Quia consequatur sequi nisi deleniti eaque perferendis omnis.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
properties:
data:
type: array
example:
-
id: 6eb4e111-a9a5-3857-9dff-59c1f50da98c
name: 'Unde nihil'
slug: unde-nihil-158238
description: 'Dicta autem sit in velit nihil qui vel asperiores.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
-
id: 07446c04-75dc-36c4-8839-edeaa897bca0
name: 'Saepe est'
slug: saepe-est-297535
description: 'Quia consequatur sequi nisi deleniti eaque perferendis omnis.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 6eb4e111-a9a5-3857-9dff-59c1f50da98c
name:
type: string
example: 'Unde nihil'
slug:
type: string
example: unde-nihil-158238
description:
type: string
example: 'Dicta autem sit in velit nihil qui vel asperiores.'
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
is_active:
type: boolean
example: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Central de Tutoriais'
/api/tutorials:
get:
summary: 'Listar tutoriais'
operationId: listarTutoriais
description: 'Lista paginada dos tutoriais visíveis, com filtros de módulo, setor e busca por texto'
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: 'Busca por título ou descrição.'
example: 'ordem de serviço'
required: false
schema:
type: string
description: 'Busca por título ou descrição.'
example: 'ordem de serviço'
nullable: true
-
in: query
name: module_id
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the tutorial_modules table.'
example:
- df0654f9-79cc-3ddb-afe1-d96e0b83af3a
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the tutorial_modules table.'
example:
- df0654f9-79cc-3ddb-afe1-d96e0b83af3a
items:
type: string
-
in: query
name: sector_id
description: ''
example: null
required: false
schema:
type: array
description: ''
example: null
items:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 143229c2-7b91-38a1-8238-005afe5e624e
title: 'Unde in quaerat magnam'
description: 'Voluptate similique optio eos provident sit quia.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-fb42-4fd2-bc6a-a9ccb83c3de8
name: 'Quod incidunt'
slug: quod-incidunt-684191
icon: null
color: null
created_at: null
updated_at: null
-
id: 727498bb-56a1-33ed-be86-203d90ae04c3
title: 'Nemo dolorem et voluptatem'
description: 'Nemo voluptates ut et ea.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-fd60-47b9-aa03-1f7a77ed1068
name: 'Cumque repudiandae'
slug: cumque-repudiandae-775793
icon: null
color: 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: 143229c2-7b91-38a1-8238-005afe5e624e
title: 'Unde in quaerat magnam'
description: 'Voluptate similique optio eos provident sit quia.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-fb42-4fd2-bc6a-a9ccb83c3de8
name: 'Quod incidunt'
slug: quod-incidunt-684191
icon: null
color: null
created_at: null
updated_at: null
-
id: 727498bb-56a1-33ed-be86-203d90ae04c3
title: 'Nemo dolorem et voluptatem'
description: 'Nemo voluptates ut et ea.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-fd60-47b9-aa03-1f7a77ed1068
name: 'Cumque repudiandae'
slug: cumque-repudiandae-775793
icon: null
color: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 143229c2-7b91-38a1-8238-005afe5e624e
title:
type: string
example: 'Unde in quaerat magnam'
description:
type: string
example: 'Voluptate similique optio eos provident sit quia.'
cover_url:
type: string
example: null
nullable: true
status:
type: string
example: draft
published_at:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
module:
type: object
properties:
id:
type: string
example: a3296004-fb42-4fd2-bc6a-a9ccb83c3de8
name:
type: string
example: 'Quod incidunt'
slug:
type: string
example: quod-incidunt-684191
icon:
type: string
example: null
nullable: true
color:
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:
- 'Central de Tutoriais'
'/api/tutorials/{id}':
get:
summary: 'Detalhe do tutorial'
operationId: detalheDoTutorial
description: 'Tutorial com os itens em ordem. Fora da visibilidade, responde 404.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 9733414e-32bd-33a0-a9dd-87bc8a244f5c
title: 'Sit nisi eos omnis'
description: 'Sint dolores impedit quasi.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296005-041c-44bc-86ad-829822016d3f
name: 'Est recusandae'
slug: est-recusandae-566158
icon: null
color: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 9733414e-32bd-33a0-a9dd-87bc8a244f5c
title:
type: string
example: 'Sit nisi eos omnis'
description:
type: string
example: 'Sint dolores impedit quasi.'
cover_url:
type: string
example: null
nullable: true
status:
type: string
example: draft
published_at:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
module:
type: object
properties:
id:
type: string
example: a3296005-041c-44bc-86ad-829822016d3f
name:
type: string
example: 'Est recusandae'
slug:
type: string
example: est-recusandae-566158
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Central de Tutoriais'
parameters:
-
in: path
name: id
description: 'The ID of the tutorial.'
example: 1
required: true
schema:
type: integer
-
in: path
name: tutorial
description: 'UUID do tutorial'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string
'/api/tutorial-items/{tutorialItem}/url':
get:
summary: 'URL do item'
operationId: uRLDoItem
description: 'Devolve a URL assinada de curta validade para o arquivo no S3, ou o link externo do item. O caminho bruto do S3 nunca é exposto.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
type: string
title: string
url: string
expires_in: integer
mime_type: string
size_bytes: integer
properties:
type:
type: string
example: string
title:
type: string
example: string
url:
type: string
example: string
expires_in:
type: string
example: integer
mime_type:
type: string
example: string
size_bytes:
type: string
example: integer
tags:
- 'Central de Tutoriais'
parameters:
-
in: path
name: tutorialItem
description: 'UUID do item'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string
/api/contracts:
get:
summary: 'List contracts'
operationId: listContracts
description: 'List all work contracts'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 56e93eb7-b29c-34be-9456-74c7736ea58b
number: 134/2026
started_at: '2026-11-06'
deadline_at: '2027-11-06'
work:
id: a3295ff6-ad2e-4105-894f-704d9cd4179e
name: 'Dr. Malu Gabriela Deverso'
created_at: null
updated_at: null
-
id: da9370f5-5f42-3b35-8914-6ecabf59e32c
number: 309/2026
started_at: '2026-11-06'
deadline_at: '2027-11-06'
work:
id: a3295ff6-b64f-4df4-aede-426f3ed0b8e5
name: 'Srta. Mari Vasques Corona Jr.'
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: 56e93eb7-b29c-34be-9456-74c7736ea58b
number: 134/2026
started_at: '2026-11-06'
deadline_at: '2027-11-06'
work:
id: a3295ff6-ad2e-4105-894f-704d9cd4179e
name: 'Dr. Malu Gabriela Deverso'
created_at: null
updated_at: null
-
id: da9370f5-5f42-3b35-8914-6ecabf59e32c
number: 309/2026
started_at: '2026-11-06'
deadline_at: '2027-11-06'
work:
id: a3295ff6-b64f-4df4-aede-426f3ed0b8e5
name: 'Srta. Mari Vasques Corona Jr.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 56e93eb7-b29c-34be-9456-74c7736ea58b
number:
type: string
example: 134/2026
started_at:
type: string
example: '2026-11-06'
deadline_at:
type: string
example: '2027-11-06'
work:
type: object
properties:
id:
type: string
example: a3295ff6-ad2e-4105-894f-704d9cd4179e
name:
type: string
example: 'Dr. Malu Gabriela Deverso'
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:
- Contracts
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
work_id:
type: string
description: 'Obra. The uuid of an existing record in the works table.'
example: 0a0f9d9c-3d84-3e28-bfd0-c40162116b46
nullable: true
post:
summary: 'Create contract'
operationId: createContract
description: 'Create a new contract for a work'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- Contracts
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
work_id:
type: string
description: 'Obra. The uuid of an existing record in the works table.'
example: 13b97750-7e58-322f-bb46-fceff44b7c66
number:
type: string
description: 'Número do contrato. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Number'
started_at:
type: string
description: 'Data de início. O campo value deve ser uma data válida.'
example: 'Example Started at'
nullable: true
deadline_at:
type: string
description: 'Prazo. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a started_at.'
example: 'Example Deadline at'
nullable: true
required:
- work_id
- number
'/api/contracts/{id}':
get:
summary: 'Show contract'
operationId: showContract
description: 'Show a work contract'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: ba58d8ed-84fe-3444-b32d-624f678f3d29
number: 722/2026
started_at: '2026-11-06'
deadline_at: '2027-11-06'
work:
id: a3295ff6-c41f-401c-b992-272fe4eea64a
name: 'Sr. Luciano Robson Delvalle'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: ba58d8ed-84fe-3444-b32d-624f678f3d29
number:
type: string
example: 722/2026
started_at:
type: string
example: '2026-11-06'
deadline_at:
type: string
example: '2027-11-06'
work:
type: object
properties:
id:
type: string
example: a3295ff6-c41f-401c-b992-272fe4eea64a
name:
type: string
example: 'Sr. Luciano Robson Delvalle'
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- Contracts
put:
summary: 'Update contract'
operationId: updateContract
description: 'Update a work contract'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- Contracts
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
number:
type: string
description: 'Número do contrato. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Number'
started_at:
type: string
description: 'Data de início. O campo value deve ser uma data válida.'
example: 'Example Started at'
nullable: true
deadline_at:
type: string
description: 'Prazo. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a started_at.'
example: 'Example Deadline at'
nullable: true
parameters:
-
in: path
name: id
description: 'The ID of the contract.'
example: 9
required: true
schema:
type: integer
-
in: path
name: contract
description: 'Contract UUID'
example: nihil
required: true
schema:
type: string
'/api/contracts/{contract}':
delete:
summary: 'Delete contract'
operationId: deleteContract
description: 'Delete a work contract'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- Contracts
parameters:
-
in: path
name: contract
description: 'Contract UUID'
example: ducimus
required: true
schema:
type: string
/api/cost-centers/next-code:
get:
summary: 'Suggest next code'
operationId: suggestNextCode
description: 'Próximo código livre sob o pai informado. O código é sugestão e pode ser alterado antes de salvar.'
parameters:
-
in: query
name: parent_id
description: 'UUID do centro de custo pai. Omitido, sugere no primeiro nível.'
example: ipsam
required: false
schema:
type: string
description: 'UUID do centro de custo pai. Omitido, sugere no primeiro nível.'
example: ipsam
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
code: '001.002'
properties:
code:
type: string
example: '001.002'
tags:
- 'Cost Centers'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
parent_id:
type: string
description: 'The uuid of an existing record in the cost_centers table.'
example: molestiae
nullable: true
/api/cost-centers/requirement-config:
get:
summary: 'Cost center requirement'
operationId: costCenterRequirement
description: 'Data a partir da qual o centro de custo é obrigatório em lançamentos novos. A tela usa isso para marcar o campo como obrigatório sem precisar tentar salvar.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
required_from: '2026-11-03'
required_now: true
properties:
required_from:
type: string
example: '2026-11-03'
required_now:
type: boolean
example: true
tags:
- 'Cost Centers'
put:
summary: 'Update cost center requirement'
operationId: updateCostCenterRequirement
description: 'Ajusta a data de corte. Enviar nulo desliga a obrigatoriedade.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
required_from: '2026-11-03'
required_now: true
properties:
required_from:
type: string
example: '2026-11-03'
required_now:
type: boolean
example: true
tags:
- 'Cost Centers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
required_from:
type: string
description: 'Data no formato Y-m-d, ou nulo para desligar'
example: '2026-11-03'
required:
- required_from
/api/cost-centers/stock-config:
get:
summary: 'Stock cost center'
operationId: stockCostCenter
description: 'Centro de custo que recebe a compra de material. A conta a pagar gerada por NF-e de produto nasce nele, porque o custo do material chega à obra pela movimentação de estoque.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
cost_center:
id: uuid
code: '003.001'
name: 'Estoque central'
properties:
cost_center:
type: object
properties:
id:
type: string
example: uuid
code:
type: string
example: '003.001'
name:
type: string
example: 'Estoque central'
tags:
- 'Cost Centers'
put:
summary: 'Update stock cost center'
operationId: updateStockCostCenter
description: 'Aponta a configuração para outro centro. Nulo desliga: a conta da nota passa a nascer sem centro, para ser classificada na conferência.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
cost_center:
id: uuid
code: '003.001'
name: 'Estoque central'
properties:
cost_center:
type: object
properties:
id:
type: string
example: uuid
code:
type: string
example: '003.001'
name:
type: string
example: 'Estoque central'
tags:
- 'Cost Centers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
cost_center_id:
type: string
description: 'UUID do centro de custo, ou nulo'
example: omnis
required:
- cost_center_id
/api/cost-centers:
get:
summary: 'List cost centers'
operationId: listCostCenters
description: 'Lista plana ordenada por código, sem paginação. Cada item traz nível e caminho completo, para o cliente montar a árvore em memória.'
parameters:
-
in: query
name: q
description: 'Busca por parte do nome ou do código.'
example: vila
required: false
schema:
type: string
description: 'Busca por parte do nome ou do código.'
example: vila
nullable: true
-
in: query
name: active
description: 'Filtra por situação. Omitido, traz ativos e inativos.'
example: true
required: false
schema:
type: boolean
description: 'Filtra por situação. Omitido, traz ativos e inativos.'
example: true
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 0163de52-0f47-39a2-8f0c-cbc10af93972
code: '306'
name: 'aut odit'
level: 1
path: null
is_active: true
selectable: false
created_at: null
updated_at: null
-
id: cf91e2fe-a8fa-3708-8372-34801b2a0071
code: '493'
name: 'itaque sint'
level: 1
path: null
is_active: true
selectable: false
created_at: null
updated_at: null
properties:
data:
type: array
example:
-
id: 0163de52-0f47-39a2-8f0c-cbc10af93972
code: '306'
name: 'aut odit'
level: 1
path: null
is_active: true
selectable: false
created_at: null
updated_at: null
-
id: cf91e2fe-a8fa-3708-8372-34801b2a0071
code: '493'
name: 'itaque sint'
level: 1
path: null
is_active: true
selectable: false
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 0163de52-0f47-39a2-8f0c-cbc10af93972
code:
type: string
example: '306'
name:
type: string
example: 'aut odit'
level:
type: integer
example: 1
path:
type: string
example: null
nullable: true
is_active:
type: boolean
example: true
selectable:
type: boolean
example: false
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Cost Centers'
post:
summary: 'Create cost center'
operationId: createCostCenter
description: 'Cadastra um centro de custo'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- 'Cost Centers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Código. Must match the regex /^\d{3}(\.\d{3}){0,2}$/.'
example: 'Example Code'
name:
type: string
description: 'Nome. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Name'
parent_id:
type: string
description: 'Centro de custo pai. The uuid of an existing record in the cost_centers table.'
example: 6927a136-b3e0-3b9b-914f-69130594bf3a
nullable: true
work_id:
type: string
description: 'Obra. The uuid of an existing record in the works table.'
example: 3a015543-8199-30ef-bad2-7cf8f0397d76
nullable: true
is_active:
type: boolean
description: Situação.
example: true
required:
- code
- name
'/api/cost-centers/{costCenter}':
get:
summary: 'Show cost center'
operationId: showCostCenter
description: 'Detalhe de um centro de custo'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 300209f5-0942-3145-84a5-17120f4b3da6
code: '370'
name: 'eos molestiae'
level: 1
path: null
is_active: true
selectable: false
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 300209f5-0942-3145-84a5-17120f4b3da6
code:
type: string
example: '370'
name:
type: string
example: 'eos molestiae'
level:
type: integer
example: 1
path:
type: string
example: null
nullable: true
is_active:
type: boolean
example: true
selectable:
type: boolean
example: false
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Cost Centers'
put:
summary: 'Update cost center'
operationId: updateCostCenter
description: 'Atualiza um centro de custo, inclusive a situação (inativar e reativar)'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- 'Cost Centers'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Código. Must match the regex /^\d{3}(\.\d{3}){0,2}$/.'
example: 'Example Code'
name:
type: string
description: 'Nome. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Name'
parent_id:
type: string
description: 'Centro de custo pai. The uuid of an existing record in the cost_centers table.'
example: 63013f2a-f14a-34cd-bfaf-b35f0b7fde9f
nullable: true
work_id:
type: string
description: 'Obra. The uuid of an existing record in the works table.'
example: 90195977-7fef-35cb-973e-170e0c26e38d
nullable: true
is_active:
type: boolean
description: Situação.
example: true
delete:
summary: 'Delete cost center'
operationId: deleteCostCenter
description: 'Exclui um centro de custo. Só é permitido quando ele não tem centros abaixo nem lançamentos.'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Cost Centers'
parameters:
-
in: path
name: costCenter
description: 'Cost center UUID'
example: sit
required: true
schema:
type: string
/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: 56938128-bb94-30cc-bb69-c65280ae9830
name: 'Matias Leon Lutero'
email: montenegro.danilo@example.net
phone: '(47) 3159-4164'
document: 431.304.278-48
type: pf
responsible: 'Srta. Kamila Meireles Ferraz Jr.'
image:
id: null
url: null
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
documents_count: 0
-
id: 2a07d594-2ada-323c-9b5e-eed382edd578
name: 'Ellen Cervantes'
email: gbranco@example.net
phone: '(11) 2507-4761'
document: 438.680.406-41
type: pf
responsible: 'Nádia Violeta Lourenço'
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: 56938128-bb94-30cc-bb69-c65280ae9830
name: 'Matias Leon Lutero'
email: montenegro.danilo@example.net
phone: '(47) 3159-4164'
document: 431.304.278-48
type: pf
responsible: 'Srta. Kamila Meireles Ferraz Jr.'
image:
id: null
url: null
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
documents_count: 0
-
id: 2a07d594-2ada-323c-9b5e-eed382edd578
name: 'Ellen Cervantes'
email: gbranco@example.net
phone: '(11) 2507-4761'
document: 438.680.406-41
type: pf
responsible: 'Nádia Violeta Lourenço'
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: 56938128-bb94-30cc-bb69-c65280ae9830
name:
type: string
example: 'Matias Leon Lutero'
email:
type: string
example: montenegro.danilo@example.net
phone:
type: string
example: '(47) 3159-4164'
document:
type: string
example: 431.304.278-48
type:
type: string
example: pf
responsible:
type: string
example: 'Srta. Kamila Meireles Ferraz 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
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: 0b5cbd76-2a8c-3501-b8c0-566fe9b69297
name: 'Bernardo Edilson Ferreira Neto'
email: claudio.benites@example.com
phone: '(42) 3386-3004'
document: 955.120.995-82
type: pj
responsible: 'Dr. Nádia Mônica de Freitas Jr.'
image:
id: null
url: null
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
documents_count: 0
properties:
data:
type: object
properties:
id:
type: string
example: 0b5cbd76-2a8c-3501-b8c0-566fe9b69297
name:
type: string
example: 'Bernardo Edilson Ferreira Neto'
email:
type: string
example: claudio.benites@example.com
phone:
type: string
example: '(42) 3386-3004'
document:
type: string
example: 955.120.995-82
type:
type: string
example: pj
responsible:
type: string
example: 'Dr. Nádia Mônica de Freitas 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
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: 4
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/daily-logs:
get:
summary: 'List daily logs'
operationId: listDailyLogs
description: 'List all daily work reports (RDO)'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: caf2975c-c06b-36c9-b475-89d63cc0abb7
code: RDO-06-11-26
report_number: 1
date: '2026-11-06'
status:
id: a3295ff7-40db-4a97-a47c-0b67a884be92
slug: null
name: null
abbreviation: voluptates
color: '#f6f1a5'
text_color: '#2b7257'
work:
id: a3295ff7-37e3-4a76-ad0a-56541acdedb2
name: 'Sr. Marco Amaral Pedrosa'
started_at: '1981-06-02 21:39:33'
filled_by:
id: a3295ff7-3d63-4beb-ab85-2816c12692cd
name: 'Saul Watsica'
contract_number: 940/2026
deadline_at: '2027-11-06'
technical_responsible:
name: null
certification: null
crea: null
activities: []
occurrences: null
next_day_forecast: null
finalized_at: null
has_signed_document: false
content_hash: null
gov_br_validation_url: null
created_at: null
updated_at: null
-
id: 519ca545-6c30-3c7c-a116-a335c5aa3400
code: RDO-06-11-26
report_number: 1
date: '2026-11-06'
status:
id: a3295ff7-4b0c-406a-b731-4cf9d7db0a76
slug: null
name: null
abbreviation: nulla
color: '#db669d'
text_color: '#b33a09'
work:
id: a3295ff7-44e8-48e8-9374-7fcef62adacd
name: 'Ester Perez Sobrinho'
started_at: '1995-06-05 06:18:07'
filled_by:
id: a3295ff7-4941-4c30-9d6b-57223d7bd9ff
name: 'Prof. Alphonso Spinka DVM'
contract_number: 409/2026
deadline_at: '2027-11-06'
technical_responsible:
name: null
certification: null
crea: null
activities: []
occurrences: null
next_day_forecast: null
finalized_at: null
has_signed_document: false
content_hash: null
gov_br_validation_url: 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: caf2975c-c06b-36c9-b475-89d63cc0abb7
code: RDO-06-11-26
report_number: 1
date: '2026-11-06'
status:
id: a3295ff7-40db-4a97-a47c-0b67a884be92
slug: null
name: null
abbreviation: voluptates
color: '#f6f1a5'
text_color: '#2b7257'
work:
id: a3295ff7-37e3-4a76-ad0a-56541acdedb2
name: 'Sr. Marco Amaral Pedrosa'
started_at: '1981-06-02 21:39:33'
filled_by:
id: a3295ff7-3d63-4beb-ab85-2816c12692cd
name: 'Saul Watsica'
contract_number: 940/2026
deadline_at: '2027-11-06'
technical_responsible:
name: null
certification: null
crea: null
activities: []
occurrences: null
next_day_forecast: null
finalized_at: null
has_signed_document: false
content_hash: null
gov_br_validation_url: null
created_at: null
updated_at: null
-
id: 519ca545-6c30-3c7c-a116-a335c5aa3400
code: RDO-06-11-26
report_number: 1
date: '2026-11-06'
status:
id: a3295ff7-4b0c-406a-b731-4cf9d7db0a76
slug: null
name: null
abbreviation: nulla
color: '#db669d'
text_color: '#b33a09'
work:
id: a3295ff7-44e8-48e8-9374-7fcef62adacd
name: 'Ester Perez Sobrinho'
started_at: '1995-06-05 06:18:07'
filled_by:
id: a3295ff7-4941-4c30-9d6b-57223d7bd9ff
name: 'Prof. Alphonso Spinka DVM'
contract_number: 409/2026
deadline_at: '2027-11-06'
technical_responsible:
name: null
certification: null
crea: null
activities: []
occurrences: null
next_day_forecast: null
finalized_at: null
has_signed_document: false
content_hash: null
gov_br_validation_url: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: caf2975c-c06b-36c9-b475-89d63cc0abb7
code:
type: string
example: RDO-06-11-26
report_number:
type: integer
example: 1
date:
type: string
example: '2026-11-06'
status:
type: object
properties:
id:
type: string
example: a3295ff7-40db-4a97-a47c-0b67a884be92
slug:
type: string
example: null
nullable: true
name:
type: string
example: null
nullable: true
abbreviation:
type: string
example: voluptates
color:
type: string
example: '#f6f1a5'
text_color:
type: string
example: '#2b7257'
work:
type: object
properties:
id:
type: string
example: a3295ff7-37e3-4a76-ad0a-56541acdedb2
name:
type: string
example: 'Sr. Marco Amaral Pedrosa'
started_at:
type: string
example: '1981-06-02 21:39:33'
filled_by:
type: object
properties:
id:
type: string
example: a3295ff7-3d63-4beb-ab85-2816c12692cd
name:
type: string
example: 'Saul Watsica'
contract_number:
type: string
example: 940/2026
deadline_at:
type: string
example: '2027-11-06'
technical_responsible:
type: object
properties:
name:
type: string
example: null
nullable: true
certification:
type: string
example: null
nullable: true
crea:
type: string
example: null
nullable: true
activities:
type: array
example: []
occurrences:
type: string
example: null
nullable: true
next_day_forecast:
type: string
example: null
nullable: true
finalized_at:
type: string
example: null
nullable: true
has_signed_document:
type: boolean
example: false
content_hash:
type: string
example: null
nullable: true
gov_br_validation_url:
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:
- 'Daily Logs (RDO)'
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: 4b36afdb-aea8-3546-8750-46396cb0d43f
nullable: true
contract_id:
type: string
description: 'Contrato. The uuid of an existing record in the contracts table.'
example: 7f32d83f-9dc9-3c54-a87e-c413a2d204b5
nullable: true
status_id:
type: string
description: 'Status. The uuid of an existing record in the statuses table.'
example: a207375b-bf72-3b0f-8cdb-3d8cc627bfcd
nullable: true
filled_by:
type: string
description: 'Preenchido por. The uuid of an existing record in the users table.'
example: 5b279b15-eafe-3b9e-8ec3-ff68ae947f52
nullable: true
responsible_id:
type: string
description: 'Responsável. The uuid of an existing record in the users table.'
example: a4da5c32-3367-3059-a8e9-927f3ea3090a
nullable: true
date_from:
type: string
description: 'Data inicial. O campo value deve ser uma data válida.'
example: '2024-01-01'
nullable: true
date_to:
type: string
description: 'Data final. O campo value deve ser uma data válida.'
example: '2024-01-01'
nullable: true
post:
summary: 'Create daily log'
operationId: createDailyLog
description: 'Open a new daily work report (RDO) for a work'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- 'Daily Logs (RDO)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
contract_id:
type: string
description: 'Contrato. The uuid of an existing record in the contracts table.'
example: 'Example Contract id'
date:
type: string
description: 'Data do RDO. O campo value deve ser uma data válida.'
example: '2024-01-01'
status_id:
type: string
description: 'Status. The uuid of an existing record in the statuses table.'
example: e81d2732-4b20-3ff9-82bf-9bec25b3ca4c
nullable: true
required:
- contract_id
- date
/api/daily-logs/pending-days:
get:
summary: 'Pending RDO days'
operationId: pendingRDODays
description: 'List the days in a period that have no RDO for a given work'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
- '2026-07-01'
- '2026-07-02'
properties:
data:
type: array
example:
- '2026-07-01'
- '2026-07-02'
items:
type: string
tags:
- 'Daily Logs (RDO)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
contract_id:
type: string
description: 'Contrato. The uuid of an existing record in the contracts table.'
example: 'Example Contract id'
date_from:
type: string
description: 'Data inicial. O campo value deve ser uma data válida.'
example: '2024-01-01'
date_to:
type: string
description: 'Data final. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a date_from. O campo value deve ser uma data anterior ou igual a 9999-12-31.'
example: '2024-01-01'
required:
- contract_id
- date_from
- date_to
'/api/daily-logs/{dailyLog}':
get:
summary: 'Show daily log'
operationId: showDailyLog
description: 'Show a daily work report (RDO)'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 63f19bd4-1a78-3e33-9ae7-9fb57b17e9dd
code: RDO-06-11-26
report_number: 1
date: '2026-11-06'
status:
id: a3295ff7-6552-4095-8de3-d9988f320e83
slug: null
name: null
abbreviation: voluptatem
color: '#23439f'
text_color: '#c3fa65'
work:
id: a3295ff7-587f-4d9a-abf4-a05bcb05a374
name: 'Davi Maurício Maldonado Jr.'
started_at: '2021-07-21 02:58:25'
filled_by:
id: a3295ff7-6363-4bf8-b5f5-8eb3218718d0
name: 'Prof. Eulalia Gaylord IV'
contract_number: 895/2026
deadline_at: '2027-11-06'
technical_responsible:
name: null
certification: null
crea: null
activities: []
occurrences: null
next_day_forecast: null
finalized_at: null
has_signed_document: false
content_hash: null
gov_br_validation_url: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 63f19bd4-1a78-3e33-9ae7-9fb57b17e9dd
code:
type: string
example: RDO-06-11-26
report_number:
type: integer
example: 1
date:
type: string
example: '2026-11-06'
status:
type: object
properties:
id:
type: string
example: a3295ff7-6552-4095-8de3-d9988f320e83
slug:
type: string
example: null
nullable: true
name:
type: string
example: null
nullable: true
abbreviation:
type: string
example: voluptatem
color:
type: string
example: '#23439f'
text_color:
type: string
example: '#c3fa65'
work:
type: object
properties:
id:
type: string
example: a3295ff7-587f-4d9a-abf4-a05bcb05a374
name:
type: string
example: 'Davi Maurício Maldonado Jr.'
started_at:
type: string
example: '2021-07-21 02:58:25'
filled_by:
type: object
properties:
id:
type: string
example: a3295ff7-6363-4bf8-b5f5-8eb3218718d0
name:
type: string
example: 'Prof. Eulalia Gaylord IV'
contract_number:
type: string
example: 895/2026
deadline_at:
type: string
example: '2027-11-06'
technical_responsible:
type: object
properties:
name:
type: string
example: null
nullable: true
certification:
type: string
example: null
nullable: true
crea:
type: string
example: null
nullable: true
activities:
type: array
example: []
occurrences:
type: string
example: null
nullable: true
next_day_forecast:
type: string
example: null
nullable: true
finalized_at:
type: string
example: null
nullable: true
has_signed_document:
type: boolean
example: false
content_hash:
type: string
example: null
nullable: true
gov_br_validation_url:
type: string
example: null
nullable: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Daily Logs (RDO)'
patch:
summary: 'Update daily log'
operationId: updateDailyLog
description: 'Update a draft RDO: weather, team, activities, occurrences and next-day forecast'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- 'Daily Logs (RDO)'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
activities:
type: string
description: 'Atividades executadas.'
example: 'Example Activities'
nullable: true
occurrences:
type: string
description: Ocorrências.
example: 'Example Occurrences'
nullable: true
next_day_forecast:
type: string
description: 'Previsão do dia seguinte.'
example: 'Example Next day forecast'
nullable: true
weather:
type: array
description: 'Registro do tempo.'
example:
- null
- null
items:
type: object
properties:
shift:
type: string
description: 'Turno. This field is required when weather is present.'
example: 'Example Weather * shift'
enum:
- manha
- tarde
- noite
weather:
type: string
description: 'Clima. This field is required when weather is present.'
example: 'Example Weather * weather'
enum:
- sol
- sol_nuvens
- chuva
- tempestade
teams:
type: array
description: 'Composição da equipe.'
example:
- null
- null
items:
type: object
properties:
employee_role_id:
type: string
description: 'Função. This field is required when teams is present. The uuid of an existing record in the employee_roles table.'
example: f5749054-223c-4687-8ef7-2a6e2aa696f3
quantity:
type: integer
description: 'Quantidade. This field is required when teams is present. O campo value deve ser pelo menos 1.'
example: 1
delete:
summary: 'Delete daily log'
operationId: deleteDailyLog
description: 'Delete a draft daily work report (RDO)'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Daily Logs (RDO)'
parameters:
-
in: path
name: dailyLog
description: 'Daily Log UUID'
example: quidem
required: true
schema:
type: string
'/api/daily-logs/{dailyLog}/finalize':
post:
summary: 'Finalize daily log'
operationId: finalizeDailyLog
description: 'Validate, stamp and lock a draft RDO (Rascunho → Finalizado)'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- 'Daily Logs (RDO)'
parameters:
-
in: path
name: dailyLog
description: 'Daily Log UUID'
example: omnis
required: true
schema:
type: string
'/api/daily-logs/{dailyLog}/signed-document':
post:
summary: 'Attach gov.br signed document'
operationId: attachGovbrSignedDocument
description: 'Attach the gov.br-signed PDF and validation link to a finalized RDO'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- 'Daily Logs (RDO)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
path:
type: string
description: 'Arquivo assinado.'
example: 'Example Path'
name:
type: string
description: 'Nome do arquivo.'
example: 'Example Name'
nullable: true
size:
type: string
description: Size.
example: 'Example Size'
nullable: true
extension:
type: string
description: Extension.
example: 'Example Extension'
nullable: true
gov_br_validation_url:
type: string
description: 'Link de validação (gov.br). Must be a valid URL. Must match the regex /^https:\/\/([a-z0-9-]+\.)*gov\.br(\/|$)/i. O campo value não pode ser superior a 2048 caracteres.'
example: 'https://example.com'
nullable: true
required:
- path
parameters:
-
in: path
name: dailyLog
description: 'Daily Log UUID'
example: temporibus
required: true
schema:
type: string
'/api/daily-logs/{dailyLog}/reopen':
post:
summary: 'Reopen daily log'
operationId: reopenDailyLog
description: 'Send a finalized RDO back to draft (Finalizado → Rascunho). Refused when a gov.br-signed document is attached'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- 'Daily Logs (RDO)'
parameters:
-
in: path
name: dailyLog
description: 'Daily Log UUID'
example: sint
required: true
schema:
type: string
'/api/daily-logs/{dailyLog}/photos':
post:
summary: 'Attach photos'
operationId: attachPhotos
description: 'Attach photographs (already uploaded to storage) to a draft RDO'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- 'Daily Logs (RDO)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
photos:
type: array
description: 'Fotos. O campo value deve ter pelo menos 1 itens.'
example:
- null
- null
items:
type: object
properties:
path:
type: string
description: Arquivo.
example: 'Example Photos * path'
name:
type: string
description: 'Nome do arquivo.'
example: 'Example Name'
nullable: true
size:
type: string
description: 'Photos * size.'
example: 'Example Photos * size'
nullable: true
extension:
type: string
description: 'Photos * extension.'
example: 'Example Photos * extension'
nullable: true
caption:
type: string
description: Legenda.
example: 'Example Photos * caption'
nullable: true
required:
- path
required:
- photos
parameters:
-
in: path
name: dailyLog
description: 'Daily Log UUID'
example: quaerat
required: true
schema:
type: string
'/api/daily-logs/{dailyLog}/photos/{id}':
patch:
summary: 'Update photo caption'
operationId: updatePhotoCaption
description: 'Update the caption of a photo in a draft RDO'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- 'Daily Logs (RDO)'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
caption:
type: string
description: Legenda.
example: 'Example Caption'
nullable: true
parameters:
-
in: path
name: dailyLog
description: 'Daily Log UUID'
example: dicta
required: true
schema:
type: string
-
in: path
name: id
description: 'The ID of the photo.'
example: ex
required: true
schema:
type: string
-
in: path
name: photo
description: 'Photo (File) UUID'
example: qui
required: true
schema:
type: string
'/api/daily-logs/{dailyLog}/photos/{photo}':
delete:
summary: 'Delete photo'
operationId: deletePhoto
description: 'Remove a photo from a draft RDO'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Daily Logs (RDO)'
parameters:
-
in: path
name: dailyLog
description: 'Daily Log UUID'
example: deleniti
required: true
schema:
type: string
-
in: path
name: photo
description: 'Photo (File) UUID'
example: itaque
required: true
schema:
type: string
/api/disciplines:
get:
summary: 'List disciplines'
operationId: listDisciplines
description: 'List all disciplines'
parameters:
-
in: query
name: q
description: 'Search query.'
example: Elétrico
required: false
schema:
type: string
description: 'Search query.'
example: Elétrico
nullable: true
-
in: query
name: active
description: 'Filter by active status.'
example: true
required: false
schema:
type: string
description: 'Filter by active status.'
example: true
enum:
- 'true'
- 'false'
- '1'
- '0'
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 4ba9bafb-631c-359c-9e5f-7fd2d960801b
name: Culpa
code: PJN
description: 'Optio quas voluptas labore qui in cumque soluta.'
active: true
-
id: 2454f261-dd60-3eda-aba6-dc8e1919d380
name: Id
code: FBP
description: 'Accusantium ut voluptas qui nihil ipsam.'
active: true
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: 4ba9bafb-631c-359c-9e5f-7fd2d960801b
name: Culpa
code: PJN
description: 'Optio quas voluptas labore qui in cumque soluta.'
active: true
-
id: 2454f261-dd60-3eda-aba6-dc8e1919d380
name: Id
code: FBP
description: 'Accusantium ut voluptas qui nihil ipsam.'
active: true
items:
type: object
properties:
id:
type: string
example: 4ba9bafb-631c-359c-9e5f-7fd2d960801b
name:
type: string
example: Culpa
code:
type: string
example: PJN
description:
type: string
example: 'Optio quas voluptas labore qui in cumque soluta.'
active:
type: boolean
example: 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:
- Disciplines
post:
summary: 'Create discipline'
operationId: createDiscipline
description: 'Create a new discipline'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- Disciplines
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: nome.
example: 'Example Name'
code:
type: string
description: código.
example: 'Example Code'
nullable: true
description:
type: string
description: descrição.
example: 'Example Description'
nullable: true
active:
type: boolean
description: ativo.
example: true
required:
- name
'/api/disciplines/{id}':
get:
summary: 'Show discipline'
operationId: showDiscipline
description: 'Show a discipline'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 1179d834-fbcd-39c9-a6f2-f024fa8ffc96
name: Porro
code: BPA
description: 'Est nulla eaque ea eum assumenda.'
active: true
properties:
data:
type: object
properties:
id:
type: string
example: 1179d834-fbcd-39c9-a6f2-f024fa8ffc96
name:
type: string
example: Porro
code:
type: string
example: BPA
description:
type: string
example: 'Est nulla eaque ea eum assumenda.'
active:
type: boolean
example: true
tags:
- Disciplines
put:
summary: 'Update discipline'
operationId: updateDiscipline
description: 'Update a discipline'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- Disciplines
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: nome.
example: 'Example Name'
code:
type: string
description: código.
example: 'Example Code'
nullable: true
description:
type: string
description: descrição.
example: 'Example Description'
nullable: true
active:
type: boolean
description: ativo.
example: true
required:
- name
parameters:
-
in: path
name: id
description: 'The ID of the discipline.'
example: 1
required: true
schema:
type: integer
-
in: path
name: discipline
description: 'Discipline UUID'
example: dolorum
required: true
schema:
type: string
'/api/disciplines/{discipline}':
delete:
summary: 'Delete discipline'
operationId: deleteDiscipline
description: 'Delete a discipline'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- Disciplines
parameters:
-
in: path
name: discipline
description: 'Discipline UUID'
example: omnis
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: 453222a4-ae10-324a-b61a-25b0c7ecb3e6
name: 'Sr. Fabiano Adriel de Arruda Filho'
description: 'Vel corrupti et nihil voluptas ipsum. Sit itaque excepturi ut aut consectetur quibusdam. Quia id ut est vel voluptatibus rerum et. Velit id autem consequatur perspiciatis id.'
module: document
-
id: bbe7e4b7-98e2-373f-bcaf-02a69989f5da
name: 'Emanuelly Michelle Assunção'
description: 'Ut quasi nam culpa voluptatem eos dolores repellendus. Minus odio nulla qui error. Voluptas repudiandae voluptas rerum laborum pariatur perspiciatis ad iure. Est est veniam esse culpa qui aut ut.'
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: 453222a4-ae10-324a-b61a-25b0c7ecb3e6
name: 'Sr. Fabiano Adriel de Arruda Filho'
description: 'Vel corrupti et nihil voluptas ipsum. Sit itaque excepturi ut aut consectetur quibusdam. Quia id ut est vel voluptatibus rerum et. Velit id autem consequatur perspiciatis id.'
module: document
-
id: bbe7e4b7-98e2-373f-bcaf-02a69989f5da
name: 'Emanuelly Michelle Assunção'
description: 'Ut quasi nam culpa voluptatem eos dolores repellendus. Minus odio nulla qui error. Voluptas repudiandae voluptas rerum laborum pariatur perspiciatis ad iure. Est est veniam esse culpa qui aut ut.'
module: document
items:
type: object
properties:
id:
type: string
example: 453222a4-ae10-324a-b61a-25b0c7ecb3e6
name:
type: string
example: 'Sr. Fabiano Adriel de Arruda Filho'
description:
type: string
example: 'Vel corrupti et nihil voluptas ipsum. Sit itaque excepturi ut aut consectetur quibusdam. Quia id ut est vel voluptatibus rerum et. Velit id autem consequatur perspiciatis id.'
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: 8be74317-6cd5-3e37-a793-ea74f327b424
name: 'Dr. Diana Cervantes Jr.'
description: 'Ad et est ut fuga voluptatem libero delectus. Et sit repudiandae ab nihil quidem quia quis. Dicta at neque quis aut aut odit ea.'
module: document
properties:
data:
type: object
properties:
id:
type: string
example: 8be74317-6cd5-3e37-a793-ea74f327b424
name:
type: string
example: 'Dr. Diana Cervantes Jr.'
description:
type: string
example: 'Ad et est ut fuga voluptatem libero delectus. Et sit repudiandae ab nihil quidem quia quis. Dicta at neque quis aut aut odit ea.'
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: enim
required: true
schema:
type: string
/api/documents:
get:
summary: 'List documents'
operationId: listDocuments
description: 'List all documents'
parameters:
-
in: query
name: sort_by
description: 'Field to sort by.'
example: created_at
required: false
schema:
type: string
description: 'Field to sort by.'
example: created_at
nullable: true
-
in: query
name: sort_desc
description: 'Sort order (true for descending, false for ascending).'
example: true
required: false
schema:
type: boolean
description: 'Sort order (true for descending, false for ascending).'
example: true
nullable: true
-
in: query
name: page
description: 'Page number for pagination. O campo value deve ser pelo menos 1.'
example: 1
required: false
schema:
type: integer
description: 'Page number for pagination. O campo value deve ser pelo menos 1.'
example: 1
nullable: true
-
in: query
name: per_page
description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page (max: 100). O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.'
example: 15
nullable: true
-
in: query
name: q
description: ''
example: 'Document name'
required: false
schema:
type: string
description: ''
example: 'Document name'
nullable: true
-
in: query
name: categories
description: 'The uuid of an existing record in the document_categories table.'
example:
- sed
required: false
schema:
type: array
description: 'The uuid of an existing record in the document_categories table.'
example:
- sed
items:
type: string
-
in: query
name: documentable_type
description: 'Type of the related documentable entity. The type of an existing record in the documentables table.'
example: culpa
required: false
schema:
type: string
description: 'Type of the related documentable entity. The type of an existing record in the documentables table.'
example: culpa
nullable: true
-
in: query
name: customers
description: 'The uuid of an existing record in the customers table.'
example:
- aut
required: false
schema:
type: array
description: 'The uuid of an existing record in the customers table.'
example:
- aut
items:
type: string
-
in: query
name: suppliers
description: 'The uuid of an existing record in the suppliers table.'
example:
- ratione
required: false
schema:
type: array
description: 'The uuid of an existing record in the suppliers table.'
example:
- ratione
items:
type: string
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 2cf68f69-bbbf-3672-91ab-03f52059e83a
name: 'Teobaldo Isaac Campos Neto'
file:
id: null
url: null
extension: null
created_at: null
updated_at: null
-
id: 33987e3b-9f65-3525-ab74-03e584a4408b
name: 'Eric das Dores Valente'
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: 2cf68f69-bbbf-3672-91ab-03f52059e83a
name: 'Teobaldo Isaac Campos Neto'
file:
id: null
url: null
extension: null
created_at: null
updated_at: null
-
id: 33987e3b-9f65-3525-ab74-03e584a4408b
name: 'Eric das Dores Valente'
file:
id: null
url: null
extension: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 2cf68f69-bbbf-3672-91ab-03f52059e83a
name:
type: string
example: 'Teobaldo Isaac Campos 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: 395f8e06-1b17-39be-a66e-24de5efb7075
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: d5e39173-6f56-3a1a-887f-649d7dfe92e1
name: 'Cristian Emiliano Rico'
file:
id: null
url: null
extension: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: d5e39173-6f56-3a1a-887f-649d7dfe92e1
name:
type: string
example: 'Cristian Emiliano Rico'
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: 4e088904-8d7d-3505-96ef-8f50df227850
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: 10
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/epi-renewals:
get:
summary: 'List EPI renewals'
operationId: listEPIRenewals
description: 'List pending/ignored (default) or completed EPI renewals. Ignored items remain in the default listing with renewal_status=ignored'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'EPI Renewals'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
q:
type: string
description: ''
example: eos
nullable: true
renewal_status:
type: string
description: ''
example: pending
enum:
- pending
- completed
- ignored
nullable: true
urgency:
type: string
description: ''
example: expires_30_days
enum:
- expired
- expires_7_days
- expires_30_days
nullable: true
employee_id:
type: string
description: 'The uuid of an existing record in the employees table.'
example: non
nullable: true
epi_type_id:
type: string
description: 'The uuid of an existing record in the epi_types table.'
example: possimus
nullable: true
/api/epi-renewals/summary:
get:
summary: 'EPI renewals summary'
operationId: ePIRenewalsSummary
description: 'Counts of renewals by urgency (pending and ignored; ignore only silences notifications)'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'EPI Renewals'
'/api/epi-renewals/{id}/renew':
post:
summary: 'Renew EPI delivery'
operationId: renewEPIDelivery
description: 'Renew an EPI delivery with a new delivery date'
parameters: []
responses: { }
tags:
- 'EPI Renewals'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
quantity:
type: integer
description: 'Quantidade entregue. O campo value deve ser pelo menos 1.'
example: 1
condition:
type: string
description: 'Condição do EPI.'
example: new
enum:
- new
- used
- reformed
confirm_insufficient_stock:
type: boolean
description: ''
example: false
parameters:
-
in: path
name: id
description: 'EPI delivery UUID'
example: minus
required: true
schema:
type: string
'/api/epi-renewals/{id}/ignore':
post:
summary: 'Ignore EPI renewal'
operationId: ignoreEPIRenewal
description: 'Ignore expiry alerts for an EPI delivery'
parameters: []
responses: { }
tags:
- 'EPI Renewals'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ignore_reason:
type: string
description: 'Motivo para ignorar o alerta de vencimento. O campo value não pode ser superior a 500 caracteres.'
example: 'Colaborador afastado temporariamente'
required:
- ignore_reason
delete:
summary: 'Unignore EPI renewal'
operationId: unignoreEPIRenewal
description: 'Resume expiry alerts for an EPI delivery'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'EPI Renewals'
parameters:
-
in: path
name: id
description: 'EPI delivery UUID'
example: alias
required: true
schema:
type: string
/api/epi-types:
get:
summary: 'List EPI types'
operationId: listEPITypes
description: 'List all EPI types'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 7e7963f3-7ce3-3cc0-9c73-2b07098ea5b6
name: 'aliquid et'
default_validity_days: 557
requires_signature: false
numero_ca: '38017'
product: null
available_quantity: null
created_at: null
updated_at: null
-
id: 5e98ff64-8fbd-37ff-b23c-3d1bfe7f46f2
name: 'qui sit'
default_validity_days: 68
requires_signature: false
numero_ca: '15674'
product: null
available_quantity: 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: 7e7963f3-7ce3-3cc0-9c73-2b07098ea5b6
name: 'aliquid et'
default_validity_days: 557
requires_signature: false
numero_ca: '38017'
product: null
available_quantity: null
created_at: null
updated_at: null
-
id: 5e98ff64-8fbd-37ff-b23c-3d1bfe7f46f2
name: 'qui sit'
default_validity_days: 68
requires_signature: false
numero_ca: '15674'
product: null
available_quantity: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 7e7963f3-7ce3-3cc0-9c73-2b07098ea5b6
name:
type: string
example: 'aliquid et'
default_validity_days:
type: integer
example: 557
requires_signature:
type: boolean
example: false
numero_ca:
type: string
example: '38017'
product:
type: string
example: null
nullable: true
available_quantity:
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:
- 'EPI Types'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
q:
type: string
description: ''
example: error
nullable: true
stock_id:
type: string
description: 'The uuid of an existing record in the stocks table.'
example: architecto
nullable: true
post:
summary: 'Create EPI type'
operationId: createEPIType
description: 'Create a new EPI type'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- 'EPI Types'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Nome.
example: 'Example Name'
default_validity_days:
type: integer
description: 'Validade padrão (dias). O campo value deve ser pelo menos 1.'
example: 1
requires_signature:
type: boolean
description: 'Exige assinatura.'
example: true
numero_ca:
type: string
description: 'Número do CA. O campo value não pode ser superior a 20 caracteres.'
example: 'Example Numero ca'
nullable: true
action:
type: string
description: Ação.
example: 'Example Action'
enum:
- link_existing
- create_new
product_id:
type: string
description: 'Produto. This field is required when action is link_existing. The uuid of an existing record in the products table.'
example: 0d3ccbfd-4635-35e7-a9e5-921e9e2d84c5
product_family_id:
type: string
description: 'Família do produto. This field is required when action is create_new. The uuid of an existing record in the product_families table.'
example: b24c5c56-ae3e-37ec-83f9-fc95ccc971be
required:
- name
- default_validity_days
- action
/api/epi-types/candidates:
get:
summary: 'List catalog products that could become EPI'
operationId: listCatalogProductsThatCouldBecomeEPI
description: 'Products sitting in a family flagged as EPI that do not have EPI attributes yet. Being here does not make a product an EPI: it becomes one when someone gives it a validity, through the create endpoint with action link_existing.'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'EPI Types'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
q:
type: string
description: ''
example: maiores
nullable: true
stock_id:
type: string
description: 'The uuid of an existing record in the stocks table.'
example: et
nullable: true
'/api/epi-types/{epiType}':
get:
summary: 'Show EPI type'
operationId: showEPIType
description: 'Show an EPI type'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 29256266-2dd2-370d-9fda-9c08c4f7df3a
name: 'autem id'
default_validity_days: 216
requires_signature: false
numero_ca: '40150'
product: null
available_quantity: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 29256266-2dd2-370d-9fda-9c08c4f7df3a
name:
type: string
example: 'autem id'
default_validity_days:
type: integer
example: 216
requires_signature:
type: boolean
example: false
numero_ca:
type: string
example: '40150'
product:
type: string
example: null
nullable: true
available_quantity:
type: string
example: null
nullable: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'EPI Types'
put:
summary: 'Update EPI type'
operationId: updateEPIType
description: 'Update an EPI type'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- 'EPI Types'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: Nome.
example: 'Example Name'
default_validity_days:
type: integer
description: 'Validade padrão (dias). O campo value deve ser pelo menos 1.'
example: 1
requires_signature:
type: boolean
description: 'Exige assinatura.'
example: true
numero_ca:
type: string
description: 'Número do CA. O campo value não pode ser superior a 20 caracteres.'
example: 'Example Numero ca'
nullable: true
required:
- name
- default_validity_days
delete:
summary: 'Delete EPI type'
operationId: deleteEPIType
description: 'Delete an EPI type'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'EPI Types'
parameters:
-
in: path
name: epiType
description: 'EPI type UUID'
example: quam
required: true
schema:
type: string
/api/epi-types/link-products:
post:
summary: 'Link EPI types to catalog products in bulk'
operationId: linkEPITypesToCatalogProductsInBulk
description: 'Link several EPI types to catalog products at once, creating the product where it does not exist yet. All or nothing: one refusal rolls back the whole batch.'
parameters: []
responses: { }
tags:
- 'EPI Types'
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:
epi_type_id:
type: string
description: 'Tipo de EPI. The uuid of an existing record in the epi_types table.'
example: eb254c05-38a6-3eb4-a3bb-16fe124faa80
action:
type: string
description: Ação.
example: 'Example Items * action'
enum:
- link_existing
- create_new
product_id:
type: string
description: 'Produto. This field is required when items.*.action is link_existing. The uuid of an existing record in the products table.'
example: bb5ef129-349c-33a8-b041-a4f52cd2d877
product_family_id:
type: string
description: 'Família do produto. This field is required when items.*.action is create_new. The uuid of an existing record in the product_families table.'
example: d6d493c3-012f-30cd-b8ae-2a226a4b82e9
required:
- epi_type_id
- action
required:
- items
'/api/epi-types/{epiType}/product':
put:
summary: 'Link an EPI type to a catalog product'
operationId: linkAnEPITypeToACatalogProduct
description: 'Link one EPI type to an existing product, or create the product from the EPI type name.'
parameters: []
responses: { }
tags:
- 'EPI Types'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
action:
type: string
description: Ação.
example: 'Example Action'
enum:
- link_existing
- create_new
product_id:
type: string
description: 'Produto. This field is required when action is link_existing. The uuid of an existing record in the products table.'
example: f40c2139-5d53-3dc8-a6c6-c3864b26d7f7
product_family_id:
type: string
description: 'Família do produto. This field is required when action is create_new. The uuid of an existing record in the product_families table.'
example: c15f1dcc-0942-34f7-9377-678a3eda0964
required:
- action
parameters:
-
in: path
name: epiType
description: 'EPI type UUID'
example: cumque
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: 55b35ae7-5ea3-424f-8b9d-49f0f9d3b6b9
name: delectus
description: 'Qui autem aut nihil itaque laboriosam nulla autem.'
created_at: null
updated_at: null
-
id: b09d0096-b763-4495-8455-49707456a18e
name: autem
description: null
created_at: null
updated_at: null
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Anterior'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Próximo »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
properties:
data:
type: array
example:
-
id: 55b35ae7-5ea3-424f-8b9d-49f0f9d3b6b9
name: delectus
description: 'Qui autem aut nihil itaque laboriosam nulla autem.'
created_at: null
updated_at: null
-
id: b09d0096-b763-4495-8455-49707456a18e
name: autem
description: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 55b35ae7-5ea3-424f-8b9d-49f0f9d3b6b9
name:
type: string
example: delectus
description:
type: string
example: 'Qui autem aut nihil itaque laboriosam nulla autem.'
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
nullable: true
next:
type: string
example: null
nullable: true
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
url: null
label: '« Anterior'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Próximo »'
page: null
active: false
items:
type: object
properties:
url:
type: string
example: null
nullable: true
label:
type: string
example: '« Anterior'
page:
type: string
example: null
nullable: true
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 10
to:
type: integer
example: 2
total:
type: integer
example: 2
tags:
- '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: f964e01a-5e4a-46bf-9009-6b120f437473
name: dicta
description: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: f964e01a-5e4a-46bf-9009-6b120f437473
name:
type: string
example: dicta
description:
type: string
example: null
nullable: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Employee Roles'
put:
summary: 'Update employee role'
operationId: updateEmployeeRole
description: 'Update an employee role'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- 'Employee Roles'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Nome. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Name'
description:
type: string
description: Descrição.
example: 'Example Description'
nullable: true
delete:
summary: 'Delete employee role'
operationId: deleteEmployeeRole
description: 'Delete an employee role'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Employee Roles'
parameters:
-
in: path
name: employeeRole
description: 'Employee Role UUID'
example: odit
required: true
schema:
type: string
/api/epi-terms:
get:
summary: 'List EPI terms'
operationId: listEPITerms
description: 'List initial EPI kit terms globally'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Employees
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
sort_by:
type: string
description: ''
example: delivery_date
enum:
- delivery_date
- created_at
nullable: true
sort_desc:
type: boolean
description: ''
example: false
nullable: true
page:
type: integer
description: 'O campo value deve ser pelo menos 1.'
example: 87
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: 10
nullable: true
q:
type: string
description: ''
example: minima
nullable: true
employee_id:
type: string
description: 'The uuid of an existing record in the employees table.'
example: sapiente
nullable: true
has_term:
type: boolean
description: ''
example: false
nullable: true
/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
-
in: query
name: status
description: 'Filtrar por situação (active, inactive ou all). Sem o parâmetro, lista apenas ativos.'
example: active
required: false
schema:
type: string
description: 'Filtrar por situação (active, inactive ou all). Sem o parâmetro, lista apenas ativos.'
example: active
enum:
- active
- inactive
- all
nullable: true
-
in: query
name: employee_roles
description: 'The uuid of an existing record in the employee_roles table.'
example:
- consequatur
required: false
schema:
type: array
description: 'The uuid of an existing record in the employee_roles table.'
example:
- consequatur
items:
type: string
-
in: query
name: admission_date_from
description: 'Data inicial do período de admissão. O campo value deve ser uma data válida.'
example: '2026-01-01'
required: false
schema:
type: string
description: 'Data inicial do período de admissão. O campo value deve ser uma data válida.'
example: '2026-01-01'
nullable: true
-
in: query
name: admission_date_to
description: 'Data final do período de admissão. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a admission_date_from.'
example: '2026-12-31'
required: false
schema:
type: string
description: 'Data final do período de admissão. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a admission_date_from.'
example: '2026-12-31'
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: e21a79c3-bf03-4228-b522-ff9595b58f85
name: 'Máximo Ortiz Jr.'
cpf: 323.792.263-85
rg: null
ctps: null
phone: '(43) 97072-0925'
birthdate: '1989-08-26'
email: null
pis_pasep: null
admission_date: '2004-10-24'
daily_salary: '152.41'
monthly_salary: null
nationality: Tunísia
place_of_birth: null
status: active
status_label: Ativo
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
employee_role:
id: a3295ff7-feb3-4c24-b22e-f7ed89e473c8
name: qui
created_at: null
updated_at: null
-
id: b47b4cb8-0da5-4134-9a89-d9a6a9788c83
name: 'Juan Carrara Filho'
cpf: 845.842.034-42
rg: null
ctps: null
phone: '(11) 2774-6180'
birthdate: null
email: carla56@example.com
pis_pasep: '07798237010'
admission_date: '1988-11-11'
daily_salary: null
monthly_salary: '5667.82'
nationality: null
place_of_birth: null
status: active
status_label: Ativo
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
employee_role:
id: a3295ff8-01d0-44b0-ac80-e0f78ca87224
name: nesciunt
created_at: null
updated_at: null
links:
first: '/?page=1'
last: '/?page=1'
prev: '/?page=86'
next: null
meta:
current_page: 87
from: 861
last_page: 1
links:
-
url: '/?page=86'
label: '« Anterior'
page: 86
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: false
-
url: null
label: 'Próximo »'
page: null
active: false
path: /
per_page: 10
to: 862
total: 2
properties:
data:
type: array
example:
-
id: e21a79c3-bf03-4228-b522-ff9595b58f85
name: 'Máximo Ortiz Jr.'
cpf: 323.792.263-85
rg: null
ctps: null
phone: '(43) 97072-0925'
birthdate: '1989-08-26'
email: null
pis_pasep: null
admission_date: '2004-10-24'
daily_salary: '152.41'
monthly_salary: null
nationality: Tunísia
place_of_birth: null
status: active
status_label: Ativo
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
employee_role:
id: a3295ff7-feb3-4c24-b22e-f7ed89e473c8
name: qui
created_at: null
updated_at: null
-
id: b47b4cb8-0da5-4134-9a89-d9a6a9788c83
name: 'Juan Carrara Filho'
cpf: 845.842.034-42
rg: null
ctps: null
phone: '(11) 2774-6180'
birthdate: null
email: carla56@example.com
pis_pasep: '07798237010'
admission_date: '1988-11-11'
daily_salary: null
monthly_salary: '5667.82'
nationality: null
place_of_birth: null
status: active
status_label: Ativo
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
employee_role:
id: a3295ff8-01d0-44b0-ac80-e0f78ca87224
name: nesciunt
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: e21a79c3-bf03-4228-b522-ff9595b58f85
name:
type: string
example: 'Máximo Ortiz Jr.'
cpf:
type: string
example: 323.792.263-85
rg:
type: string
example: null
nullable: true
ctps:
type: string
example: null
nullable: true
phone:
type: string
example: '(43) 97072-0925'
birthdate:
type: string
example: '1989-08-26'
email:
type: string
example: null
nullable: true
pis_pasep:
type: string
example: null
nullable: true
admission_date:
type: string
example: '2004-10-24'
daily_salary:
type: string
example: '152.41'
monthly_salary:
type: string
example: null
nullable: true
nationality:
type: string
example: Tunísia
place_of_birth:
type: string
example: null
nullable: true
status:
type: string
example: active
status_label:
type: string
example: Ativo
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: a3295ff7-feb3-4c24-b22e-f7ed89e473c8
name:
type: string
example: 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: '/?page=86'
next:
type: string
example: null
nullable: true
meta:
type: object
properties:
current_page:
type: integer
example: 87
from:
type: integer
example: 861
last_page:
type: integer
example: 1
links:
type: array
example:
-
url: '/?page=86'
label: '« Anterior'
page: 86
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: false
-
url: null
label: 'Próximo »'
page: null
active: false
items:
type: object
properties:
url:
type: string
example: '/?page=86'
label:
type: string
example: '« Anterior'
page:
type: integer
example: 86
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 10
to:
type: integer
example: 862
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:
data:
id: 363e5e81-4685-4f01-a8f9-74b81f974e64
name: 'Sr. Luan Gil Filho'
cpf: 015.802.953-21
rg: null
ctps: null
phone: '(18) 99417-4973'
birthdate: '2000-06-30'
email: lorenzo.pontes@example.com
pis_pasep: null
admission_date: '1993-05-04'
daily_salary: '143.83'
monthly_salary: '7348.58'
nationality: null
place_of_birth: null
status: active
status_label: Ativo
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
employee_role:
id: a3295ff8-175c-43b8-be07-550134046fac
name: aut
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 363e5e81-4685-4f01-a8f9-74b81f974e64
name:
type: string
example: 'Sr. Luan Gil Filho'
cpf:
type: string
example: 015.802.953-21
rg:
type: string
example: null
nullable: true
ctps:
type: string
example: null
nullable: true
phone:
type: string
example: '(18) 99417-4973'
birthdate:
type: string
example: '2000-06-30'
email:
type: string
example: lorenzo.pontes@example.com
pis_pasep:
type: string
example: null
nullable: true
admission_date:
type: string
example: '1993-05-04'
daily_salary:
type: string
example: '143.83'
monthly_salary:
type: string
example: '7348.58'
nationality:
type: string
example: null
nullable: true
place_of_birth:
type: string
example: null
nullable: true
status:
type: string
example: active
status_label:
type: string
example: Ativo
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: a3295ff8-175c-43b8-be07-550134046fac
name:
type: string
example: aut
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
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: 3896eb9c-79be-4f17-ae20-4c54b577c330
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. O campo value deve ser uma data anterior ou igual a today.'
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/excel:
get:
summary: 'Export employees to Excel'
operationId: exportEmployeesToExcel
description: 'Dispatches async Excel generation using the same filters as the listing. Frontend is notified via Pusher when ready.'
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
-
in: query
name: status
description: 'Filtrar por situação (active, inactive ou all). Sem o parâmetro, lista apenas ativos.'
example: active
required: false
schema:
type: string
description: 'Filtrar por situação (active, inactive ou all). Sem o parâmetro, lista apenas ativos.'
example: active
enum:
- active
- inactive
- all
nullable: true
-
in: query
name: employee_roles
description: 'The uuid of an existing record in the employee_roles table.'
example:
- voluptas
required: false
schema:
type: array
description: 'The uuid of an existing record in the employee_roles table.'
example:
- voluptas
items:
type: string
-
in: query
name: admission_date_from
description: 'Data inicial do período de admissão. O campo value deve ser uma data válida.'
example: '2026-01-01'
required: false
schema:
type: string
description: 'Data inicial do período de admissão. O campo value deve ser uma data válida.'
example: '2026-01-01'
nullable: true
-
in: query
name: admission_date_to
description: 'Data final do período de admissão. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a admission_date_from.'
example: '2026-12-31'
required: false
schema:
type: string
description: 'Data final do período de admissão. O campo value deve ser uma data válida. O campo value deve ser uma data posterior ou igual a admission_date_from.'
example: '2026-12-31'
nullable: true
responses:
202:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
channel: string
event: string
properties:
message:
type: string
example: string
channel:
type: string
example: string
event:
type: string
example: string
422:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- Employees
'/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: b475adef-1c10-4aa9-965c-cc68831af602
name: 'Dr. Agostinho Luciano Camacho'
cpf: 844.851.508-94
rg: '940160858'
ctps: null
phone: '(54) 98684-4339'
birthdate: null
email: carolina82@example.com
pis_pasep: null
admission_date: '2010-06-01'
daily_salary: null
monthly_salary: '7985.23'
nationality: Croácia
place_of_birth: null
status: active
status_label: Ativo
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
employee_role:
id: a3295ff8-0e1d-4134-b385-9f634ee9dfe1
name: quod
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: b475adef-1c10-4aa9-965c-cc68831af602
name:
type: string
example: 'Dr. Agostinho Luciano Camacho'
cpf:
type: string
example: 844.851.508-94
rg:
type: string
example: '940160858'
ctps:
type: string
example: null
nullable: true
phone:
type: string
example: '(54) 98684-4339'
birthdate:
type: string
example: null
nullable: true
email:
type: string
example: carolina82@example.com
pis_pasep:
type: string
example: null
nullable: true
admission_date:
type: string
example: '2010-06-01'
daily_salary:
type: string
example: null
nullable: true
monthly_salary:
type: string
example: '7985.23'
nationality:
type: string
example: Croácia
place_of_birth:
type: string
example: null
nullable: true
status:
type: string
example: active
status_label:
type: string
example: Ativo
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: a3295ff8-0e1d-4134-b385-9f634ee9dfe1
name:
type: string
example: quod
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: f745f207-c0a7-4ecb-9bd1-225a0aa67b6a
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. O campo value deve ser uma data anterior ou igual a today.'
example: '2024-01-01'
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: 18
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}/dismiss':
post:
summary: 'Dismiss employee'
operationId: dismissEmployee
description: 'Register the dismissal of an active employee'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 618431ab-b306-4d3e-85b5-a3dff0a0502f
name: 'Michelle Clarice Gonçalves'
cpf: 155.696.868-14
rg: '339206686'
ctps: null
phone: '(28) 4526-4708'
birthdate: '1984-03-18'
email: daniel57@example.org
pis_pasep: '64556637148'
admission_date: '1998-11-01'
daily_salary: null
monthly_salary: '5480.19'
nationality: null
place_of_birth: null
status: active
status_label: Ativo
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
employee_role:
id: a3295ff8-2610-4224-8c68-97cae160c8e5
name: ut
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 618431ab-b306-4d3e-85b5-a3dff0a0502f
name:
type: string
example: 'Michelle Clarice Gonçalves'
cpf:
type: string
example: 155.696.868-14
rg:
type: string
example: '339206686'
ctps:
type: string
example: null
nullable: true
phone:
type: string
example: '(28) 4526-4708'
birthdate:
type: string
example: '1984-03-18'
email:
type: string
example: daniel57@example.org
pis_pasep:
type: string
example: '64556637148'
admission_date:
type: string
example: '1998-11-01'
daily_salary:
type: string
example: null
nullable: true
monthly_salary:
type: string
example: '5480.19'
nationality:
type: string
example: null
nullable: true
place_of_birth:
type: string
example: null
nullable: true
status:
type: string
example: active
status_label:
type: string
example: Ativo
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: a3295ff8-2610-4224-8c68-97cae160c8e5
name:
type: string
example: ut
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- Employees
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
dismissal_date:
type: string
description: 'Data da baixa. O campo value deve ser uma data válida. O campo value deve ser uma data anterior ou igual a today.'
example: '2026-11-06'
dismissal_reason:
type: string
description: 'Motivo da saída.'
example: resignation
enum:
- resignation
- dismissal_without_cause
- dismissal_with_cause
- end_of_contract
- retirement
required:
- dismissal_date
- dismissal_reason
parameters:
-
in: path
name: employee
description: 'Employee ID'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string
'/api/employees/{employee}/rehire':
post:
summary: 'Rehire employee'
operationId: rehireEmployee
description: 'Rehire an inactive employee with a new admission date'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: d5e26f3f-def7-4dfb-abec-d36b8ded8f77
name: 'Eric Azevedo Aguiar'
cpf: 114.998.391-10
rg: '009453181'
ctps: null
phone: '(83) 2696-0084'
birthdate: '2026-03-14'
email: null
pis_pasep: '54134947525'
admission_date: '2016-06-30'
daily_salary: '65.29'
monthly_salary: null
nationality: Croácia
place_of_birth: null
status: active
status_label: Ativo
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
employee_role:
id: a3295ff8-2c61-465c-aa75-406d184cbb78
name: perspiciatis
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: d5e26f3f-def7-4dfb-abec-d36b8ded8f77
name:
type: string
example: 'Eric Azevedo Aguiar'
cpf:
type: string
example: 114.998.391-10
rg:
type: string
example: '009453181'
ctps:
type: string
example: null
nullable: true
phone:
type: string
example: '(83) 2696-0084'
birthdate:
type: string
example: '2026-03-14'
email:
type: string
example: null
nullable: true
pis_pasep:
type: string
example: '54134947525'
admission_date:
type: string
example: '2016-06-30'
daily_salary:
type: string
example: '65.29'
monthly_salary:
type: string
example: null
nullable: true
nationality:
type: string
example: Croácia
place_of_birth:
type: string
example: null
nullable: true
status:
type: string
example: active
status_label:
type: string
example: Ativo
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: a3295ff8-2c61-465c-aa75-406d184cbb78
name:
type: string
example: perspiciatis
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- Employees
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
admission_date:
type: string
description: 'Nova data de admissão. O campo value deve ser uma data válida. O campo value deve ser uma data anterior ou igual a today.'
example: '2026-11-06'
required:
- admission_date
parameters:
-
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: rem
agency:
type: string
description: 'O campo value não pode ser superior a 255 caracteres.'
example: gubo
account:
type: string
description: 'O campo value não pode ser superior a 255 caracteres.'
example: q
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: mfluyriurccjzdwja
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: 1
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: enim
agency:
type: string
description: 'O campo value não pode ser superior a 255 caracteres.'
example: zodllleexsrlr
account:
type: string
description: 'O campo value não pode ser superior a 255 caracteres.'
example: rvfwto
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: fzhdpaqfivbsnjqpvke
nullable: true
favorite:
type: boolean
description: ''
example: true
parameters:
-
in: path
name: employee_id
description: 'The ID of the employee.'
example: 17
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/employees/{employee_id}/epi-deliveries':
get:
summary: 'List employee EPI deliveries'
operationId: listEmployeeEPIDeliveries
description: 'List EPI deliveries for an employee'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Employees
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
q:
type: string
description: ''
example: temporibus
nullable: true
status:
type: string
description: ''
example: expiring
enum:
- valid
- expiring
- expired
nullable: true
epi_type_id:
type: string
description: 'The uuid of an existing record in the epi_types table.'
example: id
nullable: true
has_term:
type: string
description: ''
example: null
nullable: true
post:
summary: 'Create employee EPI delivery'
operationId: createEmployeeEPIDelivery
description: 'Register an EPI delivery for 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:
epi_type_id:
type: string
description: 'Tipo de EPI. The uuid of an existing record in the epi_types table.'
example: 2567b47a-8f67-314e-92d7-60df8ca8f4b2
delivery_date:
type: string
description: 'Data de entrega. O campo value deve ser uma data válida.'
example: '2024-01-01'
quantity:
type: integer
description: 'Quantidade. O campo value deve ser pelo menos 1.'
example: 1
condition:
type: string
description: Condicao.
example: 'Example Condition'
enum:
- new
- used
- reformed
delivered_by_employee_id:
type: string
description: 'Responsável pela entrega. The uuid of an existing record in the employees table.'
example: 5a5c14cd-1d6e-47f7-b978-727bab24bbee
nullable: true
stock_id:
type: string
description: 'Estoque. The uuid of an existing record in the stocks table.'
example: 3230b8ca-5c1f-3720-bd49-2f8b5280194a
nullable: true
confirm_insufficient_stock:
type: boolean
description: 'Confirmar saldo insuficiente.'
example: true
required:
- epi_type_id
- delivery_date
- condition
parameters:
-
in: path
name: employee_id
description: 'The ID of the employee.'
example: 5
required: true
schema:
type: integer
-
in: path
name: employee
description: 'Employee UUID'
example: facere
required: true
schema:
type: string
'/api/employees/{employee}/epi-deliveries/pending-renewals-count':
get:
summary: 'Pending EPI renewals count'
operationId: pendingEPIRenewalsCount
description: 'Count of pending EPI renewals for an employee'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Employees
parameters:
-
in: path
name: employee
description: 'Employee UUID'
example: omnis
required: true
schema:
type: string
'/api/employees/{employee_id}/epi-deliveries/{id}':
get:
summary: 'Show employee EPI delivery'
operationId: showEmployeeEPIDelivery
description: 'Show an EPI delivery for an employee'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Employees
put:
summary: 'Update employee EPI delivery'
operationId: updateEmployeeEPIDelivery
description: 'Update an EPI delivery for an employee'
parameters: []
responses: { }
tags:
- Employees
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
epi_type_id:
type: string
description: 'Tipo de EPI. The uuid of an existing record in the epi_types table.'
example: 7264860a-5116-3d7f-990d-72fa807cb1cf
delivery_date:
type: string
description: 'Data de entrega. O campo value deve ser uma data válida.'
example: '2024-01-01'
quantity:
type: integer
description: 'Quantidade. O campo value deve ser pelo menos 1.'
example: 1
condition:
type: string
description: Condição.
example: 'Example Condition'
enum:
- new
- used
- reformed
delivered_by_employee_id:
type: string
description: 'Responsável pela entrega. The uuid of an existing record in the employees table.'
example: fa3d581b-c38d-47d5-9e27-02d7f59fe248
nullable: true
stock_id:
type: string
description: 'Estoque. The uuid of an existing record in the stocks table.'
example: 1e7794cf-08ba-3212-a466-b49cbbf23070
nullable: true
confirm_insufficient_stock:
type: boolean
description: 'Confirmar saldo insuficiente.'
example: true
parameters:
-
in: path
name: employee_id
description: 'The ID of the employee.'
example: 11
required: true
schema:
type: integer
-
in: path
name: id
description: 'EPI delivery UUID'
example: voluptas
required: true
schema:
type: string
-
in: path
name: employee
description: 'Employee UUID'
example: odit
required: true
schema:
type: string
'/api/employees/{employee}/epi-deliveries/kit':
post:
summary: 'Create employee initial EPI kit'
operationId: createEmployeeInitialEPIKit
description: 'Register multiple EPI deliveries as initial kit'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- Employees
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
delivery_date:
type: string
description: 'Data de entrega. O campo value deve ser uma data válida.'
example: '2024-01-01'
is_kit_initial:
type: boolean
description: 'Kit inicial.'
example: true
show_epi_receipt_text:
type: boolean
description: 'Exibir texto do recibo.'
example: true
delivered_by_employee_id:
type: string
description: 'Responsável pela entrega. The uuid of an existing record in the employees table.'
example: bbd4ca6b-5f8c-4a9c-b6ad-5e70a502a083
nullable: true
stock_id:
type: string
description: 'Estoque. The uuid of an existing record in the stocks table.'
example: 6927c6a7-b95c-3d9e-a9d7-fedfcb34ebba
nullable: true
confirm_insufficient_stock:
type: boolean
description: 'Confirmar saldo insuficiente.'
example: true
items:
type: array
description: 'Itens do kit. O campo value deve ter pelo menos 1 itens.'
example:
- null
- null
items:
type: object
properties:
epi_type_id:
type: string
description: 'Tipo de EPI. The uuid of an existing record in the epi_types table.'
example: 074e7ae6-78c7-31d1-92b7-ddc2c57c6e27
quantity:
type: integer
description: 'Quantidade. O campo value deve ser pelo menos 1.'
example: 1
condition:
type: string
description: Condição.
example: 'Example Items * condition'
enum:
- new
- used
- reformed
required:
- epi_type_id
- condition
required:
- delivery_date
- items
parameters:
-
in: path
name: employee
description: 'Employee UUID'
example: natus
required: true
schema:
type: string
'/api/employees/{employee}/epi-deliveries/{id}/promote-to-kit':
post:
summary: 'Promote EPI delivery to kit'
operationId: promoteEPIDeliveryToKit
description: 'Turn a standalone EPI delivery into a single-item kit so it can generate the acknowledgement term. Idempotent: a delivery already belonging to a kit is returned unchanged.'
parameters: []
responses: { }
tags:
- Employees
parameters:
-
in: path
name: employee
description: 'Employee UUID'
example: est
required: true
schema:
type: string
-
in: path
name: id
description: 'EPI delivery UUID'
example: eligendi
required: true
schema:
type: string
'/api/employees/{employee}/epi-deliveries/{id}':
delete:
summary: 'Delete employee EPI delivery'
operationId: deleteEmployeeEPIDelivery
description: 'Delete an EPI delivery 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: aut
required: true
schema:
type: string
-
in: path
name: id
description: 'EPI delivery UUID'
example: quia
required: true
schema:
type: string
'/api/employees/{employee_id}/epi-terms':
get:
summary: 'List employee EPI terms'
operationId: listEmployeeEPITerms
description: 'List initial EPI kit terms for an employee'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Employees
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
sort_by:
type: string
description: ''
example: created_at
enum:
- delivery_date
- created_at
nullable: true
sort_desc:
type: boolean
description: ''
example: false
nullable: true
page:
type: integer
description: 'O campo value deve ser pelo menos 1.'
example: 47
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: 7
nullable: true
q:
type: string
description: ''
example: eaque
nullable: true
employee_id:
type: string
description: 'The uuid of an existing record in the employees table.'
example: illum
nullable: true
has_term:
type: boolean
description: ''
example: true
nullable: true
parameters:
-
in: path
name: employee_id
description: 'The ID of the employee.'
example: 13
required: true
schema:
type: integer
-
in: path
name: employee
description: 'Employee UUID'
example: voluptas
required: true
schema:
type: string
'/api/employees/{employee}/epi-terms/{kitUuid}/upload':
post:
summary: 'Upload signed EPI term'
operationId: uploadSignedEPITerm
description: 'Upload signed Termo de Ciência for an initial kit'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
nullable: true
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'
nullable: true
file:
type: object
description: Arquivo.
example:
- example1
- example2
properties:
path:
type: string
description: 'Caminho do arquivo.'
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'
mime_type:
type: string
description: 'File mime type.'
example: 'Example File mime type'
nullable: true
required:
- path
- name
- extension
- size
required:
- file
parameters:
-
in: path
name: employee
description: 'Employee UUID'
example: quaerat
required: true
schema:
type: string
-
in: path
name: kitUuid
description: 'Kit UUID'
example: 41209750-fb34-38d0-8ece-4b29de60703c
required: true
schema:
type: string
'/api/employees/{employee}/epi-terms/{kitUuid}/document':
get:
summary: 'Download signed EPI term'
operationId: downloadSignedEPITerm
description: 'Get temporary download URL for signed term'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Employees
parameters:
-
in: path
name: employee
description: 'Employee UUID'
example: impedit
required: true
schema:
type: string
-
in: path
name: kitUuid
description: 'Kit UUID'
example: a0d570d8-84b4-38e0-9354-cddd77b3ed29
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: f29366c9-3745-3467-8f0d-b7a14da90660
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: dab52a22-5b65-30c4-841a-88106cf1014e
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: 205dd305-fbeb-3a6d-b852-95533632d867
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: 9b9666ba-0f64-3aa1-acfa-dac6c1ceabae
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '57346366959219299865659780501736487438170114'
nfe_number: '505213'
nfe_series: '44'
issue_date: '1974-01-02T03:00:00.000000Z'
total_value: '7560.09'
emit:
cnpj: '09659616498440'
name: 'Gibson, Kozey and Runolfsdottir'
dest:
document: '42710274160507'
name: Hyatt-Senger
supplier:
id: a3295ffa-4140-4049-bd34-ec714575ac5c
name: 'Dr. Luis Nero Bonilha Neto'
document: 62.226.435/0001-06
financial_status: pending
products_imported_at: null
created_at: null
-
id: de525b46-7eee-3164-85b2-fd0f74dff1e5
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '91672342579726519026148026762199222333768146'
nfe_number: '828122'
nfe_series: '40'
issue_date: '1981-07-23T03:00:00.000000Z'
total_value: '1748.78'
emit:
cnpj: '25605107232023'
name: 'Renner Ltd'
dest:
document: '47865344272827'
name: 'Hermann Ltd'
supplier:
id: a3295ffa-4b22-48c3-a5c9-70fd75e395df
name: 'Willian Brito Queirós Sobrinho'
document: 89.547.100/0001-46
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: 9b9666ba-0f64-3aa1-acfa-dac6c1ceabae
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '57346366959219299865659780501736487438170114'
nfe_number: '505213'
nfe_series: '44'
issue_date: '1974-01-02T03:00:00.000000Z'
total_value: '7560.09'
emit:
cnpj: '09659616498440'
name: 'Gibson, Kozey and Runolfsdottir'
dest:
document: '42710274160507'
name: Hyatt-Senger
supplier:
id: a3295ffa-4140-4049-bd34-ec714575ac5c
name: 'Dr. Luis Nero Bonilha Neto'
document: 62.226.435/0001-06
financial_status: pending
products_imported_at: null
created_at: null
-
id: de525b46-7eee-3164-85b2-fd0f74dff1e5
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '91672342579726519026148026762199222333768146'
nfe_number: '828122'
nfe_series: '40'
issue_date: '1981-07-23T03:00:00.000000Z'
total_value: '1748.78'
emit:
cnpj: '25605107232023'
name: 'Renner Ltd'
dest:
document: '47865344272827'
name: 'Hermann Ltd'
supplier:
id: a3295ffa-4b22-48c3-a5c9-70fd75e395df
name: 'Willian Brito Queirós Sobrinho'
document: 89.547.100/0001-46
financial_status: pending
products_imported_at: null
created_at: null
items:
type: object
properties:
id:
type: string
example: 9b9666ba-0f64-3aa1-acfa-dac6c1ceabae
document_type:
type: string
example: nfe
document_type_label:
type: string
example: NF-e
service_description:
type: string
example: null
nullable: true
nfe_access_key:
type: string
example: '57346366959219299865659780501736487438170114'
nfe_number:
type: string
example: '505213'
nfe_series:
type: string
example: '44'
issue_date:
type: string
example: '1974-01-02T03:00:00.000000Z'
total_value:
type: string
example: '7560.09'
emit:
type: object
properties:
cnpj:
type: string
example: '09659616498440'
name:
type: string
example: 'Gibson, Kozey and Runolfsdottir'
dest:
type: object
properties:
document:
type: string
example: '42710274160507'
name:
type: string
example: Hyatt-Senger
supplier:
type: object
properties:
id:
type: string
example: a3295ffa-4140-4049-bd34-ec714575ac5c
name:
type: string
example: 'Dr. Luis Nero Bonilha Neto'
document:
type: string
example: 62.226.435/0001-06
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: corporis
document_type:
type: string
description: ''
example: nfe
enum:
- nfe
- nfse
supplier_id:
type: string
description: 'The uuid of an existing record in the suppliers table.'
example: exercitationem
work_id:
type: string
description: 'The uuid of an existing record in the works table.'
example: iusto
products_status:
type: string
description: ''
example: imported
enum:
- imported
- pending
financial_status:
type: string
description: ''
example: partial
enum:
- pending
- partial
- generated
start_date:
type: string
description: 'O campo value deve ser uma data válida.'
example: '2026-11-06T13:03:12'
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: '2093-01-12'
per_page:
type: integer
description: 'O campo value deve ser pelo menos 1. O campo value não pode ser superior a 100.'
example: 2
cost_centers:
type: array
description: 'The uuid of an existing record in the cost_centers table.'
example:
- magni
items:
type: string
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: d8a61ba3-bfed-308b-b8c7-6364ff79e34a
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '72118191611829069103468322121241950635230136'
nfe_number: '363397'
nfe_series: '76'
issue_date: '2013-10-08T03:00:00.000000Z'
total_value: '479.20'
emit:
cnpj: '58768067191855'
name: Langosh-Lakin
dest:
document: '46418936201386'
name: "O'Keefe PLC"
supplier:
id: a3295ffa-5e5c-4f5e-aa05-4edec85c8dc5
name: 'Srta. Josefina Corona Lira'
document: 30.520.863/0001-50
financial_status: pending
products_imported_at: null
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: d8a61ba3-bfed-308b-b8c7-6364ff79e34a
document_type:
type: string
example: nfe
document_type_label:
type: string
example: NF-e
service_description:
type: string
example: null
nullable: true
nfe_access_key:
type: string
example: '72118191611829069103468322121241950635230136'
nfe_number:
type: string
example: '363397'
nfe_series:
type: string
example: '76'
issue_date:
type: string
example: '2013-10-08T03:00:00.000000Z'
total_value:
type: string
example: '479.20'
emit:
type: object
properties:
cnpj:
type: string
example: '58768067191855'
name:
type: string
example: Langosh-Lakin
dest:
type: object
properties:
document:
type: string
example: '46418936201386'
name:
type: string
example: "O'Keefe PLC"
supplier:
type: object
properties:
id:
type: string
example: a3295ffa-5e5c-4f5e-aa05-4edec85c8dc5
name:
type: string
example: 'Srta. Josefina Corona Lira'
document:
type: string
example: 30.520.863/0001-50
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: qui
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:
- consequatur
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: 5f296db5-1214-31e8-b063-aa477968c966
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '63573033282060467482259308540818556475134602'
nfe_number: '894742'
nfe_series: '63'
issue_date: '1991-02-18T03:00:00.000000Z'
total_value: '7485.56'
emit:
cnpj: '14336184247539'
name: 'Sipes Inc'
dest:
document: '55665382584516'
name: 'Feest LLC'
supplier:
id: a3295ffa-717c-49e6-a0a3-ce753b486b36
name: 'Dr. Thales Quintana'
document: 57.763.545/0001-77
financial_status: pending
products_imported_at: null
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 5f296db5-1214-31e8-b063-aa477968c966
document_type:
type: string
example: nfe
document_type_label:
type: string
example: NF-e
service_description:
type: string
example: null
nullable: true
nfe_access_key:
type: string
example: '63573033282060467482259308540818556475134602'
nfe_number:
type: string
example: '894742'
nfe_series:
type: string
example: '63'
issue_date:
type: string
example: '1991-02-18T03:00:00.000000Z'
total_value:
type: string
example: '7485.56'
emit:
type: object
properties:
cnpj:
type: string
example: '14336184247539'
name:
type: string
example: 'Sipes Inc'
dest:
type: object
properties:
document:
type: string
example: '55665382584516'
name:
type: string
example: 'Feest LLC'
supplier:
type: object
properties:
id:
type: string
example: a3295ffa-717c-49e6-a0a3-ce753b486b36
name:
type: string
example: 'Dr. Thales Quintana'
document:
type: string
example: 57.763.545/0001-77
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'
delete:
summary: 'Delete fiscal document'
operationId: deleteFiscalDocument
description: 'Exclui definitivamente uma nota fiscal. Não permitido quando a nota já gerou parcelas no financeiro ou já teve produtos importados.'
parameters: []
responses:
204:
description: 'Nota fiscal excluída.'
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Fiscal Documents'
parameters:
-
in: path
name: fiscalDocument
description: 'UUID da nota fiscal'
example: maiores
required: true
schema:
type: string
'/api/fiscal-documents/{fiscalDocument}/cost-centers':
get:
summary: 'Fiscal document by cost center'
operationId: fiscalDocumentByCostCenter
description: 'Distribui a nota por centro de custo. NF-e de produto sai do estoque: o que a vinculação dos itens lançou em cada estoque de obra (quantidade × preço do lote, o mesmo cálculo do custo apropriado do painel), o que foi para o estoque principal e o que ainda não foi integrado. NFS-e sai das parcelas, pelo centro da conta gerada. As linhas somam o total da nota; a diferença vai para other_values, que pode ser negativo quando há desconto. Linhas zeradas são omitidas.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
total: '5074.19'
source: stock
rows:
-
kind: cost_center
cost_center:
id: uuid
code: '002.001'
name: 'Residencial Vila Nova'
amount: '2100.00'
share: 41.39
-
kind: work_without_cost_center
work:
id: uuid
name: 'Reforma Centro'
amount: '474.19'
share: 9.35
-
kind: main_stock
cost_center:
id: uuid
code: '003.001'
name: 'Estoque central'
amount: '1500.00'
share: 29.56
-
kind: not_integrated
amount: '900.00'
share: 17.74
-
kind: other_values
amount: '100.00'
share: 1.97
properties:
data:
type: object
properties:
total:
type: string
example: '5074.19'
source:
type: string
example: stock
rows:
type: array
example:
-
kind: cost_center
cost_center:
id: uuid
code: '002.001'
name: 'Residencial Vila Nova'
amount: '2100.00'
share: 41.39
-
kind: work_without_cost_center
work:
id: uuid
name: 'Reforma Centro'
amount: '474.19'
share: 9.35
-
kind: main_stock
cost_center:
id: uuid
code: '003.001'
name: 'Estoque central'
amount: '1500.00'
share: 29.56
-
kind: not_integrated
amount: '900.00'
share: 17.74
-
kind: other_values
amount: '100.00'
share: 1.97
items:
type: object
properties:
kind:
type: string
example: cost_center
cost_center:
type: object
properties:
id:
type: string
example: uuid
code:
type: string
example: '002.001'
name:
type: string
example: 'Residencial Vila Nova'
amount:
type: string
example: '2100.00'
share:
type: number
example: 41.39
tags:
- 'Fiscal Documents'
parameters:
-
in: path
name: fiscalDocument
description: 'UUID da nota fiscal'
example: ipsum
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: a87d6787-68ff-3219-96d0-e2b050145926
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '99921916690155451162886394139840105648881274'
nfe_number: '416382'
nfe_series: '03'
issue_date: '1976-07-06T03:00:00.000000Z'
total_value: '8684.42'
emit:
cnpj: '55302163574486'
name: 'Robel, Donnelly and Ebert'
dest:
document: '36416039269769'
name: 'Torp Group'
supplier:
id: a3295ffa-9513-4fd5-b4f8-5b23646b73cb
name: 'Dr. Marcos Renato Carmona'
document: 11.320.016/0001-06
financial_status: pending
products_imported_at: null
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: a87d6787-68ff-3219-96d0-e2b050145926
document_type:
type: string
example: nfe
document_type_label:
type: string
example: NF-e
service_description:
type: string
example: null
nullable: true
nfe_access_key:
type: string
example: '99921916690155451162886394139840105648881274'
nfe_number:
type: string
example: '416382'
nfe_series:
type: string
example: '03'
issue_date:
type: string
example: '1976-07-06T03:00:00.000000Z'
total_value:
type: string
example: '8684.42'
emit:
type: object
properties:
cnpj:
type: string
example: '55302163574486'
name:
type: string
example: 'Robel, Donnelly and Ebert'
dest:
type: object
properties:
document:
type: string
example: '36416039269769'
name:
type: string
example: 'Torp Group'
supplier:
type: object
properties:
id:
type: string
example: a3295ffa-9513-4fd5-b4f8-5b23646b73cb
name:
type: string
example: 'Dr. Marcos Renato Carmona'
document:
type: string
example: 11.320.016/0001-06
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: quae
name:
type: string
description: ''
example: ullam
extension:
type: string
description: ''
example: aut
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: et
required: true
schema:
type: string
'/api/fiscal-documents/{fiscalDocument}/files/{file}':
delete:
summary: 'Detach file'
operationId: detachFile
description: 'Remove definitivamente um anexo da nota fiscal, inclusive o objeto no S3. O XML original da NFe não pode ser removido.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: efcd0d99-970e-3efa-a289-23b111c6e402
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '96602636946465048270208530062591312471050083'
nfe_number: '355005'
nfe_series: '41'
issue_date: '1971-08-14T03:00:00.000000Z'
total_value: '9924.08'
emit:
cnpj: '17013285603447'
name: 'Rutherford LLC'
dest:
document: '58823113202138'
name: 'Kertzmann, Johnson and Vandervort'
supplier:
id: a3295ffa-a5fb-464e-949d-7f54226cbc2f
name: 'Dr. Gustavo Carvalho Jr.'
document: 63.657.673/0001-39
financial_status: pending
products_imported_at: null
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: efcd0d99-970e-3efa-a289-23b111c6e402
document_type:
type: string
example: nfe
document_type_label:
type: string
example: NF-e
service_description:
type: string
example: null
nullable: true
nfe_access_key:
type: string
example: '96602636946465048270208530062591312471050083'
nfe_number:
type: string
example: '355005'
nfe_series:
type: string
example: '41'
issue_date:
type: string
example: '1971-08-14T03:00:00.000000Z'
total_value:
type: string
example: '9924.08'
emit:
type: object
properties:
cnpj:
type: string
example: '17013285603447'
name:
type: string
example: 'Rutherford LLC'
dest:
type: object
properties:
document:
type: string
example: '58823113202138'
name:
type: string
example: 'Kertzmann, Johnson and Vandervort'
supplier:
type: object
properties:
id:
type: string
example: a3295ffa-a5fb-464e-949d-7f54226cbc2f
name:
type: string
example: 'Dr. Gustavo Carvalho Jr.'
document:
type: string
example: 63.657.673/0001-39
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: consequatur
required: true
schema:
type: string
-
in: path
name: file
description: 'UUID do arquivo anexado'
example: magnam
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: df0710cd-2bdd-3b87-8090-bf05f7c5a32b
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '36492282433658096388601148392212878120732250'
nfe_number: '779225'
nfe_series: '24'
issue_date: '2008-11-05T02:00:00.000000Z'
total_value: '1022.69'
emit:
cnpj: '67440952846444'
name: 'Gerlach Ltd'
dest:
document: '85041902037964'
name: 'Sporer, Murray and Gutkowski'
supplier:
id: a3295ffa-b8bc-4d3b-9ca1-6220c4920539
name: 'Sr. Giovane Maicon Cervantes Neto'
document: 10.605.945/0001-90
financial_status: pending
products_imported_at: null
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: df0710cd-2bdd-3b87-8090-bf05f7c5a32b
document_type:
type: string
example: nfe
document_type_label:
type: string
example: NF-e
service_description:
type: string
example: null
nullable: true
nfe_access_key:
type: string
example: '36492282433658096388601148392212878120732250'
nfe_number:
type: string
example: '779225'
nfe_series:
type: string
example: '24'
issue_date:
type: string
example: '2008-11-05T02:00:00.000000Z'
total_value:
type: string
example: '1022.69'
emit:
type: object
properties:
cnpj:
type: string
example: '67440952846444'
name:
type: string
example: 'Gerlach Ltd'
dest:
type: object
properties:
document:
type: string
example: '85041902037964'
name:
type: string
example: 'Sporer, Murray and Gutkowski'
supplier:
type: object
properties:
id:
type: string
example: a3295ffa-b8bc-4d3b-9ca1-6220c4920539
name:
type: string
example: 'Sr. Giovane Maicon Cervantes Neto'
document:
type: string
example: 10.605.945/0001-90
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:
- at
items:
type: string
parameters:
-
in: path
name: fiscalDocument
description: 'UUID da nota fiscal'
example: et
required: true
schema:
type: string
'/api/fiscal-documents/{fiscalDocument}/installments':
post:
summary: 'Create installment'
operationId: createInstallment
description: 'Lança uma cobrança avulsa na nota fiscal, para o boleto que o fornecedor cobra além das duplicatas do XML. Nasce pendente e sem conta no financeiro; a geração continua sendo pelo import-nfe.'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 84abad8e-0def-3651-ab01-db4521d91381
document_type: nfe
document_type_label: NF-e
service_description: null
nfe_access_key: '50095668849183015167179041654037945482319862'
nfe_number: '763901'
nfe_series: '76'
issue_date: '2004-01-27T02:00:00.000000Z'
total_value: '3609.42'
emit:
cnpj: '43600608156911'
name: "Hermann, O'Connell and Swift"
dest:
document: '84717747139869'
name: 'Lindgren, Senger and Halvorson'
supplier:
id: a3295ffa-cae2-4a26-8070-1ebd6895b107
name: 'Yasmin Marques Neto'
document: 63.506.978/0001-40
financial_status: pending
products_imported_at: null
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 84abad8e-0def-3651-ab01-db4521d91381
document_type:
type: string
example: nfe
document_type_label:
type: string
example: NF-e
service_description:
type: string
example: null
nullable: true
nfe_access_key:
type: string
example: '50095668849183015167179041654037945482319862'
nfe_number:
type: string
example: '763901'
nfe_series:
type: string
example: '76'
issue_date:
type: string
example: '2004-01-27T02:00:00.000000Z'
total_value:
type: string
example: '3609.42'
emit:
type: object
properties:
cnpj:
type: string
example: '43600608156911'
name:
type: string
example: "Hermann, O'Connell and Swift"
dest:
type: object
properties:
document:
type: string
example: '84717747139869'
name:
type: string
example: 'Lindgren, Senger and Halvorson'
supplier:
type: object
properties:
id:
type: string
example: a3295ffa-cae2-4a26-8070-1ebd6895b107
name:
type: string
example: 'Yasmin Marques Neto'
document:
type: string
example: 63.506.978/0001-40
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:
due_date:
type: string
description: 'Vencimento. O campo value deve ser uma data válida.'
example: '2024-01-01'
amount:
type: number
description: Valor.
example: 1.0
number:
type: string
description: 'Número da cobrança. O campo value não pode ser superior a 60 caracteres.'
example: 'Example Number'
nullable: true
required:
- due_date
- amount
parameters:
-
in: path
name: fiscalDocument
description: 'UUID da nota fiscal'
example: corrupti
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: 46883037-937c-3d34-a70c-10ac409054ef
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
auto_linked_count: 4
stock_launched_count: 7
pending_stock_launch_count: 3
imported_by: 'João Silva'
imported_at: '2023-12-01T10:30:00.000Z'
supplier:
id: supplier-uuid
name: 'Fornecedor Ltda'
document: '12345678000199'
fiscal_document:
id: fiscal-document-uuid
nfe_number: '123456'
works:
-
id: work-uuid
name: 'Hospital Bom Jesus'
cost_center:
id: cost-center-uuid
code: '002.001'
name: 'Hospital Bom Jesus'
-
id: work-uuid-2
name: 'Reforma Centro'
cost_center: null
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
auto_linked_count:
type: integer
example: 4
stock_launched_count:
type: integer
example: 7
pending_stock_launch_count:
type: integer
example: 3
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'
fiscal_document:
type: object
properties:
id:
type: string
example: fiscal-document-uuid
nfe_number:
type: string
example: '123456'
works:
type: array
example:
-
id: work-uuid
name: 'Hospital Bom Jesus'
cost_center:
id: cost-center-uuid
code: '002.001'
name: 'Hospital Bom Jesus'
-
id: work-uuid-2
name: 'Reforma Centro'
cost_center: null
items:
type: object
properties:
id:
type: string
example: work-uuid
name:
type: string
example: 'Hospital Bom Jesus'
cost_center:
type: object
properties:
id:
type: string
example: cost-center-uuid
code:
type: string
example: '002.001'
name:
type: string
example: 'Hospital Bom Jesus'
channel:
type: string
example: import-progress.9d2f8e4a-1b3c-4d5e-6f7a-8b9c0d1e2f3a
tags:
- Import
delete:
summary: 'Delete Import'
operationId: deleteImport
description: 'Delete an NFe import along with its supplier products and pending link mappings. Only allowed when no imported product has been linked to a system product and the import is not being processed.'
parameters: []
responses:
204:
description: 'Import deleted successfully'
content:
application/json:
schema:
type: object
nullable: true
422:
description: 'Import has linked products or is still processing'
content:
application/json:
schema:
type: object
example:
error: 'Não é possível excluir uma importação com produtos já vinculados.'
properties:
error:
type: string
example: 'Não é possível excluir uma importação com produtos já vinculados.'
tags:
- Import
parameters:
-
in: path
name: importId
description: ''
example: autem
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
has_stock_movement: false
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
has_stock_movement: false
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
has_stock_movement:
type: boolean
example: false
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: quia
required: true
schema:
type: string
'/api/imports/{importId}/distributions':
get:
summary: 'List Import Stock Distributions'
operationId: listImportStockDistributions
description: 'Return, per imported product, how the purchased quantity was distributed across stocks (works and main). Aggregated from stock movements generated by the import.'
parameters: []
responses:
200:
description: 'Distribution breakdown per product'
content:
application/json:
schema:
type: object
example:
data:
-
product:
id: product-uuid
name: 'Cano PVC XPTO'
total: 50
by_stock:
-
stock:
id: stock-uuid-a
name: 'Obra A'
is_main: false
quantity: 10
-
stock:
id: stock-uuid-b
name: 'Obra B'
is_main: false
quantity: 30
-
stock:
id: main-uuid
name: Principal
is_main: true
quantity: 10
properties:
data:
type: array
example:
-
product:
id: product-uuid
name: 'Cano PVC XPTO'
total: 50
by_stock:
-
stock:
id: stock-uuid-a
name: 'Obra A'
is_main: false
quantity: 10
-
stock:
id: stock-uuid-b
name: 'Obra B'
is_main: false
quantity: 30
-
stock:
id: main-uuid
name: Principal
is_main: true
quantity: 10
items:
type: object
properties:
product:
type: object
properties:
id:
type: string
example: product-uuid
name:
type: string
example: 'Cano PVC XPTO'
total:
type: integer
example: 50
by_stock:
type: array
example:
-
stock:
id: stock-uuid-a
name: 'Obra A'
is_main: false
quantity: 10
-
stock:
id: stock-uuid-b
name: 'Obra B'
is_main: false
quantity: 30
-
stock:
id: main-uuid
name: Principal
is_main: true
quantity: 10
items:
type: object
properties:
stock:
type: object
properties:
id:
type: string
example: stock-uuid-a
name:
type: string
example: 'Obra A'
is_main:
type: boolean
example: false
quantity:
type: integer
example: 10
tags:
- Import
parameters:
-
in: path
name: importId
description: ''
example: dolores
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:
- odit
items:
type: string
required:
- mappings
parameters:
-
in: path
name: importId
description: ''
example: dignissimos
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: 'qui veniam'
abbreviation: XK
-
id: null
name: 'cupiditate ut'
abbreviation: HS
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: 'qui veniam'
abbreviation: XK
-
id: null
name: 'cupiditate ut'
abbreviation: HS
items:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: 'qui veniam'
abbreviation:
type: string
example: XK
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: vero
nullable: true
sort_desc:
type: boolean
description: ''
example: false
nullable: true
page:
type: integer
description: 'O campo value deve ser pelo menos 1.'
example: 21
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: 23
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: Dibberttown
-
id: null
name: Wallaceville
properties:
data:
type: array
example:
-
id: null
name: Dibberttown
-
id: null
name: Wallaceville
items:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: Dibberttown
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: ad
required: false
schema:
type: string
description: ''
example: ad
-
in: query
name: document
description: ''
example: incidunt
required: false
schema:
type: string
description: ''
example: incidunt
-
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: cost_center_id
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the cost_centers table.'
example: 0cde452a-a564-3a1d-b326-738f9e51f654
required: false
schema:
type: string
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the cost_centers table.'
example: 0cde452a-a564-3a1d-b326-738f9e51f654
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: dbcfdcd5-8567-3b77-93bf-8cf447c7ec8b
receipt_number: REC-0806
receiver_type: custom
receiver:
id: null
name: "Miss Sydni O'Reilly"
document: 167.192.963-53
payment:
amount: 3179.3
amount_in_words: 'Valor por extenso de teste'
method: pix
description: 'Velit a et facere qui consectetur nesciunt.'
issuer:
name: 'Hermiston and Sons'
document: 42.084.544/4876-02
issue:
date: '2026-11-03'
city: Creolahaven
state: RJ
created_by:
id: a3295ffb-315e-47d4-b216-79a68daf9b31
name: 'Prof. Karson Kulas'
created_at: null
updated_at: null
-
id: 71f7d359-76ef-33fd-bfe0-6409c64c97b5
receipt_number: REC-5704
receiver_type: employee
receiver:
id: null
name: 'Samson Feest'
document: 313.312.512-98
payment:
amount: 7885.98
amount_in_words: 'Valor por extenso de teste'
method: check
description: 'Eveniet fuga fugiat dignissimos non aliquid esse quo sit.'
issuer:
name: 'Upton and Sons'
document: 40.975.184/7122-96
issue:
date: '2026-10-17'
city: Batzport
state: SP
created_by:
id: a3295ffb-3a1a-43e7-ba3a-f79411bfe616
name: 'Dr. Buford Kessler Sr.'
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: dbcfdcd5-8567-3b77-93bf-8cf447c7ec8b
receipt_number: REC-0806
receiver_type: custom
receiver:
id: null
name: "Miss Sydni O'Reilly"
document: 167.192.963-53
payment:
amount: 3179.3
amount_in_words: 'Valor por extenso de teste'
method: pix
description: 'Velit a et facere qui consectetur nesciunt.'
issuer:
name: 'Hermiston and Sons'
document: 42.084.544/4876-02
issue:
date: '2026-11-03'
city: Creolahaven
state: RJ
created_by:
id: a3295ffb-315e-47d4-b216-79a68daf9b31
name: 'Prof. Karson Kulas'
created_at: null
updated_at: null
-
id: 71f7d359-76ef-33fd-bfe0-6409c64c97b5
receipt_number: REC-5704
receiver_type: employee
receiver:
id: null
name: 'Samson Feest'
document: 313.312.512-98
payment:
amount: 7885.98
amount_in_words: 'Valor por extenso de teste'
method: check
description: 'Eveniet fuga fugiat dignissimos non aliquid esse quo sit.'
issuer:
name: 'Upton and Sons'
document: 40.975.184/7122-96
issue:
date: '2026-10-17'
city: Batzport
state: SP
created_by:
id: a3295ffb-3a1a-43e7-ba3a-f79411bfe616
name: 'Dr. Buford Kessler Sr.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: dbcfdcd5-8567-3b77-93bf-8cf447c7ec8b
receipt_number:
type: string
example: REC-0806
receiver_type:
type: string
example: custom
receiver:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: "Miss Sydni O'Reilly"
document:
type: string
example: 167.192.963-53
payment:
type: object
properties:
amount:
type: number
example: 3179.3
amount_in_words:
type: string
example: 'Valor por extenso de teste'
method:
type: string
example: pix
description:
type: string
example: 'Velit a et facere qui consectetur nesciunt.'
issuer:
type: object
properties:
name:
type: string
example: 'Hermiston and Sons'
document:
type: string
example: 42.084.544/4876-02
issue:
type: object
properties:
date:
type: string
example: '2026-11-03'
city:
type: string
example: Creolahaven
state:
type: string
example: RJ
created_by:
type: object
properties:
id:
type: string
example: a3295ffb-315e-47d4-b216-79a68daf9b31
name:
type: string
example: 'Prof. Karson Kulas'
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: 9007ace7-817d-448f-b632-da5133aa2360
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: 7e135069-639e-3e6d-831e-16c331425a04
nullable: true
cost_center_id:
type: string
description: 'Cost center id. The uuid of an existing record in the cost_centers table.'
example: 551baef9-77d0-3965-a90c-fc37cd971b82
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: 3908d31a-dc1e-30b2-8166-36efab3de5fe
nullable: true
required:
- receiver_type
- amount
- payment_method
- description
- issuer_name
- issuer_document
- issue_date
- city
- state
- cost_center_id
/api/payment-receipts/excel:
get:
summary: 'Export payment receipts to Excel'
operationId: exportPaymentReceiptsToExcel
description: 'Dispatches async Excel generation using the same filters as the listing. Frontend is notified via Pusher when ready.'
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: corporis
required: false
schema:
type: string
description: ''
example: corporis
-
in: query
name: document
description: ''
example: eaque
required: false
schema:
type: string
description: ''
example: eaque
-
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: cost_center_id
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the cost_centers table.'
example: 2c10ac21-a902-33fd-868f-c1cf93dcfb74
required: false
schema:
type: string
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the cost_centers table.'
example: 2c10ac21-a902-33fd-868f-c1cf93dcfb74
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:
202:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
channel: string
event: string
properties:
message:
type: string
example: string
channel:
type: string
example: string
event:
type: string
example: string
422:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- 'Payment Receipts'
/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: check
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: 2e7ab2fd-3c9e-3916-8cbf-5b7ff756031e
receipt_number: REC-4697
receiver_type: custom
receiver:
id: null
name: 'Jaunita Torp'
document: 528.915.967-85
payment:
amount: 8853.8
amount_in_words: 'Valor por extenso de teste'
method: bank_transfer
description: 'Dolores voluptates temporibus architecto dolores minima eius.'
issuer:
name: 'Lockman, McClure and Prohaska'
document: 31.936.280/3093-93
issue:
date: '2026-10-23'
city: Keiraberg
state: SC
created_by:
id: a3295ffb-5ff4-40a6-9717-43a17f501ab3
name: 'Casandra Franecki'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 2e7ab2fd-3c9e-3916-8cbf-5b7ff756031e
receipt_number:
type: string
example: REC-4697
receiver_type:
type: string
example: custom
receiver:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: 'Jaunita Torp'
document:
type: string
example: 528.915.967-85
payment:
type: object
properties:
amount:
type: number
example: 8853.8
amount_in_words:
type: string
example: 'Valor por extenso de teste'
method:
type: string
example: bank_transfer
description:
type: string
example: 'Dolores voluptates temporibus architecto dolores minima eius.'
issuer:
type: object
properties:
name:
type: string
example: 'Lockman, McClure and Prohaska'
document:
type: string
example: 31.936.280/3093-93
issue:
type: object
properties:
date:
type: string
example: '2026-10-23'
city:
type: string
example: Keiraberg
state:
type: string
example: SC
created_by:
type: object
properties:
id:
type: string
example: a3295ffb-5ff4-40a6-9717-43a17f501ab3
name:
type: string
example: 'Casandra Franecki'
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: 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: db1b29ef-0618-4f87-84c1-71b568acd464
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: 80212a3c-5535-3ab6-9a79-28139997228a
nullable: true
cost_center_id:
type: string
description: 'Cost center id. The uuid of an existing record in the cost_centers table.'
example: 30819968-945f-3a4d-bd45-459cdc84d285
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: b8e0adb8-0542-3fd6-b040-2420d9794ba3
nullable: true
required:
- cost_center_id
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: 5a634ead-f262-3748-bf6f-38afcf475f99
receipt_number: REC-5913
receiver_type: custom
receiver:
id: null
name: 'Rick Will'
document: 603.882.945-06
payment:
amount: 9235.18
amount_in_words: 'Valor por extenso de teste'
method: cash
description: 'Eos voluptas aut aperiam.'
issuer:
name: Hammes-Aufderhar
document: 86.605.287/8940-68
issue:
date: '2026-10-19'
city: Rennerside
state: SC
created_by:
id: a3295ffb-979b-44e0-b5a1-e958b4ba2d4d
name: 'Dell Grimes'
created_at: null
updated_at: null
-
id: a345b796-7d4d-3b05-b80b-797240326a04
receipt_number: REC-2833
receiver_type: employee
receiver:
id: null
name: 'Dr. Telly Stark Jr.'
document: 147.506.999-91
payment:
amount: 3755.27
amount_in_words: 'Valor por extenso de teste'
method: bank_transfer
description: 'Nulla ullam et praesentium dolorem inventore voluptatum mollitia.'
issuer:
name: 'Rodriguez, Dach and Trantow'
document: 74.438.262/4375-73
issue:
date: '2026-10-19'
city: Davonteburgh
state: PE
created_by:
id: a3295ffb-9a14-42f2-97fd-bcf85f1c23d5
name: 'Tracey Heaney'
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: 5a634ead-f262-3748-bf6f-38afcf475f99
receipt_number: REC-5913
receiver_type: custom
receiver:
id: null
name: 'Rick Will'
document: 603.882.945-06
payment:
amount: 9235.18
amount_in_words: 'Valor por extenso de teste'
method: cash
description: 'Eos voluptas aut aperiam.'
issuer:
name: Hammes-Aufderhar
document: 86.605.287/8940-68
issue:
date: '2026-10-19'
city: Rennerside
state: SC
created_by:
id: a3295ffb-979b-44e0-b5a1-e958b4ba2d4d
name: 'Dell Grimes'
created_at: null
updated_at: null
-
id: a345b796-7d4d-3b05-b80b-797240326a04
receipt_number: REC-2833
receiver_type: employee
receiver:
id: null
name: 'Dr. Telly Stark Jr.'
document: 147.506.999-91
payment:
amount: 3755.27
amount_in_words: 'Valor por extenso de teste'
method: bank_transfer
description: 'Nulla ullam et praesentium dolorem inventore voluptatum mollitia.'
issuer:
name: 'Rodriguez, Dach and Trantow'
document: 74.438.262/4375-73
issue:
date: '2026-10-19'
city: Davonteburgh
state: PE
created_by:
id: a3295ffb-9a14-42f2-97fd-bcf85f1c23d5
name: 'Tracey Heaney'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 5a634ead-f262-3748-bf6f-38afcf475f99
receipt_number:
type: string
example: REC-5913
receiver_type:
type: string
example: custom
receiver:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: 'Rick Will'
document:
type: string
example: 603.882.945-06
payment:
type: object
properties:
amount:
type: number
example: 9235.18
amount_in_words:
type: string
example: 'Valor por extenso de teste'
method:
type: string
example: cash
description:
type: string
example: 'Eos voluptas aut aperiam.'
issuer:
type: object
properties:
name:
type: string
example: Hammes-Aufderhar
document:
type: string
example: 86.605.287/8940-68
issue:
type: object
properties:
date:
type: string
example: '2026-10-19'
city:
type: string
example: Rennerside
state:
type: string
example: SC
created_by:
type: object
properties:
id:
type: string
example: a3295ffb-979b-44e0-b5a1-e958b4ba2d4d
name:
type: string
example: 'Dell Grimes'
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: 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/permission-groups/ungrouped-permissions:
get:
summary: 'List ungrouped permissions'
operationId: listUngroupedPermissions
description: 'List all permissions that do not belong to any permission group.'
parameters:
-
in: query
name: q
description: 'Search query.'
example: 'Permission name'
required: false
schema:
type: string
description: 'Search query.'
example: 'Permission name'
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
-
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
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 836e690e-5cf6-3f5b-a477-d304c16fc682
name: non
display_name: 'Soluta accusantium neque est consequatur.'
-
id: 4ab72aec-dc40-3813-aee1-143da6e03d49
name: voluptas
display_name: 'Excepturi voluptatum eligendi dolor sunt ad pariatur.'
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: 836e690e-5cf6-3f5b-a477-d304c16fc682
name: non
display_name: 'Soluta accusantium neque est consequatur.'
-
id: 4ab72aec-dc40-3813-aee1-143da6e03d49
name: voluptas
display_name: 'Excepturi voluptatum eligendi dolor sunt ad pariatur.'
items:
type: object
properties:
id:
type: string
example: 836e690e-5cf6-3f5b-a477-d304c16fc682
name:
type: string
example: non
display_name:
type: string
example: 'Soluta accusantium neque est consequatur.'
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'
/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: 10802bf3-fce2-3906-86bc-66fa32904256
name: qui-asperiores-et
display_name: 'repudiandae nam maiores'
created_at: null
updated_at: null
-
id: 1ae6a27c-848f-3b06-bb0d-a5b5041f45cd
name: cumque-nam-sint
display_name: 'sed eum ipsam'
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: 10802bf3-fce2-3906-86bc-66fa32904256
name: qui-asperiores-et
display_name: 'repudiandae nam maiores'
created_at: null
updated_at: null
-
id: 1ae6a27c-848f-3b06-bb0d-a5b5041f45cd
name: cumque-nam-sint
display_name: 'sed eum ipsam'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 10802bf3-fce2-3906-86bc-66fa32904256
name:
type: string
example: qui-asperiores-et
display_name:
type: string
example: 'repudiandae nam maiores'
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: e754e2ea-76e7-3906-8d3b-2423182fda43
name: explicabo-id-vero
display_name: 'recusandae velit non'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: e754e2ea-76e7-3906-8d3b-2423182fda43
name:
type: string
example: explicabo-id-vero
display_name:
type: string
example: 'recusandae velit non'
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/permission-groups/{permissionGroup}/permissions':
post:
summary: 'Attach permissions to group'
operationId: attachPermissionsToGroup
description: 'Attach one or more permissions to a permission group. Permissions already in another group are moved to this group.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: c786111d-7d8d-322d-b2b7-046edfc85670
name: occaecati-eveniet-cupiditate
display_name: 'labore natus id'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: c786111d-7d8d-322d-b2b7-046edfc85670
name:
type: string
example: occaecati-eveniet-cupiditate
display_name:
type: string
example: 'labore natus id'
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Permission Groups'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
permissions:
type: array
description: 'ID da permissão. O campo value deve ser um UUID válido. The uuid of an existing record in the permissions table.'
example:
- b99efcd7-fbdd-39d1-9209-691eadce7438
items:
type: string
required:
- permissions
delete:
summary: 'Detach permissions from group'
operationId: detachPermissionsFromGroup
description: 'Detach one or more permissions from a permission group. Fails if any permission does not belong to the group.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 0a321d5e-2612-3c6a-8b0b-5f19ce7a7766
name: dignissimos-aut-qui
display_name: 'natus praesentium incidunt'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 0a321d5e-2612-3c6a-8b0b-5f19ce7a7766
name:
type: string
example: dignissimos-aut-qui
display_name:
type: string
example: 'natus praesentium incidunt'
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Permission Groups'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
permissions:
type: array
description: 'ID da permissão. O campo value deve ser um UUID válido. The uuid of an existing record in the permissions table.'
example:
- 1cb29fd2-c263-32bb-ad66-d907526d326e
items:
type: string
required:
- permissions
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: 7e1e0713-d184-3003-8cff-46a651b6edc8
name: 'Stephanie Daniela Deverso Jr.'
created_at: null
updated_at: null
-
id: b067e867-f96b-3f3a-8cb2-17a7b1da59be
name: 'Sr. Mário Manuel Carrara Jr.'
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: 7e1e0713-d184-3003-8cff-46a651b6edc8
name: 'Stephanie Daniela Deverso Jr.'
created_at: null
updated_at: null
-
id: b067e867-f96b-3f3a-8cb2-17a7b1da59be
name: 'Sr. Mário Manuel Carrara Jr.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 7e1e0713-d184-3003-8cff-46a651b6edc8
name:
type: string
example: 'Stephanie Daniela Deverso Jr.'
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: aa01d287-adca-3921-9ce6-5684160625be
name: 'Alma Beltrão Faro Jr.'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: aa01d287-adca-3921-9ce6-5684160625be
name:
type: string
example: 'Alma Beltrão Faro 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: excepturi
required: true
schema:
type: string
/api/product-families:
get:
summary: 'List product families'
operationId: listProductFamilies
description: 'List all product families'
parameters:
-
in: query
name: is_epi
description: ''
example: false
required: false
schema:
type: boolean
description: ''
example: false
-
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: 73f31a9d-fe56-301c-9e62-4889ea52ca41
name: 'George Ricardo Gusmão Neto'
is_epi: false
created_at: null
updated_at: null
-
id: 967c0d32-7c5b-3b63-9ffc-08784aff7d46
name: 'Dr. Amanda Catarina Serna'
is_epi: 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: 73f31a9d-fe56-301c-9e62-4889ea52ca41
name: 'George Ricardo Gusmão Neto'
is_epi: false
created_at: null
updated_at: null
-
id: 967c0d32-7c5b-3b63-9ffc-08784aff7d46
name: 'Dr. Amanda Catarina Serna'
is_epi: false
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 73f31a9d-fe56-301c-9e62-4889ea52ca41
name:
type: string
example: 'George Ricardo Gusmão Neto'
is_epi:
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:
- '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'
is_epi:
type: boolean
description: 'É família de EPI.'
example: true
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: 37a0e428-589a-3f52-82b2-ef389135f9d4
name: 'Sra. Franciele Paloma Mendes Filho'
is_epi: false
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 37a0e428-589a-3f52-82b2-ef389135f9d4
name:
type: string
example: 'Sra. Franciele Paloma Mendes Filho'
is_epi:
type: boolean
example: false
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'
is_epi:
type: boolean
description: 'É família de EPI.'
example: true
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: tempore
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: e1532b3a-8785-3f96-bbbb-5abf033270ab
name: 'Ullam unde et aliquam.'
description: null
work:
id: a3295ffc-3344-4eb5-9534-8e9e9667b22e
name: 'Mauro Ferreira de Oliveira Sobrinho'
user:
id: a3295ffc-35f0-4962-8fc0-541b76dce414
name: 'Ms. Heloise Emard DVM'
created_at: null
updated_at: null
-
id: 17e55f38-9cb8-3cba-980f-889b47b7a760
name: 'Qui consectetur et.'
description: null
work:
id: a3295ffc-3949-4dd6-bb6d-557af6915c28
name: 'Mari Noemi Abreu Neto'
user:
id: a3295ffc-3c00-410d-8814-3f4eb68e72e1
name: 'Lela Reynolds'
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: e1532b3a-8785-3f96-bbbb-5abf033270ab
name: 'Ullam unde et aliquam.'
description: null
work:
id: a3295ffc-3344-4eb5-9534-8e9e9667b22e
name: 'Mauro Ferreira de Oliveira Sobrinho'
user:
id: a3295ffc-35f0-4962-8fc0-541b76dce414
name: 'Ms. Heloise Emard DVM'
created_at: null
updated_at: null
-
id: 17e55f38-9cb8-3cba-980f-889b47b7a760
name: 'Qui consectetur et.'
description: null
work:
id: a3295ffc-3949-4dd6-bb6d-557af6915c28
name: 'Mari Noemi Abreu Neto'
user:
id: a3295ffc-3c00-410d-8814-3f4eb68e72e1
name: 'Lela Reynolds'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: e1532b3a-8785-3f96-bbbb-5abf033270ab
name:
type: string
example: 'Ullam unde et aliquam.'
description:
type: string
example: null
nullable: true
work:
type: object
properties:
id:
type: string
example: a3295ffc-3344-4eb5-9534-8e9e9667b22e
name:
type: string
example: 'Mauro Ferreira de Oliveira Sobrinho'
user:
type: object
properties:
id:
type: string
example: a3295ffc-35f0-4962-8fc0-541b76dce414
name:
type: string
example: 'Ms. Heloise Emard DVM'
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: 81bc507f-211b-35cc-899e-71d7530ad055
nullable: true
user_id:
type: string
description: 'Usuário. The uuid of an existing record in the users table.'
example: 27858add-9e1b-384b-b6f5-3a06505c1b79
nullable: true
responsible_id:
type: string
description: 'Responsável. The uuid of an existing record in the users table.'
example: 1bc2968d-c43b-3bd5-8b34-977748b56dc7
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: 0a7231ca-2e5d-3403-af35-ccf7e7c097b3
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: 0236b20f-5498-33bd-b88f-f975dae5e3c4
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: 6e18b351-3395-3d87-8d3f-a59ab94c0bd3
name: 'Similique suscipit consequatur numquam.'
description: 'Officiis delectus et veniam reiciendis. Eos culpa aliquid doloribus reiciendis.'
work:
id: a3295ffc-43b0-4b63-a7d3-9c8a9c138564
name: 'Leandro Josué Benez'
user:
id: a3295ffc-46ad-4099-adfc-ddacd19a943a
name: 'Kassandra Considine III'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 6e18b351-3395-3d87-8d3f-a59ab94c0bd3
name:
type: string
example: 'Similique suscipit consequatur numquam.'
description:
type: string
example: 'Officiis delectus et veniam reiciendis. Eos culpa aliquid doloribus reiciendis.'
work:
type: object
properties:
id:
type: string
example: a3295ffc-43b0-4b63-a7d3-9c8a9c138564
name:
type: string
example: 'Leandro Josué Benez'
user:
type: object
properties:
id:
type: string
example: a3295ffc-46ad-4099-adfc-ddacd19a943a
name:
type: string
example: 'Kassandra Considine III'
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: 72aa2c36-43ee-3824-a334-0a6709f50e62
product_id:
type: string
description: 'Produto. The uuid of an existing record in the products table.'
example: a6b733e3-1f32-3cfe-9162-eaff7d8e6a8d
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: et
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: 8629f2fe-814d-3b26-8202-110375f3ce15
product:
id: a3295ffc-5c96-4171-b033-b0ed0db9c1ad
name: 'Mauro Verdara Rico Jr.'
code: PRD-431993
unit:
id: a3295ffc-5a83-4f07-a2e3-195d3d90bb3d
name: 'Betina Sanches Perez'
abbreviation: 'Sra. Dayane Valentin Neto'
quantity: 539.2014
observation: 'Aliquid quam rerum facilis aspernatur omnis sint.'
created_at: null
updated_at: null
-
id: 431783c2-a084-33e8-aa2e-6494a125486f
product:
id: a3295ffc-6c48-4f2a-90e0-13d8bd511447
name: 'Sr. Flávio Aguiar Madeira Sobrinho'
code: PRD-773697
unit:
id: a3295ffc-6b0c-4732-a3de-f7ffa0f25f32
name: 'Flávio Lira Aguiar Sobrinho'
abbreviation: 'Dr. Erik Simon Padilha'
quantity: 409.7053
observation: null
created_at: null
updated_at: null
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Anterior'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Próximo »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
properties:
data:
type: array
example:
-
id: 8629f2fe-814d-3b26-8202-110375f3ce15
product:
id: a3295ffc-5c96-4171-b033-b0ed0db9c1ad
name: 'Mauro Verdara Rico Jr.'
code: PRD-431993
unit:
id: a3295ffc-5a83-4f07-a2e3-195d3d90bb3d
name: 'Betina Sanches Perez'
abbreviation: 'Sra. Dayane Valentin Neto'
quantity: 539.2014
observation: 'Aliquid quam rerum facilis aspernatur omnis sint.'
created_at: null
updated_at: null
-
id: 431783c2-a084-33e8-aa2e-6494a125486f
product:
id: a3295ffc-6c48-4f2a-90e0-13d8bd511447
name: 'Sr. Flávio Aguiar Madeira Sobrinho'
code: PRD-773697
unit:
id: a3295ffc-6b0c-4732-a3de-f7ffa0f25f32
name: 'Flávio Lira Aguiar Sobrinho'
abbreviation: 'Dr. Erik Simon Padilha'
quantity: 409.7053
observation: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 8629f2fe-814d-3b26-8202-110375f3ce15
product:
type: object
properties:
id:
type: string
example: a3295ffc-5c96-4171-b033-b0ed0db9c1ad
name:
type: string
example: 'Mauro Verdara Rico Jr.'
code:
type: string
example: PRD-431993
unit:
type: object
properties:
id:
type: string
example: a3295ffc-5a83-4f07-a2e3-195d3d90bb3d
name:
type: string
example: 'Betina Sanches Perez'
abbreviation:
type: string
example: 'Sra. Dayane Valentin Neto'
quantity:
type: number
example: 539.2014
observation:
type: string
example: 'Aliquid quam rerum facilis aspernatur omnis sint.'
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: 7f292008-6863-3624-ab52-7c2001d4eeb4
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:
- 8ff07637-e911-3c86-8e98-dabc44c8965f
items:
type: string
required:
- items
parameters:
-
in: path
name: productQuantityList
description: 'Product Quantity List UUID'
example: id
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: unde
required: true
schema:
type: string
-
in: path
name: item
description: 'Product Quantity List Item UUID'
example: sed
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: 01540724-9f3e-3086-b8d5-0047e4046223
product_id:
type: string
description: 'Produto. The uuid of an existing record in the products table.'
example: cf02bbb5-65ca-3ffa-9ed0-8ad99321898b
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: ea
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: 9583bc3a-e0fb-3c1b-a646-eb8ac04a441e
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: f65bbb61-9849-3a4f-9319-f1f0dc60e0ed
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: 6d4ac084-f6c5-367b-9023-d6a9a6a9ad36
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: alias
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: 414668be-857e-3e49-bfc1-2dde650196c0
quantity: 53.5578
fulfilled_at: '2026-10-23T12:18:04.000000Z'
created_at: null
-
id: 3fde187e-41ae-3117-bfd8-2679cb861327
quantity: 96.8006
fulfilled_at: '2026-10-28T20:09:11.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: 414668be-857e-3e49-bfc1-2dde650196c0
quantity: 53.5578
fulfilled_at: '2026-10-23T12:18:04.000000Z'
created_at: null
-
id: 3fde187e-41ae-3117-bfd8-2679cb861327
quantity: 96.8006
fulfilled_at: '2026-10-28T20:09:11.000000Z'
created_at: null
items:
type: object
properties:
id:
type: string
example: 414668be-857e-3e49-bfc1-2dde650196c0
quantity:
type: number
example: 53.5578
fulfilled_at:
type: string
example: '2026-10-23T12:18:04.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: fugiat
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: cc1721a8-625f-3b0f-8f27-daa8e96974b0
product:
id: a3296001-531a-4a31-b000-314d90e7d699
name: 'Beatriz Godói'
code: PRD-487381
unit:
id: a3296001-51e2-444a-bf93-bf5208df6127
name: 'Vitória Noa Espinoza'
abbreviation: 'Guilherme Aaron Molina Jr.'
quantity: 45.5158
quantity_fulfilled: 0
quantity_pending: 45.5158
is_fulfilled: false
is_partially_fulfilled: false
observation: 'Perspiciatis rerum nemo cum molestiae.'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: cc1721a8-625f-3b0f-8f27-daa8e96974b0
product:
type: object
properties:
id:
type: string
example: a3296001-531a-4a31-b000-314d90e7d699
name:
type: string
example: 'Beatriz Godói'
code:
type: string
example: PRD-487381
unit:
type: object
properties:
id:
type: string
example: a3296001-51e2-444a-bf93-bf5208df6127
name:
type: string
example: 'Vitória Noa Espinoza'
abbreviation:
type: string
example: 'Guilherme Aaron Molina Jr.'
quantity:
type: number
example: 45.5158
quantity_fulfilled:
type: integer
example: 0
quantity_pending:
type: number
example: 45.5158
is_fulfilled:
type: boolean
example: false
is_partially_fulfilled:
type: boolean
example: false
observation:
type: string
example: 'Perspiciatis rerum nemo cum molestiae.'
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: 3a37e85b-9ebf-3505-a1f2-9e82605ca4a2
nullable: true
parameters:
-
in: path
name: id
description: 'The ID of the item.'
example: perspiciatis
required: true
schema:
type: string
-
in: path
name: item
description: 'Product Request Item UUID'
example: earum
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: e632cc92-2732-3790-8404-59ad3d2613d5
product:
id: a3296001-67e2-4a64-86cd-9316f0f5197d
name: 'Jerônimo César Carvalho Sobrinho'
code: PRD-258776
unit:
id: a3296001-66ac-4b68-beaa-cbeb7336669b
name: 'Srta. Stephanie Gomes Neto'
abbreviation: 'Sr. Artur Urias Jr.'
quantity: 674.5476
quantity_fulfilled: 0
quantity_pending: 674.5476
is_fulfilled: false
is_partially_fulfilled: false
observation: null
created_at: null
updated_at: null
-
id: f6000afc-3629-3e91-b358-8d8d4b1695d9
product:
id: a3296001-7db7-436c-bca4-0cb09387fe2f
name: 'Sr. David Joaquin Amaral'
code: PRD-572578
unit:
id: a3296001-7cac-4936-b084-618033b395aa
name: 'Dr. Gabriel Franco Queirós'
abbreviation: 'Marisa Serra'
quantity: 684.8509
quantity_fulfilled: 0
quantity_pending: 684.8509
is_fulfilled: false
is_partially_fulfilled: false
observation: null
created_at: null
updated_at: null
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Anterior'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Próximo »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
properties:
data:
type: array
example:
-
id: e632cc92-2732-3790-8404-59ad3d2613d5
product:
id: a3296001-67e2-4a64-86cd-9316f0f5197d
name: 'Jerônimo César Carvalho Sobrinho'
code: PRD-258776
unit:
id: a3296001-66ac-4b68-beaa-cbeb7336669b
name: 'Srta. Stephanie Gomes Neto'
abbreviation: 'Sr. Artur Urias Jr.'
quantity: 674.5476
quantity_fulfilled: 0
quantity_pending: 674.5476
is_fulfilled: false
is_partially_fulfilled: false
observation: null
created_at: null
updated_at: null
-
id: f6000afc-3629-3e91-b358-8d8d4b1695d9
product:
id: a3296001-7db7-436c-bca4-0cb09387fe2f
name: 'Sr. David Joaquin Amaral'
code: PRD-572578
unit:
id: a3296001-7cac-4936-b084-618033b395aa
name: 'Dr. Gabriel Franco Queirós'
abbreviation: 'Marisa Serra'
quantity: 684.8509
quantity_fulfilled: 0
quantity_pending: 684.8509
is_fulfilled: false
is_partially_fulfilled: false
observation: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: e632cc92-2732-3790-8404-59ad3d2613d5
product:
type: object
properties:
id:
type: string
example: a3296001-67e2-4a64-86cd-9316f0f5197d
name:
type: string
example: 'Jerônimo César Carvalho Sobrinho'
code:
type: string
example: PRD-258776
unit:
type: object
properties:
id:
type: string
example: a3296001-66ac-4b68-beaa-cbeb7336669b
name:
type: string
example: 'Srta. Stephanie Gomes Neto'
abbreviation:
type: string
example: 'Sr. Artur Urias Jr.'
quantity:
type: number
example: 674.5476
quantity_fulfilled:
type: integer
example: 0
quantity_pending:
type: number
example: 674.5476
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
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: suscipit
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: 757f674b-ac75-3189-9cd6-b980b2bbecf2
product:
id: a3296001-91cb-4b5f-8a83-8b11534c751c
name: 'Aaron Marques Barros'
code: PRD-609435
unit:
id: a3296001-90bc-4b70-a81f-e5d46d676eae
name: 'Dr. Isadora Roque'
abbreviation: 'Marta Sarah Verdugo Sobrinho'
quantity: 729.685
quantity_fulfilled: 0
quantity_pending: 729.685
is_fulfilled: false
is_partially_fulfilled: false
observation: null
created_at: null
updated_at: null
-
id: 05b9f4ce-2247-358d-b2b4-cdb2d5d02c15
product:
id: a3296001-a30b-46e2-89fb-79db2ee627c5
name: 'Gael Cordeiro'
code: PRD-200785
unit:
id: a3296001-a1d8-4575-83c5-e60bf94a3ed4
name: 'Srta. Anita Rosa Sobrinho'
abbreviation: 'Sra. Manuela Oliveira Filho'
quantity: 547.5845
quantity_fulfilled: 0
quantity_pending: 547.5845
is_fulfilled: false
is_partially_fulfilled: false
observation: 'Ipsam aut iusto non ut officia itaque quam.'
created_at: null
updated_at: null
properties:
data:
type: array
example:
-
id: 757f674b-ac75-3189-9cd6-b980b2bbecf2
product:
id: a3296001-91cb-4b5f-8a83-8b11534c751c
name: 'Aaron Marques Barros'
code: PRD-609435
unit:
id: a3296001-90bc-4b70-a81f-e5d46d676eae
name: 'Dr. Isadora Roque'
abbreviation: 'Marta Sarah Verdugo Sobrinho'
quantity: 729.685
quantity_fulfilled: 0
quantity_pending: 729.685
is_fulfilled: false
is_partially_fulfilled: false
observation: null
created_at: null
updated_at: null
-
id: 05b9f4ce-2247-358d-b2b4-cdb2d5d02c15
product:
id: a3296001-a30b-46e2-89fb-79db2ee627c5
name: 'Gael Cordeiro'
code: PRD-200785
unit:
id: a3296001-a1d8-4575-83c5-e60bf94a3ed4
name: 'Srta. Anita Rosa Sobrinho'
abbreviation: 'Sra. Manuela Oliveira Filho'
quantity: 547.5845
quantity_fulfilled: 0
quantity_pending: 547.5845
is_fulfilled: false
is_partially_fulfilled: false
observation: 'Ipsam aut iusto non ut officia itaque quam.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 757f674b-ac75-3189-9cd6-b980b2bbecf2
product:
type: object
properties:
id:
type: string
example: a3296001-91cb-4b5f-8a83-8b11534c751c
name:
type: string
example: 'Aaron Marques Barros'
code:
type: string
example: PRD-609435
unit:
type: object
properties:
id:
type: string
example: a3296001-90bc-4b70-a81f-e5d46d676eae
name:
type: string
example: 'Dr. Isadora Roque'
abbreviation:
type: string
example: 'Marta Sarah Verdugo Sobrinho'
quantity:
type: number
example: 729.685
quantity_fulfilled:
type: integer
example: 0
quantity_pending:
type: number
example: 729.685
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: quam
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: 41be78ab-e1e2-359e-ae9a-d0de03ca7e66
code: null
name: 'Omnis molestiae.'
description: null
work:
id: a3295ffe-2039-4626-9874-06ce2d852834
name: 'Dr. Sophie Alessandra Lutero'
user:
id: a3295ffe-232b-4e89-b150-e30133e97529
name: 'Kristopher Dach'
status:
id: a3295ffe-2500-44ea-b09b-2ca56b275543
slug: null
name: null
description: 'Débora Delgado'
abbreviation: omnis
color: '#11e1d8'
text_color: '#b69466'
priority: medium
priority_label: Média
needed_at: '2026-11-19'
approved_at: null
rejection_reason: null
created_at: null
updated_at: null
-
id: 9191cc6b-18a3-34b8-b19a-13e91d8f33de
code: null
name: 'Nihil eos quia debitis.'
description: null
work:
id: a3295ffe-2992-4d75-95da-99b1c6b1a7a3
name: 'Aaron Queirós'
user:
id: a3295ffe-2ca3-43f4-80cb-ab0319d4affb
name: 'Amya Carroll'
status:
id: a3295ffe-2eb0-4c98-858e-cb762249202e
slug: null
name: null
description: 'Sr. Simão Azevedo Batista'
abbreviation: quia
color: '#2710eb'
text_color: '#6b9d89'
priority: urgent
priority_label: Urgente
needed_at: null
approved_at: null
rejection_reason: null
created_at: null
updated_at: null
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Anterior'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Próximo »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
properties:
data:
type: array
example:
-
id: 41be78ab-e1e2-359e-ae9a-d0de03ca7e66
code: null
name: 'Omnis molestiae.'
description: null
work:
id: a3295ffe-2039-4626-9874-06ce2d852834
name: 'Dr. Sophie Alessandra Lutero'
user:
id: a3295ffe-232b-4e89-b150-e30133e97529
name: 'Kristopher Dach'
status:
id: a3295ffe-2500-44ea-b09b-2ca56b275543
slug: null
name: null
description: 'Débora Delgado'
abbreviation: omnis
color: '#11e1d8'
text_color: '#b69466'
priority: medium
priority_label: Média
needed_at: '2026-11-19'
approved_at: null
rejection_reason: null
created_at: null
updated_at: null
-
id: 9191cc6b-18a3-34b8-b19a-13e91d8f33de
code: null
name: 'Nihil eos quia debitis.'
description: null
work:
id: a3295ffe-2992-4d75-95da-99b1c6b1a7a3
name: 'Aaron Queirós'
user:
id: a3295ffe-2ca3-43f4-80cb-ab0319d4affb
name: 'Amya Carroll'
status:
id: a3295ffe-2eb0-4c98-858e-cb762249202e
slug: null
name: null
description: 'Sr. Simão Azevedo Batista'
abbreviation: quia
color: '#2710eb'
text_color: '#6b9d89'
priority: urgent
priority_label: Urgente
needed_at: null
approved_at: null
rejection_reason: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 41be78ab-e1e2-359e-ae9a-d0de03ca7e66
code:
type: string
example: null
nullable: true
name:
type: string
example: 'Omnis molestiae.'
description:
type: string
example: null
nullable: true
work:
type: object
properties:
id:
type: string
example: a3295ffe-2039-4626-9874-06ce2d852834
name:
type: string
example: 'Dr. Sophie Alessandra Lutero'
user:
type: object
properties:
id:
type: string
example: a3295ffe-232b-4e89-b150-e30133e97529
name:
type: string
example: 'Kristopher Dach'
status:
type: object
properties:
id:
type: string
example: a3295ffe-2500-44ea-b09b-2ca56b275543
slug:
type: string
example: null
nullable: true
name:
type: string
example: null
nullable: true
description:
type: string
example: 'Débora Delgado'
abbreviation:
type: string
example: omnis
color:
type: string
example: '#11e1d8'
text_color:
type: string
example: '#b69466'
priority:
type: string
example: medium
priority_label:
type: string
example: Média
needed_at:
type: string
example: '2026-11-19'
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: f73fd794-51d0-3dfe-b41b-1d4113651a83
nullable: true
work_location_id:
type: string
description: 'Local da obra. The uuid of an existing record in the work_locations table.'
example: 47ea20da-a2e9-37d8-9012-4113dd1738c8
nullable: true
user_id:
type: string
description: 'Usuário. The uuid of an existing record in the users table.'
example: 789b581b-5151-3a51-8131-6240f2847381
nullable: true
status_id:
type: string
description: 'Status. The uuid of an existing record in the statuses table.'
example: c0018b70-0736-365f-8ecf-d99fa442c09b
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: 93933037-5e8e-35f4-a088-17ab6af7567a
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: 9695dc8e-511c-3e99-b317-8c6eaf488889
work_location_id:
type: string
description: 'Local da obra. The uuid of an existing record in the work_locations table.'
example: a0064262-a0e3-39c4-8667-313fb748107e
nullable: true
status_id:
type: string
description: 'Status. The uuid of an existing record in the statuses table.'
example: 8ec79828-c98c-37e6-b950-58c47cbe53a2
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: 6fb41ce7-f4df-345f-8a11-795554782546
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: 3aca14ab-99dc-30e4-8a35-29228fcd3d63
code: null
name: 'Id nulla eaque et.'
description: null
work:
id: a3295ffe-38cf-447d-acdc-c0f50763ec06
name: 'Srta. Mariah Vanessa Maia'
user:
id: a3295ffe-3bec-47c2-b2cb-d6b02c099a4c
name: 'Bert Gusikowski'
status:
id: a3295ffe-3dfd-4849-b349-fee312e361aa
slug: null
name: null
description: 'Srta. Anita Ávila Serna'
abbreviation: explicabo
color: '#a53c4c'
text_color: '#49f568'
priority: high
priority_label: Alta
needed_at: '2026-12-03'
approved_at: null
rejection_reason: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 3aca14ab-99dc-30e4-8a35-29228fcd3d63
code:
type: string
example: null
nullable: true
name:
type: string
example: 'Id nulla eaque et.'
description:
type: string
example: null
nullable: true
work:
type: object
properties:
id:
type: string
example: a3295ffe-38cf-447d-acdc-c0f50763ec06
name:
type: string
example: 'Srta. Mariah Vanessa Maia'
user:
type: object
properties:
id:
type: string
example: a3295ffe-3bec-47c2-b2cb-d6b02c099a4c
name:
type: string
example: 'Bert Gusikowski'
status:
type: object
properties:
id:
type: string
example: a3295ffe-3dfd-4849-b349-fee312e361aa
slug:
type: string
example: null
nullable: true
name:
type: string
example: null
nullable: true
description:
type: string
example: 'Srta. Anita Ávila Serna'
abbreviation:
type: string
example: explicabo
color:
type: string
example: '#a53c4c'
text_color:
type: string
example: '#49f568'
priority:
type: string
example: high
priority_label:
type: string
example: Alta
needed_at:
type: string
example: '2026-12-03'
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: d06976f9-8dd9-3d82-95ea-88c966d4b981
work_location_id:
type: string
description: 'Local da obra. The uuid of an existing record in the work_locations table.'
example: 891f559e-48b5-3ba2-897f-de1db31db81c
nullable: true
status_id:
type: string
description: 'Status. The uuid of an existing record in the statuses table.'
example: 59f7b17f-9eee-3d35-9c42-df1f70c89215
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: 261bf617-9659-3dd9-9329-a913e692cbdd
product_id:
type: string
description: 'Produto. The uuid of an existing record in the products table.'
example: e9e77d7c-679f-314a-ad10-929f8dfddcef
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: quia
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: f25b01d0-a985-366c-8da4-8e485b8aafe3
product:
id: a3295ffe-615c-467c-a108-6c7a291d9420
name: 'Vinícius Serna'
code: PRD-742173
unit:
id: a3295ffe-5ff2-415b-9bad-c5f1f6402ab8
name: 'Sra. Priscila Valente'
abbreviation: 'Matheus Pedrosa Jr.'
quantity: 225.992
quantity_fulfilled: 0
quantity_pending: 225.992
is_fulfilled: false
is_partially_fulfilled: false
observation: null
created_at: null
updated_at: null
-
id: 8090862a-9e6c-32aa-adcb-e6a2a20aaefb
product:
id: a3295ffe-7a62-4bf7-9f65-df8d37d585a6
name: 'Miranda Padrão Jr.'
code: PRD-215756
unit:
id: a3295ffe-791a-4ec9-93b1-6353f91a006a
name: 'Rayane Michelle Prado'
abbreviation: 'Dayane Maiara Pacheco'
quantity: 71.9137
quantity_fulfilled: 0
quantity_pending: 71.9137
is_fulfilled: false
is_partially_fulfilled: false
observation: 'Ut rem veritatis et architecto at.'
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: f25b01d0-a985-366c-8da4-8e485b8aafe3
product:
id: a3295ffe-615c-467c-a108-6c7a291d9420
name: 'Vinícius Serna'
code: PRD-742173
unit:
id: a3295ffe-5ff2-415b-9bad-c5f1f6402ab8
name: 'Sra. Priscila Valente'
abbreviation: 'Matheus Pedrosa Jr.'
quantity: 225.992
quantity_fulfilled: 0
quantity_pending: 225.992
is_fulfilled: false
is_partially_fulfilled: false
observation: null
created_at: null
updated_at: null
-
id: 8090862a-9e6c-32aa-adcb-e6a2a20aaefb
product:
id: a3295ffe-7a62-4bf7-9f65-df8d37d585a6
name: 'Miranda Padrão Jr.'
code: PRD-215756
unit:
id: a3295ffe-791a-4ec9-93b1-6353f91a006a
name: 'Rayane Michelle Prado'
abbreviation: 'Dayane Maiara Pacheco'
quantity: 71.9137
quantity_fulfilled: 0
quantity_pending: 71.9137
is_fulfilled: false
is_partially_fulfilled: false
observation: 'Ut rem veritatis et architecto at.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: f25b01d0-a985-366c-8da4-8e485b8aafe3
product:
type: object
properties:
id:
type: string
example: a3295ffe-615c-467c-a108-6c7a291d9420
name:
type: string
example: 'Vinícius Serna'
code:
type: string
example: PRD-742173
unit:
type: object
properties:
id:
type: string
example: a3295ffe-5ff2-415b-9bad-c5f1f6402ab8
name:
type: string
example: 'Sra. Priscila Valente'
abbreviation:
type: string
example: 'Matheus Pedrosa Jr.'
quantity:
type: number
example: 225.992
quantity_fulfilled:
type: integer
example: 0
quantity_pending:
type: number
example: 225.992
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
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: 7f7b640d-e1a2-391e-bda5-cf6f6ed46c55
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:
- 36b9b998-9d93-3d69-97e9-13d115213a9e
items:
type: string
required:
- items
parameters:
-
in: path
name: productRequest
description: 'Product Request UUID'
example: similique
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: aperiam
required: true
schema:
type: string
'/api/product-requests/{productRequest}/reject':
post:
summary: 'Reject product request'
operationId: rejectProductRequest
description: 'Reject a product request with a reason'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- 'Product Requests'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
reason:
type: string
description: 'Motivo da rejeição. O campo value não pode ser superior a 1000 caracteres.'
example: 'Example Reason'
required:
- reason
parameters:
-
in: path
name: productRequest
description: 'Product Request UUID'
example: et
required: true
schema:
type: string
'/api/product-requests/{productRequest}/sync-items':
put:
summary: 'Sync items'
operationId: syncItems
description: 'Replace all items in the request'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: object
properties:
data:
type: string
example: object
tags:
- 'Product Requests'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
items:
type: array
description: Itens.
example:
- null
- null
items:
type: object
properties:
id:
type: string
description: 'ID do Item. The uuid of an existing record in the product_request_items table.'
example: 974b23b9-75b1-3e66-b8e8-44e06c38b4a4
product_id:
type: string
description: 'Produto. The uuid of an existing record in the products table.'
example: 95faeb55-ae2f-3a7c-8f7c-7b5ea7ce16fc
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: ut
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
-
in: query
name: is_epi
description: 'Filter by products whose family is flagged as EPI.'
example: true
required: false
schema:
type: boolean
description: 'Filter by products whose family is flagged as EPI.'
example: true
-
in: query
name: has_epi_type
description: 'Filter by products that already are an EPI type. Pass 0 to list only products still available to become one.'
example: false
required: false
schema:
type: boolean
description: 'Filter by products that already are an EPI type. Pass 0 to list only products still available to become one.'
example: false
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: c106737c-737a-3d07-9b1b-0b6ec5ad7691
name: 'Dr. Marcos Marques Neto'
code: PRD-237867
stock: 495
product_family:
id: a3295ffb-cc51-4561-8370-cc2f97dce8ff
name: 'Antonieta Andréia Campos'
product_brand:
id: a3295ffb-ce2e-4d26-9b40-859b838c980e
name: 'Emanuelly Gil Ortega Jr.'
unit:
id: a3295ffb-cff1-417d-b3aa-3c6d63fcc959
name: 'Ester Fernanda Dominato'
abbreviation: 'Sr. Raphael Soares Neto'
image:
id: null
url: null
epi_type: null
description: 'Ipsam libero commodi dolores et quae.'
created_at: null
updated_at: null
-
id: 1c7137e5-548b-37c8-806a-eadd38ef4be8
name: 'Isabella Gabrielle Marin Neto'
code: PRD-599156
stock: 77
product_family:
id: a3295ffb-d35b-45c3-95ce-1b88455e8fe3
name: 'Dr. Abgail Fabiana de Freitas'
product_brand:
id: a3295ffb-d4de-4604-b5ab-8bfc1c9a2658
name: 'Elizabeth das Neves Teles Filho'
unit:
id: a3295ffb-d684-42d6-aab8-26414b4b842a
name: 'Dr. Josué Sanches Salazar'
abbreviation: 'Srta. Priscila Salazar Grego Neto'
image:
id: null
url: null
epi_type: null
description: 'Ab eos voluptas molestias voluptatibus magnam et in ducimus.'
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: c106737c-737a-3d07-9b1b-0b6ec5ad7691
name: 'Dr. Marcos Marques Neto'
code: PRD-237867
stock: 495
product_family:
id: a3295ffb-cc51-4561-8370-cc2f97dce8ff
name: 'Antonieta Andréia Campos'
product_brand:
id: a3295ffb-ce2e-4d26-9b40-859b838c980e
name: 'Emanuelly Gil Ortega Jr.'
unit:
id: a3295ffb-cff1-417d-b3aa-3c6d63fcc959
name: 'Ester Fernanda Dominato'
abbreviation: 'Sr. Raphael Soares Neto'
image:
id: null
url: null
epi_type: null
description: 'Ipsam libero commodi dolores et quae.'
created_at: null
updated_at: null
-
id: 1c7137e5-548b-37c8-806a-eadd38ef4be8
name: 'Isabella Gabrielle Marin Neto'
code: PRD-599156
stock: 77
product_family:
id: a3295ffb-d35b-45c3-95ce-1b88455e8fe3
name: 'Dr. Abgail Fabiana de Freitas'
product_brand:
id: a3295ffb-d4de-4604-b5ab-8bfc1c9a2658
name: 'Elizabeth das Neves Teles Filho'
unit:
id: a3295ffb-d684-42d6-aab8-26414b4b842a
name: 'Dr. Josué Sanches Salazar'
abbreviation: 'Srta. Priscila Salazar Grego Neto'
image:
id: null
url: null
epi_type: null
description: 'Ab eos voluptas molestias voluptatibus magnam et in ducimus.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: c106737c-737a-3d07-9b1b-0b6ec5ad7691
name:
type: string
example: 'Dr. Marcos Marques Neto'
code:
type: string
example: PRD-237867
stock:
type: integer
example: 495
product_family:
type: object
properties:
id:
type: string
example: a3295ffb-cc51-4561-8370-cc2f97dce8ff
name:
type: string
example: 'Antonieta Andréia Campos'
product_brand:
type: object
properties:
id:
type: string
example: a3295ffb-ce2e-4d26-9b40-859b838c980e
name:
type: string
example: 'Emanuelly Gil Ortega Jr.'
unit:
type: object
properties:
id:
type: string
example: a3295ffb-cff1-417d-b3aa-3c6d63fcc959
name:
type: string
example: 'Ester Fernanda Dominato'
abbreviation:
type: string
example: 'Sr. Raphael Soares Neto'
image:
type: object
properties:
id:
type: string
example: null
nullable: true
url:
type: string
example: null
nullable: true
epi_type:
type: string
example: null
nullable: true
description:
type: string
example: 'Ipsam libero commodi dolores et quae.'
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: bdd9edcb-9c8c-37c9-8872-a20726513cd0
product_brand_id:
type: string
description: 'Marca do Produto. The uuid of an existing record in the product_brands table.'
example: 33d3c17b-faee-32dd-936c-a231f354a259
unit_id:
type: string
description: 'Unidade. The uuid of an existing record in the units table.'
example: f4d15468-c876-39c5-8bc2-e9264fa255c8
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: 7680cd48-72a0-357a-a469-cb8818ea5b5b
name: 'Anderson Solano'
code: PRD-443935
stock: 8006961
product_family:
id: a3295ffb-df05-4b97-8bde-98d47fd5f982
name: 'Sra. Michelle Corona Serna'
product_brand:
id: a3295ffb-e0b8-46bc-ac69-8da807343558
name: 'Dr. Emerson Benites Sobrinho'
unit:
id: a3295ffb-e256-43e1-ab8d-c8c22732adab
name: 'Luciana Mascarenhas Marin Sobrinho'
abbreviation: 'Miguel Gil Torres'
image:
id: null
url: null
epi_type: null
description: 'Animi architecto ipsa ipsa fugit modi.'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 7680cd48-72a0-357a-a469-cb8818ea5b5b
name:
type: string
example: 'Anderson Solano'
code:
type: string
example: PRD-443935
stock:
type: integer
example: 8006961
product_family:
type: object
properties:
id:
type: string
example: a3295ffb-df05-4b97-8bde-98d47fd5f982
name:
type: string
example: 'Sra. Michelle Corona Serna'
product_brand:
type: object
properties:
id:
type: string
example: a3295ffb-e0b8-46bc-ac69-8da807343558
name:
type: string
example: 'Dr. Emerson Benites Sobrinho'
unit:
type: object
properties:
id:
type: string
example: a3295ffb-e256-43e1-ab8d-c8c22732adab
name:
type: string
example: 'Luciana Mascarenhas Marin Sobrinho'
abbreviation:
type: string
example: 'Miguel Gil Torres'
image:
type: object
properties:
id:
type: string
example: null
nullable: true
url:
type: string
example: null
nullable: true
epi_type:
type: string
example: null
nullable: true
description:
type: string
example: 'Animi architecto ipsa ipsa fugit modi.'
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: 28cf361a-1c74-3cb9-ab03-82c08ad5a61a
product_brand_id:
type: string
description: 'Marca do Produto. The uuid of an existing record in the product_brands table.'
example: 7c05a439-f445-3f0e-a371-e220207a5665
unit_id:
type: string
description: 'Unidade. The uuid of an existing record in the units table.'
example: 5b296445-d764-3443-9224-bee464705ecc
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: aut
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: soluta
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: similique
required: true
schema:
type: string
'/api/projects/{projectUuid}/versions':
post:
summary: 'Create revision'
operationId: createRevision
description: 'Create a new revision and update the project current file'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Project Versions'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
notes:
type: string
description: observação.
example: 'Example Notes'
nullable: true
responsible_user_id:
type: string
description: 'responsável. O campo value deve ser um UUID válido. The uuid of an existing record in the users table.'
example: cb867a04-a200-3dfe-ab41-85c461b248ab
nullable: true
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'
size:
type: string
description: 'tamanho do arquivo.'
example: 'Example File size'
nullable: true
extension:
type: string
description: 'extensão do arquivo.'
example: 'Example File extension'
nullable: true
required:
- name
required:
- file
get:
summary: 'List revisions'
operationId: listRevisions
description: 'List all revisions of a project'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Project Versions'
parameters:
-
in: path
name: projectUuid
description: 'Project UUID'
example: 762cf6f7-2c38-37a0-8c16-4bfb3b33db7b
required: true
schema:
type: string
'/api/project-versions/{versionUuid}':
get:
summary: 'Show revision'
operationId: showRevision
description: 'Show a specific revision'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Project Versions'
delete:
summary: 'Delete revision'
operationId: deleteRevision
description: 'Soft delete a revision'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Project Versions'
parameters:
-
in: path
name: versionUuid
description: 'Revision UUID'
example: 6acf0ad0-bd23-3725-ae25-656074ddafaf
required: true
schema:
type: string
'/api/project-versions/{versionUuid}/download':
get:
summary: 'Download revision'
operationId: downloadRevision
description: 'Generate a signed URL to download a revision'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
url: string
filename: string
size: string
version_number: integer
properties:
url:
type: string
example: string
filename:
type: string
example: string
size:
type: string
example: string
version_number:
type: string
example: integer
tags:
- 'Project Versions'
parameters:
-
in: path
name: versionUuid
description: 'Revision UUID'
example: 26426e2d-b800-37c7-9d31-5e9b214bbddd
required: true
schema:
type: string
'/api/project-versions/{versionUuid}/restore':
post:
summary: 'Restore revision'
operationId: restoreRevision
description: 'Restore a revision as the current file'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- 'Project Versions'
parameters:
-
in: path
name: versionUuid
description: 'Revision UUID'
example: 7fd6fef6-e200-3970-8c94-4c417e0db12c
required: true
schema:
type: string
/api/projects:
get:
summary: 'List projects'
operationId: listProjects
description: 'List all projects'
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: Elétrico
required: false
schema:
type: string
description: 'Search query.'
example: Elétrico
nullable: true
-
in: query
name: discipline_id
description: 'Filter by discipline UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the disciplines table.'
example: 02843c85-e1e8-364d-92a7-04d1a8d1cae1
required: false
schema:
type: string
description: 'Filter by discipline UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the disciplines table.'
example: 02843c85-e1e8-364d-92a7-04d1a8d1cae1
nullable: true
-
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: 58cea06a-4284-38b1-8eab-cc1dbc6cc0cf
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: 58cea06a-4284-38b1-8eab-cc1dbc6cc0cf
nullable: true
-
in: query
name: status_id
description: 'Filter by status UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the statuses table.'
example: e418afa2-5c74-3104-b994-a2c1114c22f3
required: false
schema:
type: string
description: 'Filter by status UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the statuses table.'
example: e418afa2-5c74-3104-b994-a2c1114c22f3
nullable: true
-
in: query
name: responsible_id
description: 'Filter by responsible user UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the users table.'
example: 0b5dbcc9-30e2-3a92-959f-1fc65f0111b6
required: false
schema:
type: string
description: 'Filter by responsible user UUID. O campo value deve ser um UUID válido. The uuid of an existing record in the users table.'
example: 0b5dbcc9-30e2-3a92-959f-1fc65f0111b6
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: ebdf5172-06d1-3261-904f-46753f7bb3ed
name: 'Reiciendis occaecati nam'
description: 'Error doloremque nihil sit minus.'
current_version: 1
file:
path: projects/2baa1786-2127-33fd-a3e6-953a8596259e.pdf
size: '1783563'
extension: pdf
discipline:
id: a3296001-ada5-47d8-adb6-39957a2722f1
name: Quasi
code: ZZW
created_at: null
updated_at: null
-
id: fcdeaf6c-4a1b-3d54-9aa8-846d5bc44dbf
name: 'Odio consequatur qui'
description: 'Iste sit excepturi aut reiciendis vitae in molestias.'
current_version: 1
file:
path: projects/e03e398c-441d-304c-83d2-1457184ee155.pdf
size: '1609415'
extension: pdf
discipline:
id: a3296001-b091-4d83-9472-a84fceeab0c1
name: Nemo
code: UDS
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: ebdf5172-06d1-3261-904f-46753f7bb3ed
name: 'Reiciendis occaecati nam'
description: 'Error doloremque nihil sit minus.'
current_version: 1
file:
path: projects/2baa1786-2127-33fd-a3e6-953a8596259e.pdf
size: '1783563'
extension: pdf
discipline:
id: a3296001-ada5-47d8-adb6-39957a2722f1
name: Quasi
code: ZZW
created_at: null
updated_at: null
-
id: fcdeaf6c-4a1b-3d54-9aa8-846d5bc44dbf
name: 'Odio consequatur qui'
description: 'Iste sit excepturi aut reiciendis vitae in molestias.'
current_version: 1
file:
path: projects/e03e398c-441d-304c-83d2-1457184ee155.pdf
size: '1609415'
extension: pdf
discipline:
id: a3296001-b091-4d83-9472-a84fceeab0c1
name: Nemo
code: UDS
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: ebdf5172-06d1-3261-904f-46753f7bb3ed
name:
type: string
example: 'Reiciendis occaecati nam'
description:
type: string
example: 'Error doloremque nihil sit minus.'
current_version:
type: integer
example: 1
file:
type: object
properties:
path:
type: string
example: projects/2baa1786-2127-33fd-a3e6-953a8596259e.pdf
size:
type: string
example: '1783563'
extension:
type: string
example: pdf
discipline:
type: object
properties:
id:
type: string
example: a3296001-ada5-47d8-adb6-39957a2722f1
name:
type: string
example: Quasi
code:
type: string
example: ZZW
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:
- Projects
post:
summary: 'Create project'
operationId: createProject
description: 'Create a new project and its first revision (R00)'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- Projects
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: nome.
example: 'Example Name'
description:
type: string
description: descrição.
example: 'Example Description'
nullable: true
discipline_id:
type: string
description: 'disciplina. O campo value deve ser um UUID válido. The uuid of an existing record in the disciplines table.'
example: 3adb07d1-d004-3ac5-8923-600f23f21bb9
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: 0c3118f2-7e22-3197-b2cc-2f4c1a12f88d
nullable: true
responsible_user_id:
type: string
description: 'responsável. O campo value deve ser um UUID válido. The uuid of an existing record in the users table.'
example: 8ed321f1-2574-312d-add9-1277fe9c3857
nullable: true
notes:
type: string
description: observação.
example: 'Example Notes'
nullable: true
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'
size:
type: string
description: 'tamanho do arquivo.'
example: 'Example File size'
nullable: true
extension:
type: string
description: 'extensão do arquivo.'
example: 'Example File extension'
nullable: true
required:
- name
required:
- name
- discipline_id
- file
'/api/projects/{id}':
get:
summary: 'Show project'
operationId: showProject
description: 'Show a project'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 52066aeb-2141-332e-ad3f-4b17ad607d95
name: 'Et unde est'
description: 'Ut voluptas nihil occaecati eos quo.'
current_version: 1
file:
path: projects/72878fe6-590a-3b22-9cff-672fc549b18f.pdf
size: '2535118'
extension: pdf
discipline:
id: a3296001-b850-4512-93b5-6449bcf6cab2
name: Adipisci
code: YLR
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 52066aeb-2141-332e-ad3f-4b17ad607d95
name:
type: string
example: 'Et unde est'
description:
type: string
example: 'Ut voluptas nihil occaecati eos quo.'
current_version:
type: integer
example: 1
file:
type: object
properties:
path:
type: string
example: projects/72878fe6-590a-3b22-9cff-672fc549b18f.pdf
size:
type: string
example: '2535118'
extension:
type: string
example: pdf
discipline:
type: object
properties:
id:
type: string
example: a3296001-b850-4512-93b5-6449bcf6cab2
name:
type: string
example: Adipisci
code:
type: string
example: YLR
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- Projects
put:
summary: 'Update project'
operationId: updateProject
description: 'Update a project (metadata only)'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: string
properties:
message:
type: string
example: string
tags:
- Projects
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: nome.
example: 'Example Name'
description:
type: string
description: descrição.
example: 'Example Description'
nullable: true
discipline_id:
type: string
description: 'disciplina. O campo value deve ser um UUID válido. The uuid of an existing record in the disciplines table.'
example: be154304-d135-3ae1-ba71-a7129e07c7d7
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: 6bb5508d-dac6-3c30-b8fc-b871c3aab3ac
nullable: true
responsible_user_id:
type: string
description: 'responsável. O campo value deve ser um UUID válido. The uuid of an existing record in the users table.'
example: 398b4420-1724-3f8f-8328-c4286f227a87
nullable: true
status_id:
type: string
description: 'situação. O campo value deve ser um UUID válido. The uuid of an existing record in the statuses table.'
example: 8afbf8af-8ac4-33ac-9f2b-75a23823d00a
nullable: true
parameters:
-
in: path
name: id
description: 'The ID of the project.'
example: 1
required: true
schema:
type: integer
-
in: path
name: project
description: 'Project UUID'
example: a
required: true
schema:
type: string
'/api/projects/{project}':
delete:
summary: 'Delete project'
operationId: deleteProject
description: 'Delete a project and its revisions'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- Projects
parameters:
-
in: path
name: project
description: 'Project UUID'
example: voluptas
required: true
schema:
type: string
/api/reports/daily-log:
get:
summary: 'Generate RDO PDF'
operationId: generateRDOPDF
description: 'Dispatches async PDF 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
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
daily_log:
type: string
description: 'The uuid of an existing record in the daily_logs table.'
example: quaerat
required:
- daily_log
/api/reports/epi-term:
get:
summary: 'Generate EPI term PDF'
operationId: generateEPITermPDF
description: 'Dispatches async PDF 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
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
employee:
type: string
description: 'The uuid of an existing record in the employees table.'
example: earum
kit_uuid:
type: string
description: 'O campo value deve ser um UUID válido.'
example: 60aa4ce2-81d7-3324-bfba-6828bd50f5cb
required:
- employee
- kit_uuid
/api/reports/employee-sheet:
get:
summary: 'Generate employee sheet PDF'
operationId: generateEmployeeSheetPDF
description: 'Dispatches async PDF generation of the employee record. 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
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
employee:
type: string
description: 'The uuid of an existing record in the employees table.'
example: est
required:
- employee
/api/reports/cost-center:
get:
summary: 'Cost center panel'
operationId: costCenterPanel
description: 'Totais por centro de custo no período, somados pela árvore. Devolve dois blocos declarados e separados: desembolso (fecha com o caixa e o banco) e custo apropriado por obra. Os dois não se somam — material comprado num mês e entregue em outro aparece em cada bloco no seu momento.'
parameters:
-
in: query
name: date_start
description: 'Início do período. Must be a valid date in the format Y-m-d.'
example: '2026-11-01'
required: true
schema:
type: string
description: 'Início do período. Must be a valid date in the format Y-m-d.'
example: '2026-11-01'
-
in: query
name: date_end
description: 'Fim do período. Must be a valid date in the format Y-m-d. O campo value deve ser uma data posterior ou igual a date_start.'
example: '2026-11-30'
required: true
schema:
type: string
description: 'Fim do período. Must be a valid date in the format Y-m-d. O campo value deve ser uma data posterior ou igual a date_start.'
example: '2026-11-30'
-
in: query
name: works
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the works table.'
example:
- f6b58205-c4eb-36b2-92c0-2e839d1be4a8
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the works table.'
example:
- f6b58205-c4eb-36b2-92c0-2e839d1be4a8
items:
type: string
-
in: query
name: cost_centers
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the cost_centers table.'
example:
- a838fb3c-5ac6-3d46-9353-57d3df136708
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the cost_centers table.'
example:
- a838fb3c-5ac6-3d46-9353-57d3df136708
items:
type: string
-
in: query
name: format
description: 'Só na exportação: xlsx (padrão) ou csv.'
example: xlsx
required: false
schema:
type: string
description: 'Só na exportação: xlsx (padrão) ou csv.'
example: xlsx
enum:
- xlsx
- csv
nullable: true
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Reports
/api/reports/cost-center/entries:
get:
summary: 'Cost center entries'
operationId: costCenterEntries
description: 'Lançamentos que formam um total do painel, paginados e em ordem de data. O centro informado inclui a subárvore, então clicar no total de um grupo lista o que veio dos filhos também.'
parameters:
-
in: query
name: search
description: 'Texto livre em descrição, código, obra e fornecedor/recebedor, sem distinguir caixa nem acento. O total da paginação reflete a busca.'
example: vero
required: false
schema:
type: string
description: 'Texto livre em descrição, código, obra e fornecedor/recebedor, sem distinguir caixa nem acento. O total da paginação reflete a busca.'
example: vero
-
in: query
name: sort_by
description: 'date ou amount. Padrão: date.'
example: date
required: false
schema:
type: string
description: 'date ou amount. Padrão: date.'
example: date
enum:
- date
- amount
-
in: query
name: sort_desc
description: 'Ordem decrescente. Padrão: 1.'
example: true
required: false
schema:
type: boolean
description: 'Ordem decrescente. Padrão: 1.'
example: true
-
in: query
name: per_page
description: 'Itens por página, até 100. Padrão: 10.'
example: 12
required: false
schema:
type: integer
description: 'Itens por página, até 100. Padrão: 10.'
example: 12
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Reports
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
date_start:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-11-06'
date_end:
type: string
description: 'Must be a valid date in the format Y-m-d. O campo value deve ser uma data posterior ou igual a date_start.'
example: '2087-03-12'
block:
type: string
description: ''
example: work_cost
enum:
- disbursement
- work_cost
cost_center_id:
type: string
description: 'This field is required when without_cost_center is not present. O campo value deve ser um UUID válido. The uuid of an existing record in the cost_centers table.'
example: f9bee4f1-4167-3593-a1d9-2ec06642c373
nullable: true
without_cost_center:
type: boolean
description: 'This field is required when cost_center_id is not present.'
example: false
nullable: true
type:
type: string
description: ''
example: other
enum:
- material
- labor
- other
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: 22
nullable: true
search:
type: string
description: 'O campo value não pode ser superior a 255 caracteres.'
example: xdigiephlexuqndd
nullable: true
sort_by:
type: string
description: ''
example: amount
enum:
- date
- amount
nullable: true
sort_desc:
type: boolean
description: ''
example: true
nullable: true
required:
- date_start
- date_end
- block
/api/reports/cost-center/excel:
get:
summary: 'Export cost center panel'
operationId: exportCostCenterPanel
description: 'Gera a planilha do painel com os filtros atuais. XLSX sai com três abas (um total por bloco, mais os lançamentos); CSV sai com as mesmas três coisas em seções. O arquivo é gerado em fila e chega por notificação.'
parameters:
-
in: query
name: date_start
description: 'Início do período. Must be a valid date in the format Y-m-d.'
example: '2026-11-01'
required: true
schema:
type: string
description: 'Início do período. Must be a valid date in the format Y-m-d.'
example: '2026-11-01'
-
in: query
name: date_end
description: 'Fim do período. Must be a valid date in the format Y-m-d. O campo value deve ser uma data posterior ou igual a date_start.'
example: '2026-11-30'
required: true
schema:
type: string
description: 'Fim do período. Must be a valid date in the format Y-m-d. O campo value deve ser uma data posterior ou igual a date_start.'
example: '2026-11-30'
-
in: query
name: works
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the works table.'
example:
- 2448bb79-e735-3794-a9fe-5e695b6d6496
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the works table.'
example:
- 2448bb79-e735-3794-a9fe-5e695b6d6496
items:
type: string
-
in: query
name: cost_centers
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the cost_centers table.'
example:
- 9f5850c2-3c4e-33dc-8fba-ed18f03a885f
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the cost_centers table.'
example:
- 9f5850c2-3c4e-33dc-8fba-ed18f03a885f
items:
type: string
-
in: query
name: format
description: 'Só na exportação: xlsx (padrão) ou csv.'
example: xlsx
required: false
schema:
type: string
description: 'Só na exportação: xlsx (padrão) ou csv.'
example: xlsx
enum:
- xlsx
- csv
nullable: true
responses:
202:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Relatório sendo gerado. Você será notificado quando estiver pronto.'
channel: 'reports.{uuid}'
event: excel-report.completed
properties:
message:
type: string
example: 'Relatório sendo gerado. Você será notificado quando estiver pronto.'
channel:
type: string
example: 'reports.{uuid}'
event:
type: string
example: excel-report.completed
tags:
- Reports
/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: dolorem
required: false
schema:
type: string
description: ''
example: dolorem
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: 'Ipsum est dignissimos rerum voluptatem quo blanditiis inventore.'
required: false
schema:
type: string
description: ''
example: 'Ipsum est dignissimos rerum voluptatem quo blanditiis inventore.'
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:
- 76ba4a57-340f-3837-b741-11e894ac55c3
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:
- 76ba4a57-340f-3837-b741-11e894ac55c3
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:
- c7898385-c2bd-399d-b96e-9981a81dd365
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:
- c7898385-c2bd-399d-b96e-9981a81dd365
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:
- f1a80770-b251-3795-8043-1481d5b6c47f
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido.'
example:
- f1a80770-b251-3795-8043-1481d5b6c47f
items:
type: string
-
in: query
name: customers
description: 'O campo value deve ser um UUID válido.'
example:
- 1a4f8530-7744-3a3e-9938-a553e12571a2
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido.'
example:
- 1a4f8530-7744-3a3e-9938-a553e12571a2
items:
type: string
-
in: query
name: suppliers
description: 'O campo value deve ser um UUID válido.'
example:
- f3470f50-b682-35f8-a125-01e4f2540243
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido.'
example:
- f3470f50-b682-35f8-a125-01e4f2540243
items:
type: string
-
in: query
name: cash_session
description: 'O campo value deve ser um UUID válido.'
example: 9d1c3cf9-bcab-3712-836c-2336b6ff976a
required: false
schema:
type: string
description: 'O campo value deve ser um UUID válido.'
example: 9d1c3cf9-bcab-3712-836c-2336b6ff976a
nullable: true
-
in: query
name: works
description: 'O campo value deve ser um UUID válido.'
example:
- e334f56a-4b90-3c89-bb59-01f8755f062e
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido.'
example:
- e334f56a-4b90-3c89-bb59-01f8755f062e
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: quibusdam
required: false
schema:
type: string
description: ''
example: quibusdam
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: 'Sit totam sed sit ratione repudiandae.'
required: false
schema:
type: string
description: ''
example: 'Sit totam sed sit ratione repudiandae.'
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:
- b90512f0-7e45-39ed-8718-8a8056bb08c9
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:
- b90512f0-7e45-39ed-8718-8a8056bb08c9
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:
- f4fee5fa-7f31-301e-a4fc-e520bac4f7bb
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:
- f4fee5fa-7f31-301e-a4fc-e520bac4f7bb
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:
- ba63188a-7e9b-3e7b-bd98-b381b1675c73
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido.'
example:
- ba63188a-7e9b-3e7b-bd98-b381b1675c73
items:
type: string
-
in: query
name: customers
description: 'O campo value deve ser um UUID válido.'
example:
- 09bc2e1b-0b6f-3185-bac6-30260d8b4dad
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido.'
example:
- 09bc2e1b-0b6f-3185-bac6-30260d8b4dad
items:
type: string
-
in: query
name: suppliers
description: 'O campo value deve ser um UUID válido.'
example:
- 7d53f013-5ab1-3303-bcfc-a6e24a510814
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido.'
example:
- 7d53f013-5ab1-3303-bcfc-a6e24a510814
items:
type: string
-
in: query
name: cash_session
description: 'O campo value deve ser um UUID válido.'
example: 7a4b5252-b461-3c2f-b781-a4db27e33013
required: false
schema:
type: string
description: 'O campo value deve ser um UUID válido.'
example: 7a4b5252-b461-3c2f-b781-a4db27e33013
nullable: true
-
in: query
name: works
description: 'O campo value deve ser um UUID válido.'
example:
- 7f2504fd-6dfc-3a06-9f8b-73a68ab37d40
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido.'
example:
- 7f2504fd-6dfc-3a06-9f8b-73a68ab37d40
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: 777c4645-75a9-3fdc-992c-c72501a27723
name: 'ut enim'
slug: null
description: null
abbreviation: jya
created_at: null
updated_at: null
-
id: 405d7011-c7e4-3ef2-aa8c-c99131a95a7d
name: 'asperiores occaecati'
slug: null
description: null
abbreviation: null
created_at: null
updated_at: null
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Anterior'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Próximo »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
properties:
data:
type: array
example:
-
id: 777c4645-75a9-3fdc-992c-c72501a27723
name: 'ut enim'
slug: null
description: null
abbreviation: jya
created_at: null
updated_at: null
-
id: 405d7011-c7e4-3ef2-aa8c-c99131a95a7d
name: 'asperiores occaecati'
slug: null
description: null
abbreviation: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 777c4645-75a9-3fdc-992c-c72501a27723
name:
type: string
example: 'ut enim'
slug:
type: string
example: null
nullable: true
description:
type: string
example: null
nullable: true
abbreviation:
type: string
example: jya
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: 3d650da8-a949-3042-8c3b-deeb7ae48be3
name: 'natus provident'
slug: null
description: 'Incidunt tempora nemo velit voluptatem voluptas et et aut. Architecto sit aut ipsum sed est iusto magnam earum. Ut earum temporibus consequatur quibusdam sint. Quis dolores quod eum ut provident et.'
abbreviation: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 3d650da8-a949-3042-8c3b-deeb7ae48be3
name:
type: string
example: 'natus provident'
slug:
type: string
example: null
nullable: true
description:
type: string
example: 'Incidunt tempora nemo velit voluptatem voluptas et et aut. Architecto sit aut ipsum sed est iusto magnam earum. Ut earum temporibus consequatur quibusdam sint. Quis dolores quod eum ut provident et.'
abbreviation:
type: string
example: null
nullable: true
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: 18
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: b3743eb8-1ac9-3441-b238-60625851a9fc
name: 'Hiram Hegmann'
username: trystan.ankunding
email: fstamm@example.org
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
-
id: b1007f23-e8c2-3695-af50-78bfc77a260f
name: "Celia D'Amore"
username: lbradtke
email: priscilla05@example.net
certification: null
crea: null
last_login_at: null
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: b3743eb8-1ac9-3441-b238-60625851a9fc
name: 'Hiram Hegmann'
username: trystan.ankunding
email: fstamm@example.org
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
-
id: b1007f23-e8c2-3695-af50-78bfc77a260f
name: "Celia D'Amore"
username: lbradtke
email: priscilla05@example.net
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
items:
type: object
properties:
id:
type: string
example: b3743eb8-1ac9-3441-b238-60625851a9fc
name:
type: string
example: 'Hiram Hegmann'
username:
type: string
example: trystan.ankunding
email:
type: string
example: fstamm@example.org
certification:
type: string
example: null
nullable: true
crea:
type: string
example: null
nullable: true
last_login_at:
type: string
example: null
nullable: true
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:
- ccb81782-0fca-3b82-bb8f-4b7976ed58da
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:
- 359b1a7c-f8e7-3fd6-9ab3-6676155b1fd1
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:
- 37afe25e-ea66-39ff-b37b-4a78d2bd42c4
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: 'et libero'
slug: corrupti-est-est-assumenda-animi-voluptatem-sit-qui
-
name: 'est ea'
slug: aliquid-sed-eveniet-officiis-et-odio-nihil-a
properties:
data:
type: array
example:
-
name: 'et libero'
slug: corrupti-est-est-assumenda-animi-voluptatem-sit-qui
-
name: 'est ea'
slug: aliquid-sed-eveniet-officiis-et-odio-nihil-a
items:
type: object
properties:
name:
type: string
example: 'et libero'
slug:
type: string
example: corrupti-est-est-assumenda-animi-voluptatem-sit-qui
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: 24869b0e-14c4-3ae6-bcf8-215d7907c3e9
slug: null
name: null
description: 'Nicolas de Freitas'
abbreviation: consequuntur
color: '#d50a56'
text_color: '#9fc5bc'
created_at: null
updated_at: null
-
id: 8bb01fbb-3ae7-3e52-b2aa-e50d390b430a
slug: null
name: null
description: 'Sr. José Torres Bonilha'
abbreviation: ipsam
color: '#960c72'
text_color: '#da68b4'
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: 24869b0e-14c4-3ae6-bcf8-215d7907c3e9
slug: null
name: null
description: 'Nicolas de Freitas'
abbreviation: consequuntur
color: '#d50a56'
text_color: '#9fc5bc'
created_at: null
updated_at: null
-
id: 8bb01fbb-3ae7-3e52-b2aa-e50d390b430a
slug: null
name: null
description: 'Sr. José Torres Bonilha'
abbreviation: ipsam
color: '#960c72'
text_color: '#da68b4'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 24869b0e-14c4-3ae6-bcf8-215d7907c3e9
slug:
type: string
example: null
nullable: true
name:
type: string
example: null
nullable: true
description:
type: string
example: 'Nicolas de Freitas'
abbreviation:
type: string
example: consequuntur
color:
type: string
example: '#d50a56'
text_color:
type: string
example: '#9fc5bc'
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: 09031b1f-7987-33f2-938a-00b7c998b8f8
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: ce1c5b29-3870-367a-b14b-ddaf2ab9c767
slug: null
name: null
description: 'Dr. Martinho Lozano Pena'
abbreviation: omnis
color: '#992f61'
text_color: '#0b09f2'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: ce1c5b29-3870-367a-b14b-ddaf2ab9c767
slug:
type: string
example: null
nullable: true
name:
type: string
example: null
nullable: true
description:
type: string
example: 'Dr. Martinho Lozano Pena'
abbreviation:
type: string
example: omnis
color:
type: string
example: '#992f61'
text_color:
type: string
example: '#0b09f2'
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: 8df45d5b-988c-3a81-8aa1-aa01719574b0
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: 771c8015-e3b4-33d2-94f6-825c13f0c96d
quantity: 309.3971
min_quantity: null
max_quantity: null
below_minimum: false
above_maximum: false
created_at: null
updated_at: null
-
id: ee6bf7c9-8b94-3a20-9ce2-fa273d5e3e49
quantity: 179.731
min_quantity: null
max_quantity: null
below_minimum: false
above_maximum: false
created_at: null
updated_at: null
properties:
data:
type: array
example:
-
id: 771c8015-e3b4-33d2-94f6-825c13f0c96d
quantity: 309.3971
min_quantity: null
max_quantity: null
below_minimum: false
above_maximum: false
created_at: null
updated_at: null
-
id: ee6bf7c9-8b94-3a20-9ce2-fa273d5e3e49
quantity: 179.731
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: 771c8015-e3b4-33d2-94f6-825c13f0c96d
quantity:
type: number
example: 309.3971
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: 4f7ea0b1-06f1-381f-b2b2-545c7471578e
name: 'Estoque Faro e Filhos'
module: work
is_active: true
is_main: false
created_at: null
updated_at: null
-
id: 99140fd3-09e3-3c51-9969-6057ce36ebaa
name: 'Estoque Benites Ltda.'
module: work
is_active: true
is_main: false
created_at: null
updated_at: null
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Anterior'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Próximo »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
properties:
data:
type: array
example:
-
id: 4f7ea0b1-06f1-381f-b2b2-545c7471578e
name: 'Estoque Faro e Filhos'
module: work
is_active: true
is_main: false
created_at: null
updated_at: null
-
id: 99140fd3-09e3-3c51-9969-6057ce36ebaa
name: 'Estoque Benites Ltda.'
module: work
is_active: true
is_main: false
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 4f7ea0b1-06f1-381f-b2b2-545c7471578e
name:
type: string
example: 'Estoque Faro e Filhos'
module:
type: string
example: work
is_active:
type: boolean
example: true
is_main:
type: boolean
example: false
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
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: 9b36878e-77da-31e8-b2fc-c592fa710b75
name: 'Estoque Valdez-Delatorre'
module: work
is_active: true
is_main: false
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 9b36878e-77da-31e8-b2fc-c592fa710b75
name:
type: string
example: 'Estoque Valdez-Delatorre'
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: 200e7051-9a8c-34bf-a741-703e3bbfc194
name: 'Estoque Deverso Ltda.'
module: work
is_active: true
is_main: false
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 200e7051-9a8c-34bf-a741-703e3bbfc194
name:
type: string
example: 'Estoque Deverso Ltda.'
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: 6ff8fe92-038c-33fb-b120-c7b7116922e6
name: 'Estoque Godói Comercial Ltda.'
module: work
is_active: true
is_main: false
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 6ff8fe92-038c-33fb-b120-c7b7116922e6
name:
type: string
example: 'Estoque Godói Comercial Ltda.'
module:
type: string
example: work
is_active:
type: boolean
example: true
is_main:
type: boolean
example: false
created_at:
type: string
example: null
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: 5f5144c0-950f-3fc9-ab1e-8f4648cfeb84
name: 'Estoque Correia Comercial Ltda.'
module: work
is_active: true
is_main: false
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 5f5144c0-950f-3fc9-ab1e-8f4648cfeb84
name:
type: string
example: 'Estoque Correia Comercial Ltda.'
module:
type: string
example: work
is_active:
type: boolean
example: true
is_main:
type: boolean
example: false
created_at:
type: string
example: null
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: 3e3b892c-04d2-3195-a797-66140eaf08b1
quantity: 798.4635
min_quantity: null
max_quantity: null
below_minimum: false
above_maximum: false
created_at: null
updated_at: null
-
id: c7efb4b9-138d-3b7a-87ec-3993068f27ae
quantity: 984.5773
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: 3e3b892c-04d2-3195-a797-66140eaf08b1
quantity: 798.4635
min_quantity: null
max_quantity: null
below_minimum: false
above_maximum: false
created_at: null
updated_at: null
-
id: c7efb4b9-138d-3b7a-87ec-3993068f27ae
quantity: 984.5773
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: 3e3b892c-04d2-3195-a797-66140eaf08b1
quantity:
type: number
example: 798.4635
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: 11b1dedc-6486-3aae-9b00-5fef217ce6d3
quantity: 382.4545
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: 11b1dedc-6486-3aae-9b00-5fef217ce6d3
quantity:
type: number
example: 382.4545
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: ad
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
total_value: 18750.4
current_value: 9000
consumed_value: 9750.4
unvalued_quantity: 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
total_value:
type: number
example: 18750.4
current_value:
type: integer
example: 9000
consumed_value:
type: number
example: 9750.4
unvalued_quantity:
type: integer
example: 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: 838fc981-c98f-3651-a445-03dc525f1dfb
code: MOV-579883
type: compra
type_name: PURCHASE
is_entry: true
is_exit: false
quantity: 37.9901
previous_quantity: 573.8547
new_quantity: 611.8448
reason: null
movement_date: '2026-10-08T05:39:26.000000Z'
created_at: null
-
id: 6faa20fe-744b-34ab-a65c-64789e240f65
code: MOV-112379
type: 'ajuste entrada'
type_name: ADJUSTMENT_IN
is_entry: true
is_exit: false
quantity: 25.578
previous_quantity: 374.6659
new_quantity: 400.2439
reason: 'Officiis hic quia et nam ea sint velit quaerat.'
movement_date: '2026-10-24T08:34:04.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: 838fc981-c98f-3651-a445-03dc525f1dfb
code: MOV-579883
type: compra
type_name: PURCHASE
is_entry: true
is_exit: false
quantity: 37.9901
previous_quantity: 573.8547
new_quantity: 611.8448
reason: null
movement_date: '2026-10-08T05:39:26.000000Z'
created_at: null
-
id: 6faa20fe-744b-34ab-a65c-64789e240f65
code: MOV-112379
type: 'ajuste entrada'
type_name: ADJUSTMENT_IN
is_entry: true
is_exit: false
quantity: 25.578
previous_quantity: 374.6659
new_quantity: 400.2439
reason: 'Officiis hic quia et nam ea sint velit quaerat.'
movement_date: '2026-10-24T08:34:04.000000Z'
created_at: null
items:
type: object
properties:
id:
type: string
example: 838fc981-c98f-3651-a445-03dc525f1dfb
code:
type: string
example: MOV-579883
type:
type: string
example: compra
type_name:
type: string
example: PURCHASE
is_entry:
type: boolean
example: true
is_exit:
type: boolean
example: false
quantity:
type: number
example: 37.9901
previous_quantity:
type: number
example: 573.8547
new_quantity:
type: number
example: 611.8448
reason:
type: string
example: null
nullable: true
movement_date:
type: string
example: '2026-10-08T05:39:26.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: aa888bcf-0cc5-320f-ae75-f7e50f14827b
code: MOV-139176
type: compra
type_name: PURCHASE
is_entry: true
is_exit: false
quantity: 86.4539
previous_quantity: 390.8058
new_quantity: 477.2597
reason: null
movement_date: '2026-11-05T17:06:22.000000Z'
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: aa888bcf-0cc5-320f-ae75-f7e50f14827b
code:
type: string
example: MOV-139176
type:
type: string
example: compra
type_name:
type: string
example: PURCHASE
is_entry:
type: boolean
example: true
is_exit:
type: boolean
example: false
quantity:
type: number
example: 86.4539
previous_quantity:
type: number
example: 390.8058
new_quantity:
type: number
example: 477.2597
reason:
type: string
example: null
nullable: true
movement_date:
type: string
example: '2026-11-05T17:06:22.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: 7c89992b-8853-3356-aad9-e0a9cb22ecf7
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: 4aa6ceee-9e5d-34b5-9344-60f9131a252b
code: MOV-196934
type: consumo
type_name: CONSUMPTION
is_entry: false
is_exit: true
quantity: 10.157
previous_quantity: 234.1904
new_quantity: 224.0334
reason: 'Sunt aut aut qui.'
movement_date: '2026-10-29T06:00:52.000000Z'
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 4aa6ceee-9e5d-34b5-9344-60f9131a252b
code:
type: string
example: MOV-196934
type:
type: string
example: consumo
type_name:
type: string
example: CONSUMPTION
is_entry:
type: boolean
example: false
is_exit:
type: boolean
example: true
quantity:
type: number
example: 10.157
previous_quantity:
type: number
example: 234.1904
new_quantity:
type: number
example: 224.0334
reason:
type: string
example: 'Sunt aut aut qui.'
movement_date:
type: string
example: '2026-10-29T06:00:52.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: 3cd92a8a-d6ea-391b-9bab-54a7adf896b8
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: 17b65c54-837e-3207-98d0-9f632df3231f
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: d9a6683a-1b6d-3855-af39-ef746669293d
code: MOV-868004
type: 'entrada transferência'
type_name: TRANSFER_IN
is_entry: true
is_exit: false
quantity: 66.2108
previous_quantity: 10.3738
new_quantity: 76.5846
reason: null
movement_date: '2026-11-01T04:01:40.000000Z'
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: d9a6683a-1b6d-3855-af39-ef746669293d
code:
type: string
example: MOV-868004
type:
type: string
example: 'entrada transferência'
type_name:
type: string
example: TRANSFER_IN
is_entry:
type: boolean
example: true
is_exit:
type: boolean
example: false
quantity:
type: number
example: 66.2108
previous_quantity:
type: number
example: 10.3738
new_quantity:
type: number
example: 76.5846
reason:
type: string
example: null
nullable: true
movement_date:
type: string
example: '2026-11-01T04:01:40.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: 7693797f-b9f9-3aec-9970-1d086aa6b51c
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: bd380288-27a8-3d6e-8872-6a02969447cd
code: MOV-404099
type: vencido
type_name: EXPIRED
is_entry: false
is_exit: true
quantity: 3.0073
previous_quantity: 242.8694
new_quantity: 239.8621
reason: 'Eos ad qui sint.'
movement_date: '2026-10-21T14:41:11.000000Z'
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: bd380288-27a8-3d6e-8872-6a02969447cd
code:
type: string
example: MOV-404099
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: 3.0073
previous_quantity:
type: number
example: 242.8694
new_quantity:
type: number
example: 239.8621
reason:
type: string
example: 'Eos ad qui sint.'
movement_date:
type: string
example: '2026-10-21T14:41:11.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: 61204d8a-1e46-3bc1-be5b-92be424b5a55
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: bc910eae-cffa-368d-9768-87394dedf28b
code: MOV-109275
type: 'ajuste entrada'
type_name: ADJUSTMENT_IN
is_entry: true
is_exit: false
quantity: 44.5977
previous_quantity: 150.2536
new_quantity: 194.8513
reason: null
movement_date: '2026-11-01T13:06:02.000000Z'
created_at: null
properties:
data:
type: object
properties:
id:
type: string
example: bc910eae-cffa-368d-9768-87394dedf28b
code:
type: string
example: MOV-109275
type:
type: string
example: 'ajuste entrada'
type_name:
type: string
example: ADJUSTMENT_IN
is_entry:
type: boolean
example: true
is_exit:
type: boolean
example: false
quantity:
type: number
example: 44.5977
previous_quantity:
type: number
example: 150.2536
new_quantity:
type: number
example: 194.8513
reason:
type: string
example: null
nullable: true
movement_date:
type: string
example: '2026-11-01T13:06:02.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: e07b2990-cf80-331b-aafa-f352404e238d
name: 'Dr. Ketlin Santacruz'
email: paloma.gomes@example.com
phone: '(71) 2255-5111'
document: 15.444.382/0001-10
type: pj
responsible: "Dr. Raissa Lourenço D'ávila"
image:
id: null
url: null
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
-
id: 7c2f9fee-5708-3692-b90c-6203cad20735
name: 'Sabrina Juliane Santana Sobrinho'
email: santiago.filipe@example.org
phone: '(87) 90357-3018'
document: 35.469.275/0001-53
type: pj
responsible: 'Bruna Prado Santos Sobrinho'
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: e07b2990-cf80-331b-aafa-f352404e238d
name: 'Dr. Ketlin Santacruz'
email: paloma.gomes@example.com
phone: '(71) 2255-5111'
document: 15.444.382/0001-10
type: pj
responsible: "Dr. Raissa Lourenço D'ávila"
image:
id: null
url: null
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
-
id: 7c2f9fee-5708-3692-b90c-6203cad20735
name: 'Sabrina Juliane Santana Sobrinho'
email: santiago.filipe@example.org
phone: '(87) 90357-3018'
document: 35.469.275/0001-53
type: pj
responsible: 'Bruna Prado Santos Sobrinho'
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: e07b2990-cf80-331b-aafa-f352404e238d
name:
type: string
example: 'Dr. Ketlin Santacruz'
email:
type: string
example: paloma.gomes@example.com
phone:
type: string
example: '(71) 2255-5111'
document:
type: string
example: 15.444.382/0001-10
type:
type: string
example: pj
responsible:
type: string
example: "Dr. Raissa Lourenço D'ávila"
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: 68d04f89-8839-39db-9b87-571a43392dd3
name: 'Stephany Toledo Sales'
email: hcordeiro@example.net
phone: '(44) 2567-7732'
document: 35.524.489/0001-85
type: pj
responsible: 'Dr. Josué Ferraz da Rosa'
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: 68d04f89-8839-39db-9b87-571a43392dd3
name:
type: string
example: 'Stephany Toledo Sales'
email:
type: string
example: hcordeiro@example.net
phone:
type: string
example: '(44) 2567-7732'
document:
type: string
example: 35.524.489/0001-85
type:
type: string
example: pj
responsible:
type: string
example: 'Dr. Josué Ferraz da Rosa'
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: 86aff075-444a-392e-bdcd-423142f69a81
name: 'Srta. Verônica Aranda Filho'
description: 'Eaque eveniet eligendi nesciunt omnis itaque. Dolor consequatur dolorem temporibus officiis exercitationem.'
type: saque
-
id: 321b3da4-e4a1-3cca-86f3-236626ab4d94
name: 'Cláudio Marinho Burgos Sobrinho'
description: 'Dolor officiis quam molestias aliquid tenetur dolores pariatur. Veniam quam eaque rerum repellendus. Voluptas dignissimos deserunt est magnam asperiores.'
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: 86aff075-444a-392e-bdcd-423142f69a81
name: 'Srta. Verônica Aranda Filho'
description: 'Eaque eveniet eligendi nesciunt omnis itaque. Dolor consequatur dolorem temporibus officiis exercitationem.'
type: saque
-
id: 321b3da4-e4a1-3cca-86f3-236626ab4d94
name: 'Cláudio Marinho Burgos Sobrinho'
description: 'Dolor officiis quam molestias aliquid tenetur dolores pariatur. Veniam quam eaque rerum repellendus. Voluptas dignissimos deserunt est magnam asperiores.'
type: ajuste
items:
type: object
properties:
id:
type: string
example: 86aff075-444a-392e-bdcd-423142f69a81
name:
type: string
example: 'Srta. Verônica Aranda Filho'
description:
type: string
example: 'Eaque eveniet eligendi nesciunt omnis itaque. Dolor consequatur dolorem temporibus officiis exercitationem.'
type:
type: string
example: saque
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: 80af7ca8-61b7-35d2-959b-5e281a85f63e
name: 'Sra. Flor Teles'
description: 'Dolorem nam quo provident. Magnam eos et ratione eum cupiditate. Illum ut ad et eligendi. Nam itaque accusamus non velit tenetur.'
type: juros
properties:
data:
type: object
properties:
id:
type: string
example: 80af7ca8-61b7-35d2-959b-5e281a85f63e
name:
type: string
example: 'Sra. Flor Teles'
description:
type: string
example: 'Dolorem nam quo provident. Magnam eos et ratione eum cupiditate. Illum ut ad et eligendi. Nam itaque accusamus non velit tenetur.'
type:
type: string
example: juros
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: voluptate
required: true
schema:
type: string
/api/admin/tutorial-modules:
get:
summary: 'Listar módulos'
operationId: listarMdulos
description: 'Lista o catálogo de módulos de tutorial'
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: 'Busca por nome ou descrição.'
example: Financeiro
required: false
schema:
type: string
description: 'Busca por nome ou descrição.'
example: Financeiro
nullable: true
-
in: query
name: is_active
description: 'Filtra por módulos ativos ou inativos.'
example: true
required: false
schema:
type: boolean
description: 'Filtra por módulos ativos ou inativos.'
example: true
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: bd2884d9-6bd6-3852-8977-ba63f5b3d738
name: 'Vero doloremque'
slug: vero-doloremque-642821
description: 'Exercitationem aut ut id dolores.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
-
id: 7d32176b-9f08-3e65-bc51-9bc5259a5c7d
name: 'Ducimus eos'
slug: ducimus-eos-777784
description: 'Voluptas quis cum adipisci nam perferendis qui.'
icon: null
color: null
sort_order: 0
is_active: true
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: bd2884d9-6bd6-3852-8977-ba63f5b3d738
name: 'Vero doloremque'
slug: vero-doloremque-642821
description: 'Exercitationem aut ut id dolores.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
-
id: 7d32176b-9f08-3e65-bc51-9bc5259a5c7d
name: 'Ducimus eos'
slug: ducimus-eos-777784
description: 'Voluptas quis cum adipisci nam perferendis qui.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: bd2884d9-6bd6-3852-8977-ba63f5b3d738
name:
type: string
example: 'Vero doloremque'
slug:
type: string
example: vero-doloremque-642821
description:
type: string
example: 'Exercitationem aut ut id dolores.'
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
is_active:
type: boolean
example: 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:
- 'Tutoriais (administração)'
post:
summary: 'Cadastrar módulo'
operationId: cadastrarMdulo
description: 'Cria um módulo no catálogo. O slug é derivado do nome quando não informado.'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 173d1d64-4c1d-36fe-af83-7dc2e35ef198
name: 'Tempora ut'
slug: tempora-ut-218482
description: 'Quos veritatis quia voluptates alias perspiciatis.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 173d1d64-4c1d-36fe-af83-7dc2e35ef198
name:
type: string
example: 'Tempora ut'
slug:
type: string
example: tempora-ut-218482
description:
type: string
example: 'Quos veritatis quia voluptates alias perspiciatis.'
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
is_active:
type: boolean
example: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
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: 'Identificador. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Slug'
nullable: true
description:
type: string
description: Descrição.
example: 'Example Description'
nullable: true
icon:
type: string
description: 'Ícone. O campo value não pode ser superior a 64 caracteres.'
example: 'Example Icon'
nullable: true
color:
type: string
description: 'Cor. Must match the regex /^#[0-9a-fA-F]{6}$/.'
example: 'Example Color'
nullable: true
sort_order:
type: integer
description: 'Ordem. O campo value deve ser pelo menos 0.'
example: 1
is_active:
type: boolean
description: Ativo.
example: true
required:
- name
'/api/admin/tutorial-modules/{tutorialModule}':
get:
summary: 'Visualizar módulo'
operationId: visualizarMdulo
description: 'Detalhe de um módulo do catálogo'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: cf276522-b822-3a0f-bdf6-2c2495fc4b8b
name: 'Voluptates ut'
slug: voluptates-ut-213947
description: 'Necessitatibus enim recusandae blanditiis omnis laboriosam voluptatem sit.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: cf276522-b822-3a0f-bdf6-2c2495fc4b8b
name:
type: string
example: 'Voluptates ut'
slug:
type: string
example: voluptates-ut-213947
description:
type: string
example: 'Necessitatibus enim recusandae blanditiis omnis laboriosam voluptatem sit.'
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
is_active:
type: boolean
example: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
put:
summary: 'Atualizar módulo'
operationId: atualizarMdulo
description: 'Atualiza um módulo do catálogo'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: daee5fb3-e6aa-34cc-ac9a-f8fecf92aa6f
name: 'Officia labore'
slug: officia-labore-472777
description: 'Placeat quia non quos blanditiis.'
icon: null
color: null
sort_order: 0
is_active: true
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: daee5fb3-e6aa-34cc-ac9a-f8fecf92aa6f
name:
type: string
example: 'Officia labore'
slug:
type: string
example: officia-labore-472777
description:
type: string
example: 'Placeat quia non quos blanditiis.'
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
is_active:
type: boolean
example: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
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: 'Identificador. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Slug'
nullable: true
description:
type: string
description: Descrição.
example: 'Example Description'
nullable: true
icon:
type: string
description: 'Ícone. O campo value não pode ser superior a 64 caracteres.'
example: 'Example Icon'
nullable: true
color:
type: string
description: 'Cor. Must match the regex /^#[0-9a-fA-F]{6}$/.'
example: 'Example Color'
nullable: true
sort_order:
type: integer
description: 'Ordem. O campo value deve ser pelo menos 0.'
example: 1
is_active:
type: boolean
description: Ativo.
example: true
delete:
summary: 'Remover módulo'
operationId: removerMdulo
description: 'Remove o módulo e, junto, os tutoriais que pertenciam a ele'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Tutoriais (administração)'
parameters:
-
in: path
name: tutorialModule
description: 'UUID do módulo'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string
/api/admin/tutorials:
get:
summary: 'Listar tutoriais'
operationId: listarTutoriais
description: 'Lista os tutoriais em qualquer status, para quem administra'
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: 'Busca por título ou descrição.'
example: 'ordem de serviço'
required: false
schema:
type: string
description: 'Busca por título ou descrição.'
example: 'ordem de serviço'
nullable: true
-
in: query
name: module_id
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the tutorial_modules table.'
example:
- 63e511d9-21d9-3a84-8742-fb13c4741d50
required: false
schema:
type: array
description: 'O campo value deve ser um UUID válido. The uuid of an existing record in the tutorial_modules table.'
example:
- 63e511d9-21d9-3a84-8742-fb13c4741d50
items:
type: string
-
in: query
name: sector_id
description: ''
example: null
required: false
schema:
type: array
description: ''
example: null
items:
type: string
-
in: query
name: status
description: 'Filtra por status (draft ou published).'
example: published
required: false
schema:
type: string
description: 'Filtra por status (draft ou published).'
example: published
enum:
- draft
- published
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: b259d7f4-093c-3631-bf85-81b885f4df90
title: 'Ipsa quo aut at'
description: 'Provident itaque tempora eaque et.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-85c0-40a1-88b1-4e000e4b7d48
name: 'Enim quaerat'
slug: enim-quaerat-142284
icon: null
color: null
created_at: null
updated_at: null
-
id: c9cd92c0-7fd9-397e-b695-daa17779afa6
title: 'Inventore eum voluptatem cupiditate'
description: 'Officiis consequatur soluta voluptatum quae nobis eos inventore.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-8907-4691-87c9-a3335bafabeb
name: 'Architecto sit'
slug: architecto-sit-755851
icon: null
color: 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: b259d7f4-093c-3631-bf85-81b885f4df90
title: 'Ipsa quo aut at'
description: 'Provident itaque tempora eaque et.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-85c0-40a1-88b1-4e000e4b7d48
name: 'Enim quaerat'
slug: enim-quaerat-142284
icon: null
color: null
created_at: null
updated_at: null
-
id: c9cd92c0-7fd9-397e-b695-daa17779afa6
title: 'Inventore eum voluptatem cupiditate'
description: 'Officiis consequatur soluta voluptatum quae nobis eos inventore.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-8907-4691-87c9-a3335bafabeb
name: 'Architecto sit'
slug: architecto-sit-755851
icon: null
color: null
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: b259d7f4-093c-3631-bf85-81b885f4df90
title:
type: string
example: 'Ipsa quo aut at'
description:
type: string
example: 'Provident itaque tempora eaque et.'
cover_url:
type: string
example: null
nullable: true
status:
type: string
example: draft
published_at:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
module:
type: object
properties:
id:
type: string
example: a3296004-85c0-40a1-88b1-4e000e4b7d48
name:
type: string
example: 'Enim quaerat'
slug:
type: string
example: enim-quaerat-142284
icon:
type: string
example: null
nullable: true
color:
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:
- 'Tutoriais (administração)'
post:
summary: 'Cadastrar tutorial'
operationId: cadastrarTutorial
description: 'Cria um tutorial. Nasce como rascunho e só aparece na central depois de publicado.'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 8d1913e9-214f-3c1a-ad51-c65781c18abe
title: 'Alias beatae officia minima'
description: 'Quia sed harum quod esse.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-93b1-4c9e-a907-f5f076386a02
name: 'Sed ex'
slug: sed-ex-315598
icon: null
color: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 8d1913e9-214f-3c1a-ad51-c65781c18abe
title:
type: string
example: 'Alias beatae officia minima'
description:
type: string
example: 'Quia sed harum quod esse.'
cover_url:
type: string
example: null
nullable: true
status:
type: string
example: draft
published_at:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
module:
type: object
properties:
id:
type: string
example: a3296004-93b1-4c9e-a907-f5f076386a02
name:
type: string
example: 'Sed ex'
slug:
type: string
example: sed-ex-315598
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
module_id:
type: string
description: 'Módulo. O campo value deve ser um UUID válido. The uuid of an existing record in the tutorial_modules table.'
example: 68927f6c-9d06-3cf8-b096-aae1d26c36c1
title:
type: string
description: 'Título. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Title'
description:
type: string
description: Descrição.
example: 'Example Description'
nullable: true
cover_path:
type: string
description: 'Capa. Must start with one of tutorials/.'
example: 'Example Cover path'
nullable: true
sort_order:
type: integer
description: 'Ordem. O campo value deve ser pelo menos 0.'
example: 1
sectors:
type: array
description: 'Setor. O campo value deve ser um UUID válido. The uuid of an existing record in the sectors table.'
example:
- 65ce4ae8-f084-3278-8cea-ef5d17eca32d
items:
type: string
permissions:
type: array
description: 'Permissão. The name of an existing record in the permissions table.'
example:
- 286f8488-38a1-31c4-b942-03a3ef2b7fe4
items:
type: string
required:
- module_id
- title
/api/admin/tutorials/upload-url:
post:
summary: 'Gerar URL de upload'
operationId: gerarURLDeUpload
description: 'Devolve uma URL assinada de curta validade para o cliente enviar o arquivo direto ao S3. O arquivo só é conferido depois, ao criar o item ou salvar a capa.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
url: string
headers: array
path: string
expires_in: integer
properties:
url:
type: string
example: string
headers:
type: string
example: array
path:
type: string
example: string
expires_in:
type: string
example: integer
tags:
- 'Tutoriais (administração)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
kind:
type: string
description: 'Tipo de arquivo.'
example: 'Example Kind'
enum:
- pdf
- video
- cover
filename:
type: string
description: 'Nome do arquivo. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Name'
extension:
type: string
description: 'Extensão do arquivo.'
example: 'Example Extension'
enum:
- null
size_bytes:
type: integer
description: 'Tamanho do arquivo. O campo value deve ser pelo menos 1. O campo value não pode ser superior a 0.'
example: 1
required:
- kind
- filename
- extension
- size_bytes
'/api/admin/tutorials/{id}':
get:
summary: 'Visualizar tutorial'
operationId: visualizarTutorial
description: 'Detalhe do tutorial com vínculos e itens'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: e4665f00-9aba-3a5b-8384-60893d7836a2
title: 'Occaecati molestias dolor minus'
description: 'Quidem a nihil nostrum quis.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-a03c-4eb4-921a-bc253f3e9499
name: 'Repudiandae et'
slug: repudiandae-et-46682
icon: null
color: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: e4665f00-9aba-3a5b-8384-60893d7836a2
title:
type: string
example: 'Occaecati molestias dolor minus'
description:
type: string
example: 'Quidem a nihil nostrum quis.'
cover_url:
type: string
example: null
nullable: true
status:
type: string
example: draft
published_at:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
module:
type: object
properties:
id:
type: string
example: a3296004-a03c-4eb4-921a-bc253f3e9499
name:
type: string
example: 'Repudiandae et'
slug:
type: string
example: repudiandae-et-46682
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
put:
summary: 'Atualizar tutorial'
operationId: atualizarTutorial
description: 'Atualiza o tutorial e os vínculos de setor e permissão'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: f0497049-1a10-3318-933a-3fb971738e66
title: 'Eius et quo aut'
description: 'Perferendis commodi tempora magnam rerum.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-aaa1-461f-8592-a98f27ff2f8d
name: 'Qui sed'
slug: qui-sed-726873
icon: null
color: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: f0497049-1a10-3318-933a-3fb971738e66
title:
type: string
example: 'Eius et quo aut'
description:
type: string
example: 'Perferendis commodi tempora magnam rerum.'
cover_url:
type: string
example: null
nullable: true
status:
type: string
example: draft
published_at:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
module:
type: object
properties:
id:
type: string
example: a3296004-aaa1-461f-8592-a98f27ff2f8d
name:
type: string
example: 'Qui sed'
slug:
type: string
example: qui-sed-726873
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
module_id:
type: string
description: 'Módulo. O campo value deve ser um UUID válido. The uuid of an existing record in the tutorial_modules table.'
example: f735e997-1014-3a1a-8de7-7631ae228255
title:
type: string
description: 'Título. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Title'
description:
type: string
description: Descrição.
example: 'Example Description'
nullable: true
cover_path:
type: string
description: 'Capa. Must start with one of tutorials/.'
example: 'Example Cover path'
nullable: true
sort_order:
type: integer
description: 'Ordem. O campo value deve ser pelo menos 0.'
example: 1
sectors:
type: array
description: 'Setor. O campo value deve ser um UUID válido. The uuid of an existing record in the sectors table.'
example:
- 9e4e8227-0f65-36ae-82e0-ea791834b0e8
items:
type: string
permissions:
type: array
description: 'Permissão. The name of an existing record in the permissions table.'
example:
- e315efbc-b095-3736-be4b-4080eb810d7a
items:
type: string
delete:
summary: 'Remover tutorial'
operationId: removerTutorial
description: 'Remove o tutorial, os itens e os arquivos correspondentes no S3'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Tutoriais (administração)'
parameters:
-
in: path
name: id
description: 'The ID of the tutorial.'
example: 1
required: true
schema:
type: integer
-
in: path
name: tutorial
description: 'UUID do tutorial'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string
'/api/admin/tutorials/{tutorial}/publish':
post:
summary: 'Publicar tutorial'
operationId: publicarTutorial
description: 'Publica o tutorial e carimba a data de publicação'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 4b875982-94f1-32c3-b123-980814619e83
title: 'Magni repellendus mollitia sit'
description: 'Architecto vel animi id aliquam.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-b335-4ed9-9931-310582d1381c
name: 'Laboriosam nesciunt'
slug: laboriosam-nesciunt-463811
icon: null
color: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 4b875982-94f1-32c3-b123-980814619e83
title:
type: string
example: 'Magni repellendus mollitia sit'
description:
type: string
example: 'Architecto vel animi id aliquam.'
cover_url:
type: string
example: null
nullable: true
status:
type: string
example: draft
published_at:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
module:
type: object
properties:
id:
type: string
example: a3296004-b335-4ed9-9931-310582d1381c
name:
type: string
example: 'Laboriosam nesciunt'
slug:
type: string
example: laboriosam-nesciunt-463811
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
parameters:
-
in: path
name: tutorial
description: 'UUID do tutorial'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string
'/api/admin/tutorials/{tutorial}/unpublish':
post:
summary: 'Despublicar tutorial'
operationId: despublicarTutorial
description: 'Devolve o tutorial ao rascunho e limpa a data de publicação'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 5e8bfaa3-c410-390c-b841-d7d35d214d2f
title: 'Vitae repudiandae dolor nam'
description: 'Voluptatem asperiores ut facere illo in enim dolore.'
cover_url: null
status: draft
published_at: null
sort_order: 0
module:
id: a3296004-b8a9-4612-828a-1544057858cb
name: 'Perferendis labore'
slug: perferendis-labore-406526
icon: null
color: null
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 5e8bfaa3-c410-390c-b841-d7d35d214d2f
title:
type: string
example: 'Vitae repudiandae dolor nam'
description:
type: string
example: 'Voluptatem asperiores ut facere illo in enim dolore.'
cover_url:
type: string
example: null
nullable: true
status:
type: string
example: draft
published_at:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
module:
type: object
properties:
id:
type: string
example: a3296004-b8a9-4612-828a-1544057858cb
name:
type: string
example: 'Perferendis labore'
slug:
type: string
example: perferendis-labore-406526
icon:
type: string
example: null
nullable: true
color:
type: string
example: null
nullable: true
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
parameters:
-
in: path
name: tutorial
description: 'UUID do tutorial'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string
'/api/admin/tutorials/{tutorial_id}/items':
post:
summary: 'Adicionar item ao tutorial'
operationId: adicionarItemAoTutorial
description: 'Cria o item a partir de um arquivo já enviado ao S3 (pdf ou video) ou de um link do YouTube/Vimeo. O arquivo é conferido aqui: existência, tamanho real e assinatura do conteúdo.'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 5307ded9-e723-3604-836c-2e4bd7909f37
type: pdf
title: 'Sint ipsa tempora'
mime_type: application/pdf
size_bytes: 1428861
duration_seconds: null
sort_order: 0
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 5307ded9-e723-3604-836c-2e4bd7909f37
type:
type: string
example: pdf
title:
type: string
example: 'Sint ipsa tempora'
mime_type:
type: string
example: application/pdf
size_bytes:
type: integer
example: 1428861
duration_seconds:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: Tipo.
example: 'Example Type'
enum:
- pdf
- video
- link
title:
type: string
description: 'Título. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Title'
file_path:
type: string
description: 'Caminho do arquivo. Must start with one of tutorials/.'
example: 'Example File path'
external_url:
type: string
description: 'Link externo.'
example: 'https://example.com'
duration_seconds:
type: integer
description: 'Duração em segundos. O campo value deve ser pelo menos 0.'
example: 1
nullable: true
sort_order:
type: integer
description: 'Ordem. O campo value deve ser pelo menos 0.'
example: 1
required:
- type
- title
- file_path
parameters:
-
in: path
name: tutorial_id
description: 'The ID of the tutorial.'
example: 1
required: true
schema:
type: integer
-
in: path
name: tutorial
description: 'UUID do tutorial'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string
'/api/admin/tutorials/{tutorial}/items/reorder':
put:
summary: 'Reordenar itens'
operationId: reordenarItens
description: 'Grava a ordem dos itens conforme a sequência de UUIDs enviada'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Itens reordenados com sucesso'
properties:
message:
type: string
example: 'Itens reordenados com sucesso'
tags:
- 'Tutoriais (administração)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
items:
type: array
description: 'Item. O campo value deve ser um UUID válido. The uuid of an existing record in the tutorial_items table.'
example:
- a24f3e13-aff3-3096-a51c-0d8f774e81d7
items:
type: string
required:
- items
parameters:
-
in: path
name: tutorial
description: 'UUID do tutorial'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string
'/api/admin/tutorial-items/{tutorialItem}':
put:
summary: 'Atualizar item'
operationId: atualizarItem
description: 'Atualiza o item. O tipo não muda depois de criado.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 0c93cee4-1dbb-3f5b-b3a4-1118316360a3
type: pdf
title: 'Et aut dolor'
mime_type: application/pdf
size_bytes: 1427481
duration_seconds: null
sort_order: 0
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 0c93cee4-1dbb-3f5b-b3a4-1118316360a3
type:
type: string
example: pdf
title:
type: string
example: 'Et aut dolor'
mime_type:
type: string
example: application/pdf
size_bytes:
type: integer
example: 1427481
duration_seconds:
type: string
example: null
nullable: true
sort_order:
type: integer
example: 0
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
tags:
- 'Tutoriais (administração)'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: 'Título. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Title'
file_path:
type: string
description: 'Caminho do arquivo. Must start with one of tutorials/.'
example: 'Example File path'
external_url:
type: string
description: 'Link externo. O campo value não pode ser superior a 2048 caracteres.'
example: 'https://example.com'
duration_seconds:
type: integer
description: 'Duração em segundos. O campo value deve ser pelo menos 0.'
example: 1
nullable: true
sort_order:
type: integer
description: 'Ordem. O campo value deve ser pelo menos 0.'
example: 1
delete:
summary: 'Remover item'
operationId: removerItem
description: 'Remove o item e apaga o arquivo correspondente no S3'
parameters: []
responses:
204:
description: ''
content:
application/json:
schema:
type: object
nullable: true
tags:
- 'Tutoriais (administração)'
parameters:
-
in: path
name: tutorialItem
description: 'UUID do item'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
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: 24f20448-dacd-3dc8-8cc0-69bf28024ea5
name: 'Santiago Anderson Cervantes'
abbreviation: 'Catarina Mary de Oliveira'
description: 'Quia iure quia vel.'
created_at: null
updated_at: null
-
id: a15dfc00-8261-3488-9f94-9db8508fdf84
name: 'Srta. Mirella Salas Barreto Filho'
abbreviation: 'Sr. Luiz Saito Carrara Neto'
description: 'Quos est sit vitae est vitae.'
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: 24f20448-dacd-3dc8-8cc0-69bf28024ea5
name: 'Santiago Anderson Cervantes'
abbreviation: 'Catarina Mary de Oliveira'
description: 'Quia iure quia vel.'
created_at: null
updated_at: null
-
id: a15dfc00-8261-3488-9f94-9db8508fdf84
name: 'Srta. Mirella Salas Barreto Filho'
abbreviation: 'Sr. Luiz Saito Carrara Neto'
description: 'Quos est sit vitae est vitae.'
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 24f20448-dacd-3dc8-8cc0-69bf28024ea5
name:
type: string
example: 'Santiago Anderson Cervantes'
abbreviation:
type: string
example: 'Catarina Mary de Oliveira'
description:
type: string
example: 'Quia iure quia vel.'
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: 86534254-025c-39a6-8dee-f4b8e700faf4
name: 'Mônica Godói'
abbreviation: 'Marcelo Flores Marinho'
description: 'Illo qui numquam rerum atque.'
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 86534254-025c-39a6-8dee-f4b8e700faf4
name:
type: string
example: 'Mônica Godói'
abbreviation:
type: string
example: 'Marcelo Flores Marinho'
description:
type: string
example: 'Illo qui numquam rerum atque.'
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: aliquid
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: aliquid
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: c702d822-14ea-3b01-8846-e6d0f273c059
name: 'Freida Steuber'
username: bell36
email: christa86@example.com
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
-
id: 6d4cf3d0-b2e8-33a5-b3e0-4e638a1c43c1
name: 'Lesly Kiehn'
username: matilda32
email: mosciski.tressa@example.com
certification: null
crea: null
last_login_at: null
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: c702d822-14ea-3b01-8846-e6d0f273c059
name: 'Freida Steuber'
username: bell36
email: christa86@example.com
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
-
id: 6d4cf3d0-b2e8-33a5-b3e0-4e638a1c43c1
name: 'Lesly Kiehn'
username: matilda32
email: mosciski.tressa@example.com
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
items:
type: object
properties:
id:
type: string
example: c702d822-14ea-3b01-8846-e6d0f273c059
name:
type: string
example: 'Freida Steuber'
username:
type: string
example: bell36
email:
type: string
example: christa86@example.com
certification:
type: string
example: null
nullable: true
crea:
type: string
example: null
nullable: true
last_login_at:
type: string
example: null
nullable: true
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'
certification:
type: string
description: 'Certificação. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Certification'
nullable: true
crea:
type: string
description: 'CREA. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Crea'
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
username:
type: string
description: Usuário.
example: grover.rohan
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:
- 6e0e70b0-e568-3433-8116-61ba873844d8
items:
type: string
roles:
type: array
description: 'UUID da função. The uuid of an existing record in the roles table.'
example:
- 689c7c5c-8a97-3e1d-9cc4-1cf3323a8c08
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: c11981bb-164b-3f42-980a-0a52ec94e497
name: 'Brady Bernhard'
username: flakin
email: stracke.sally@example.org
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
properties:
data:
type: object
properties:
id:
type: string
example: c11981bb-164b-3f42-980a-0a52ec94e497
name:
type: string
example: 'Brady Bernhard'
username:
type: string
example: flakin
email:
type: string
example: stracke.sally@example.org
certification:
type: string
example: null
nullable: true
crea:
type: string
example: null
nullable: true
last_login_at:
type: string
example: null
nullable: true
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'
certification:
type: string
description: 'Certificação. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Certification'
nullable: true
crea:
type: string
description: 'CREA. O campo value não pode ser superior a 255 caracteres.'
example: 'Example Crea'
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
username:
type: string
description: Usuário.
example: jmosciski
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:
- eccb1387-7cae-309d-9c37-fcddf92f2b8e
items:
type: string
roles:
type: array
description: 'UUID da função. The uuid of an existing record in the roles table.'
example:
- a20c2f16-e2b7-36c8-9917-7dd9442dc181
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:
- cbac120b-225b-3f9d-87dc-52d1f45305d6
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: ad
display_name: 'Doloribus eligendi et ad cum consequatur.'
-
id: null
name: laboriosam
display_name: 'Enim sunt et quae provident culpa.'
properties:
data:
type: array
example:
-
id: null
name: ad
display_name: 'Doloribus eligendi et ad cum consequatur.'
-
id: null
name: laboriosam
display_name: 'Enim sunt et quae provident culpa.'
items:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: ad
display_name:
type: string
example: 'Doloribus eligendi et ad cum consequatur.'
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: 0996bad9-ed9f-3530-8895-26f8e82a2df2
description: 'Sr. Alexandre da Cruz'
work:
id: null
name: null
documents: []
created_at: null
updated_at: null
-
id: 83f7ebf2-c956-325a-a812-f8477144681d
description: 'Cristian Santiago Filho'
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: 0996bad9-ed9f-3530-8895-26f8e82a2df2
description: 'Sr. Alexandre da Cruz'
work:
id: null
name: null
documents: []
created_at: null
updated_at: null
-
id: 83f7ebf2-c956-325a-a812-f8477144681d
description: 'Cristian Santiago Filho'
work:
id: null
name: null
documents: []
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 0996bad9-ed9f-3530-8895-26f8e82a2df2
description:
type: string
example: 'Sr. Alexandre da Cruz'
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: c2956f09-ad3f-3832-a3d7-95497b42de42
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: 28e3bdc5-cc4c-38e3-a2d5-e833d0ac3a55
description: 'Matheus Saito Sobrinho'
work:
id: null
name: null
documents: []
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: 28e3bdc5-cc4c-38e3-a2d5-e833d0ac3a55
description:
type: string
example: 'Matheus Saito Sobrinho'
work:
type: object
properties:
id:
type: string
example: null
nullable: true
name:
type: string
example: null
nullable: true
documents:
type: array
example: []
created_at:
type: string
example: null
nullable: true
updated_at:
type: string
example: null
nullable: true
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: acffd96a-2634-38fd-b495-0cc2063cceb5
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: 1f7c5d5a-8e1b-3fce-a97f-c8c7e04a90c9
name: 'Téo Heitor Duarte Jr.'
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
documents: []
locations: []
product_quantity_lists_count: 0
product_quantity_list_items_count: 0
product_requests_count: 0
product_request_items_count: 0
documents_count: 0
locations_documents_count: 0
total_documents_count: 0
daily_logs_count: 0
projects_count: 0
started_at:
date: '1981-04-10 09:11:33.000000'
timezone_type: 3
timezone: America/Sao_Paulo
created_at: null
updated_at: null
-
id: 6a56c7d4-4d3c-3ca5-9f09-0da492468639
name: 'Srta. Dayana Maia Neto'
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
daily_logs_count: 0
projects_count: 0
started_at:
date: '2025-06-11 19:32:21.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: 1f7c5d5a-8e1b-3fce-a97f-c8c7e04a90c9
name: 'Téo Heitor Duarte Jr.'
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
documents: []
locations: []
product_quantity_lists_count: 0
product_quantity_list_items_count: 0
product_requests_count: 0
product_request_items_count: 0
documents_count: 0
locations_documents_count: 0
total_documents_count: 0
daily_logs_count: 0
projects_count: 0
started_at:
date: '1981-04-10 09:11:33.000000'
timezone_type: 3
timezone: America/Sao_Paulo
created_at: null
updated_at: null
-
id: 6a56c7d4-4d3c-3ca5-9f09-0da492468639
name: 'Srta. Dayana Maia Neto'
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
daily_logs_count: 0
projects_count: 0
started_at:
date: '2025-06-11 19:32:21.000000'
timezone_type: 3
timezone: America/Sao_Paulo
created_at: null
updated_at: null
items:
type: object
properties:
id:
type: string
example: 1f7c5d5a-8e1b-3fce-a97f-c8c7e04a90c9
name:
type: string
example: 'Téo Heitor Duarte Jr.'
address:
type: object
properties:
street:
type: string
example: null
nullable: true
number:
type: string
example: null
nullable: true
complement:
type: string
example: null
nullable: true
neighborhood:
type: string
example: null
nullable: true
city:
type: string
example: null
nullable: true
state:
type: string
example: null
nullable: true
zip_code:
type: string
example: null
nullable: true
documents:
type: array
example: []
locations:
type: array
example: []
product_quantity_lists_count:
type: integer
example: 0
product_quantity_list_items_count:
type: integer
example: 0
product_requests_count:
type: integer
example: 0
product_request_items_count:
type: integer
example: 0
documents_count:
type: integer
example: 0
locations_documents_count:
type: integer
example: 0
total_documents_count:
type: integer
example: 0
daily_logs_count:
type: integer
example: 0
projects_count:
type: integer
example: 0
started_at:
type: object
properties:
date:
type: string
example: '1981-04-10 09:11:33.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: 26670cca-25d8-323d-a1f6-42fbde27e357
status_id:
type: string
description: 'Status id. The uuid of an existing record in the statuses table.'
example: 95579e39-83a2-32bf-8b28-c9a065501dc3
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: aa309841-bbae-30a6-b69d-10867b1c2c37
name: 'Giovana Azevedo Jr.'
address:
street: null
number: null
complement: null
neighborhood: null
city: null
state: null
zip_code: null
documents: []
locations: []
product_quantity_lists_count: 0
product_quantity_list_items_count: 0
product_requests_count: 0
product_request_items_count: 0
documents_count: 0
locations_documents_count: 0
total_documents_count: 0
daily_logs_count: 0
projects_count: 0
started_at:
date: '1998-06-27 13:06:40.000000'
timezone_type: 3
timezone: America/Sao_Paulo
created_at: null
updated_at: null
properties:
data:
type: object
properties:
id:
type: string
example: aa309841-bbae-30a6-b69d-10867b1c2c37
name:
type: string
example: 'Giovana Azevedo Jr.'
address:
type: object
properties:
street:
type: string
example: null
nullable: true
number:
type: string
example: null
nullable: true
complement:
type: string
example: null
nullable: true
neighborhood:
type: string
example: null
nullable: true
city:
type: string
example: null
nullable: true
state:
type: string
example: null
nullable: true
zip_code:
type: string
example: null
nullable: true
documents:
type: array
example: []
locations:
type: array
example: []
product_quantity_lists_count:
type: integer
example: 0
product_quantity_list_items_count:
type: integer
example: 0
product_requests_count:
type: integer
example: 0
product_request_items_count:
type: integer
example: 0
documents_count:
type: integer
example: 0
locations_documents_count:
type: integer
example: 0
total_documents_count:
type: integer
example: 0
daily_logs_count:
type: integer
example: 0
projects_count:
type: integer
example: 0
started_at:
type: object
properties:
date:
type: string
example: '1998-06-27 13:06:40.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: 1258a364-7da7-30b9-bc36-f9fe5528c63e
status_id:
type: string
description: 'Status id. The uuid of an existing record in the statuses table.'
example: e574ab7f-72cd-3144-b348-d81a347b792f
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: 4f50409a-a376-38ef-8e0f-66857a004e1c
name: 'Sandrine Nienow'
username: prosacco.kasandra
email: desiree.effertz@example.com
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
-
id: 8015d7d5-63f1-3a62-9f58-de7fc3099565
name: 'Prof. Irwin Lakin Sr.'
username: missouri46
email: owill@example.com
certification: null
crea: null
last_login_at: null
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: 4f50409a-a376-38ef-8e0f-66857a004e1c
name: 'Sandrine Nienow'
username: prosacco.kasandra
email: desiree.effertz@example.com
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
-
id: 8015d7d5-63f1-3a62-9f58-de7fc3099565
name: 'Prof. Irwin Lakin Sr.'
username: missouri46
email: owill@example.com
certification: null
crea: null
last_login_at: null
image:
id: null
url: null
sectors: []
roles: []
items:
type: object
properties:
id:
type: string
example: 4f50409a-a376-38ef-8e0f-66857a004e1c
name:
type: string
example: 'Sandrine Nienow'
username:
type: string
example: prosacco.kasandra
email:
type: string
example: desiree.effertz@example.com
certification:
type: string
example: null
nullable: true
crea:
type: string
example: null
nullable: true
last_login_at:
type: string
example: null
nullable: true
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:
- c4494fb6-61bc-3ef6-8b35-f1361ef1d9d2
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:
- 7777ff91-891b-3235-aec6-8ee2313dcba4
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:
- 491d0f94-3c6e-392f-95db-98c265a94917
items:
type: string
parameters:
-
in: path
name: work
description: 'Work UUID'
example: 019556e7-2e9f-777c-a177-30bbf0646c32
required: true
schema:
type: string