Skip to content

Instantly share code, notes, and snippets.

@matchish
Last active June 26, 2025 15:43
Show Gist options
  • Save matchish/33678ceb52620fec3f5ff1b663c3423c to your computer and use it in GitHub Desktop.
Save matchish/33678ceb52620fec3f5ff1b663c3423c to your computer and use it in GitHub Desktop.
openapi_spec_3.yaml
openapi: 3.0.3
info:
title: Flywheel backend
description: |-
This is the documentation of the flywheel backend api
contact:
email: [email protected]
version: 0.18.0
servers:
- url: "https://api-main.dev.flywheel.flywheel42.cloud" # dev URL
description: "This is a development server URL"
tags:
#TODO: Standardize it to snake_case/PascalCase [sc-54762]
- name: companies
- name: contacts
- name: entity_tags
- name: imports
- name: items
- name: users
- name: CompanyUsers
- name: vat_rates
- name: tags
- name: tasks
- name: permissions
- name: task_users
- name: roles_and_permissions
- name: exports
- name: finances
- name: consecutive_numberings
- name: documents
- name: templates
- name: files
- name: order_processes
- name: notes
- name: time_entries
- name: history
- name: default_texts
- name: file_attachments
- name: document_attachments
- name: xml_validation
- name: document_items
- name: subscriptions
- name: public_holidays
- name: feature_flags
- name: company_smtp_config
- name: work_time_contracts
- name: vacations
paths:
/companies/{id}:
get:
tags:
- companies
summary: Find company by ID
description: Returns a single company
operationId: ReadCompany
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Companies'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- companies
summary: Update an existing company
description: Update an existing company by Id
operationId: UpdateCompany
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent company
content:
application/json:
schema:
$ref: '#/components/schemas/CompanySchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Companies'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/company_users:
get:
tags:
- CompanyUsers
summary: List of company's user that filtered by company_id in header
description: Returns a list of company's user
operationId: ReadCompanyUsers
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/SEARCH'
- $ref: '#/components/parameters/FILTERS-PAGINATION'
responses:
'200':
$ref: '#/components/responses/CompanyUsers'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/company_users/{id}:
put:
tags:
- CompanyUsers
summary: Update an existing company_user
description: Update an existing company_user by Id
operationId: UpdateCompanyUsers
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent company user
content:
application/json:
schema:
$ref: '#/components/schemas/CompanyUserSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/CompanyUsers'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/vat_rates:
get:
tags:
- vat_rates
summary: Provides Vat Rates
description: Multiple vat rates can be provided
operationId: ListVatRates
parameters:
#- $ref: '#/components/parameters/FILTERS-PAGINATION'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/VatRateSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
post:
tags:
- vat_rates
summary: Create Vat Rate
description: One vat rate can be created
operationId: CreateVatRate
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
description: Create a vat rate
content:
application/json:
schema:
$ref: '#/components/schemas/VatRateSchemaCreate'
required: true
responses:
'201':
$ref: '#/components/responses/VatRates'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/vat_rates/{id}:
get:
tags:
- vat_rates
summary: Find vat rate by ID
description: Returns a single vat rate
operationId: ReadVatRate
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/VatRates'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- vat_rates
summary: Update an existing vat rate
description: Update an existing vat rate by Id
operationId: UpdateVatRate
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent vat rate
content:
application/json:
schema:
$ref: '#/components/schemas/VatRateSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/VatRates'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- vat_rates
summary: Deletes a vat rate
description: delete a vat rate
operationId: DeleteVatRate
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/imports:
get:
tags:
- imports
summary: Provides Imports
description: Multiple imports can be provided
operationId: ListImports
parameters:
#- $ref: '#/components/parameters/FILTERS-PAGINATION'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ImportSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/imports/{id}:
get:
tags:
- imports
summary: Find import by ID
description: Returns a single import
operationId: ReadImport
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Imports'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- imports
summary: Update an existing import
description: Update an existing import by Id
operationId: UpdateImport
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent import
content:
application/json:
schema:
$ref: '#/components/schemas/ImportSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Imports'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- imports
summary: Deletes an import
description: delete an import
operationId: DeleteImport
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/imports/{id}/validate:
put:
tags:
- imports
summary: Validate CSV file
description: Endpoint for validating CSV files
operationId: ValidateFile
parameters:
- in: path
name: id
required: true
schema:
type: string
description: Unique identifier for the entity
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportRequestBody'
responses:
'200':
description: File validation successful
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: "File validation successful"
'400':
description: Bad request
content:
application/json:
schema:
type: object
properties:
error_message:
type: string
example: "Missing required field: id"
'500':
description: Internal server error
content:
application/json:
schema:
type: object
properties:
error_message:
type: string
example: "An unexpected error occurred"
security:
- keycloakAuth: []
/imports/{id}/import:
put:
tags:
- imports
summary: Import CSV file
description: Endpoint for importing CSV files
operationId: StartImport
parameters:
- in: path
name: id
required: true
schema:
type: string
description: Unique identifier for the import
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ImportRequestBody'
responses:
'200':
description: Import succeeded
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: "PUT process started"
'400':
$ref: '#/components/responses/MissingOrInvalid'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/items:
get:
tags:
- items
summary: Provides items
description: Multiple items can be provided
operationId: ListItems
parameters:
- in: query
name: "type"
description: "Filter items based on item type."
schema:
type: string
enum:
- product
- service
- hourly_rate
#- $ref: '#/components/parameters/FILTERS-PAGINATION'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ItemSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
post:
tags:
- items
summary: Create a new item
description: "This endpoint allows adding a new item"
operationId: CreateItem
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ItemSchemaCreate'
responses:
'200':
$ref: '#/components/responses/Items'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- items
summary: Delete items
description: "Remove a specific item."
operationId: DeleteItems
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteManySchema'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/items/{id}:
get:
tags:
- items
summary: Find items by ID
description: Returns a single items
operationId: ReadItem
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Items'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- items
summary: Update an existing item
description: Update an existing item by Id
operationId: UpdateItem
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent item
content:
application/json:
schema:
$ref: '#/components/schemas/ItemSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Items'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- items
summary: Deletes a item
description: delete a item
operationId: DeleteItem
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/document_items:
post:
tags:
- document_items
summary: Create a new document_item, record.
description: This endpoint allows you to create a new document item.
operationId: CreateDocumentItem
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentItemSchemaCreate'
responses:
'200':
$ref: '#/components/responses/DocumentItems'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
delete:
tags:
- document_items
summary: Deletes one or many document items
description: delete one or many document items
operationId: DeleteDocumentItems
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteManySchema'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/document_items/{id}:
put:
tags:
- document_items
summary: Updates a document item.
description: Update a document item
operationId: UpdateDocumentItem
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentItemSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/DocumentItems'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/users/{id}:
get:
tags:
- users
summary: Find user by ID
description: Returns a single users
operationId: ReadUser
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Users'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- users
summary: Update an existing user
description: Update an existing user by id.
operationId: UpdateUser
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent user
content:
application/json:
schema:
$ref: '#/components/schemas/UserSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Users'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- users
summary: Deletes a user #TODO: Should not be allowed
description: delete a user
operationId: DeleteUser
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/users/{id}/permissions:
get:
tags:
- permissions
summary: Get permissions for user with user id
description: Returns permissions of user
operationId: ReadPermission
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Permission'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/users/me:
put:
tags:
- users
summary: Update the current authenticated user
description: >
Updates the details of the currently authenticated user.
The user ID is automatically resolved from the token so it is not supplied in the path.
operationId: UpdateMyUser
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
description: Update the current user's details.
content:
application/json:
schema:
$ref: '#/components/schemas/UserSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Users'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/users/me/permissions:
get:
tags:
- permissions
summary: Get permissions of the authenticated user
description: Returns permissions of authenticated user
operationId: ReadMyPermission
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
$ref: '#/components/responses/Permission'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/users/me/request_access:
post:
tags:
- users
summary: Allows user to request access to a company
description: This endpoint allows user to request access to a company.
operationId: RequestAccess
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
$ref: '#/components/responses/CompanyUsers'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/users/invite:
post:
tags:
- users
summary: Create a invite for a user
description: This endpoint allows you to create and send an invitation to a user.
operationId: CreateUserInvite
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserInviteSchema'
responses:
'200':
$ref: '#/components/responses/Users'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/users/{id}/invite:
put:
tags:
- users
summary: Update a user invite
description: An invitation can be resent to a user
operationId: UpdateUserInvite
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserInviteSchemaUpdate'
responses:
'204':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponseSchema'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/contacts:
get:
tags:
- contacts
summary: Provides contacts
description: Multiple contacts can be provided
operationId: ListContacts
parameters:
#- $ref: '#/components/parameters/FILTERS-PAGINATION'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ContactSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
post:
tags:
- contacts
summary: Create a new contact
description: "This endpoint allows adding a new contact."
operationId: CreateContact
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContactSchemaCreate'
responses:
'200':
$ref: '#/components/responses/Contacts'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- contacts
summary: Delete contacts
description: "Removes a specific contact."
operationId: DeleteContacts
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteManySchema'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/contacts/{id}:
get:
tags:
- contacts
summary: Find contact by ID
description: Returns a single contact
operationId: ReadContact
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Contacts'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- contacts
summary: Update an existing contact
description: Update an existing contact by Id
operationId: UpdateContact
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent contact
content:
application/json:
schema:
$ref: '#/components/schemas/ContactSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Contacts'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- contacts
summary: Deletes a contact
description: delete a contact
operationId: DeleteContact
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/order_processes:
get:
tags:
- order_processes
summary: Provides order processes
description: Multiple order processes can be provided
operationId: ListOrderProcesses
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/OrderProcessSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
post:
tags:
- order_processes
summary: Create a new order process
description: "This endpoint allows adding a new order process."
operationId: CreateOrderProcess
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrderProcessSchemaCreate'
responses:
'200':
$ref: '#/components/responses/OrderProcesses'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/order_processes/{id}:
get:
tags:
- order_processes
summary: Find order process by ID
description: Returns a single order process
operationId: ReadOrderProcess
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/OrderProcesses'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
put:
tags:
- order_processes
summary: Update an existing order process
description: Update an existing order process by Id
operationId: UpdateOrderProcess
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent order process
content:
application/json:
schema:
$ref: '#/components/schemas/OrderProcessSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/OrderProcesses'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/documents:
get:
tags:
- documents
summary: Provides documents
description: Multiple documents can be provided
operationId: ListDocuments
parameters:
- in: query
name: "has_items"
description: "Filter documents to only include those with associated document items"
schema:
type: boolean
example: True
default: False
- in: query
name: "only_orderprocessing_docs"
description: "Filter documents to only include those that belong to orderProcessing domain"
schema:
type: boolean
example: True
default: False
#- $ref: '#/components/parameters/FILTERS-PAGINATION'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
- name: order_id
in: query
description: The ID of the order to filter by. looks inside the document_details JSON.
required: false
schema:
type: string
format: uuid
example: 'fa54e4b2-a499-45ae-aaed-9de8b6aa1e72'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/DocumentSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
post:
tags:
- documents
summary: Create a new document
description: "This endpoint allows adding a new document."
operationId: CreateDocument
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentSchemaCreate'
responses:
'200':
$ref: '#/components/responses/Documents'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/documents/{id}:
get:
tags:
- documents
summary: Find document by ID
description: Returns a single document
operationId: ReadDocument
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Documents'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- documents
summary: Update an existing document
description: Update an existing document by Id
operationId: UpdateDocument
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent document
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Documents'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- documents
summary: Deletes a document
description: delete a document
operationId: DeleteDocument
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/documents/{id}/pdf:
get:
tags:
- documents
summary: Get presignedUrl for PDF of document, if present on S3
description: Get presignedUrl for PDF of document, if present on S3
operationId: GetDocumentPdf
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/DocumentPDF'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/documents/{id}/pdf/upload:
post:
tags:
- documents
summary: Upload PDF for a document
description: Upload PDF binary for a document after it is finalized
operationId: UploadDocumentPdf
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentPDFSchemaCreate'
responses:
'200':
$ref: '#/components/responses/DocumentPDF'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/documents/{id}/generate_einvoice:
get:
tags:
- documents
summary: Generate e-invoice file
description: Generate and download e-invoice file for eligible documents
operationId: GenerateEInvoice
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/EInvoice'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/templates:
get:
tags:
- templates
summary: Provides template
description: Multiple templates can be provided
operationId: ListTemplate
parameters:
- in: query
name: "type"
description: "Filter template based on type."
required: true
schema:
type: string
enum:
- LETTER
- EXPENSE
- OFFER
- INVOICE
- CUSTOM
- DEFECT
- CONFIRMATION
- PHOTOREPORT
- CHECKLISTMACHINETESTING
- SERVICEREPORT
- CANCELLATIONINVOICE
#- $ref: '#/components/parameters/FILTERS-PAGINATION'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TemplateSchemaRead'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
post:
tags:
- templates
summary: Create a new template
description: "This endpoint allows adding a new template."
operationId: CreateTemplate
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateSchemaCreate'
responses:
'200':
$ref: '#/components/responses/Templates'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/templates/{id}:
get:
tags:
- templates
summary: Find template by ID
description: Returns a single template
operationId: ReadTemplate
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Templates'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- templates
summary: Update an existing template
description: Update an existing template by Id
operationId: UpdateTemplate
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent template
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Templates'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- templates
summary: Deletes a template
description: delete a template
operationId: DeleteTemplate
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/files/presigned_url:
post:
tags:
- files
summary: Generate pre-signed URL for file upload
description: "This endpoint allows generating a pre-signed URL for file upload."
operationId: UploadFile
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PresignedUrlSchema'
responses:
'200':
$ref: '#/components/responses/FilesPresignedUrl'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/files/{id}:
get:
tags:
- files
summary: Get a file by ID
description: This endpoint retrieves a file identified by its unique ID.
operationId: ReadFile
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Files'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- files
summary: Delete a file by ID of DB & S3
description: "Removes a specific file"
operationId: DeleteFile
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/files/{id}/download:
get:
tags:
- files
summary: Get a pre signed url of a file by ID for preview or downloading
description: This endpoint generates a pre-signed URL for a specific file identified by its ID, allowing secure access for preview or downloading.
operationId: DownloadFile
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/ImagePresignUrl'
'202':
$ref: '#/components/responses/AcceptedRetryResponse'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/zipped_documents:
post:
tags:
- zip
summary: Generate a zip file for documents and a pre-signed url for downloading it.
description: This endpoint generates a zip file for documents of a specific month, and returns a pre-signed URL for downloading it.
operationId: DownloadZippedFiles
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ZippedDocumentsSchemaCreate'
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
$ref: '#/components/responses/FilesPresignedUrl'
'202':
$ref: '#/components/responses/AcceptedRetryResponse'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/notes:
get:
tags:
- notes
summary: Provides notes
description: Multiple notes can be provided
operationId: ListNotes
parameters:
- in: query
name: entity_id
description: ID of the related entity (e.g 'item', 'contact')
required: true
schema:
type: string
format: uuid
example: 85d4454e-a819-41a5-b796-4c00493f7aed
- in: query
name: entity_type
description: Type of the related entity
required: true
schema:
type: string
enum:
- company
- contact
- item
- user
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/NoteSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
post:
tags:
- notes
summary: Create Note
description: One note can be created
operationId: CreateNotes
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
description: Create a note
content:
application/json:
schema:
$ref: '#/components/schemas/NoteSchemaCreate'
required: true
responses:
'201':
$ref: '#/components/responses/Notes'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/notes/{id}:
get:
tags:
- notes
summary: Find note by ID
description: Returns a single note
operationId: ReadNotes
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/Notes'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- notes
summary: Update an existing note
description: Update an existing note by Id
operationId: UpdateNotes
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent note
content:
application/json:
schema:
$ref: '#/components/schemas/NoteSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Notes'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- notes
summary: Deletes a note
description: delete a note
operationId: DeleteNotes
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/tasks:
post:
tags:
- tasks
summary: Create a new task
description: "This endpoint allows adding a new task."
operationId: CreateTask
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TaskSchemaCreate'
responses:
'200':
$ref: '#/components/responses/TaskWithRelationships'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
get:
tags:
- tasks
summary: Provides tasks
description: Multiple tasks can be provided
operationId: ListTasks
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TaskSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- tasks
summary: Delete tasks
description: "Removes a specific task."
operationId: DeleteAllTasks
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteManySchema'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/tasks/{id}:
get:
tags:
- tasks
summary: Find task by ID
description: Returns a single task
operationId: ReadTask
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/TaskWithRelationships'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- tasks
summary: Update an existing task
description: Update an existing note by Id
operationId: UpdateTask
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent task
content:
application/json:
schema:
$ref: '#/components/schemas/TaskSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Tasks'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- tasks
summary: Deletes a task
description: delete a task
operationId: DeleteTask
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/task_users:
post:
tags:
- task_users
summary: Create a new task user role
description: "This endpoint allows adding a new task role."
operationId: CreateTaskUserRole
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TaskUserSchemaCreate'
responses:
'200':
$ref: '#/components/responses/TaskUsers'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/task_users/{id}:
put:
tags:
- task_users
summary: Updates a task user. Can only assign new user to existing task user.
description: Update the user of a task user
operationId: UpdateTaskUserRole
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update the user for an existent task user
content:
application/json:
schema:
$ref: '#/components/schemas/TaskUserSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/TaskUsers'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- task_users
summary: Deletes a task user role
description: delete a task user role
operationId: DeleteTaskUserRole
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/time_entries:
post:
tags:
- time_entries
summary: Create a new time entry
description: This endpoint allows you to create a new time entry.
operationId: CreateTimeEntry
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TimeEntrySchemaCreate'
responses:
'200':
$ref: '#/components/responses/TimeEntries'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
get:
tags:
- time_entries
summary: Provides time entries, sorted by start_time, by default in ascending order (oldest date first).
description: Multiple time entries can be returned
operationId: ListTimeEntries
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
- name: referenced_entity_id
in: query
description: The ID of the referenced entity to filter by. if used, has to be provided along with referenced_entity_type.
required: false
schema:
type: string
format: uuid
example: fa54e4b2-a499-45ae-aaed-9de8b6aa1e72
- name: referenced_entity_type
in: query
description: The type of the referenced entity to filter by (e.g., TASK). if used, has to be provided along with referenced_entity_id.
required: false
schema:
type: string
example: TASK
- name: referenced_entities
in: query
description: Used to filter non referenced entities in time entry. Must not be passed with referenced_entity_id and referenced_entity_type. Always pass [] as value to get all time entries that do not have reference entities
required: false
schema:
type: string
example: '[]'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TimeEntrySchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- time_entries
summary: Delete time entries
description: "Removes a time entries."
operationId: DeleteAllTimeEntries
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteManySchema'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/time_entries/{id}:
get:
tags:
- time_entries
summary: Find time entry by ID
description: Returns a single time entry
operationId: ReadTimeEntry
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
$ref: '#/components/responses/TimeEntries'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
put:
tags:
- time_entries
summary: Update an existing time entry
description: Update an existing time entry by Id
operationId: UpdateTimeEntry
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent time entry
content:
application/json:
schema:
$ref: '#/components/schemas/TimeEntrySchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/TimeEntries'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/consecutive_numberings:
get:
tags:
- consecutive_numberings
summary: Provides consecutive numberings
description: List of one consecutive numbering schema can be provided
operationId: ListConsecutiveNumberings
parameters:
- in: query
name: "entity_type"
description: "Filter consecutive numbering based on entity type."
required: true
schema:
type: string
example: item
- in: query
name: "subtype"
description: "Filter consecutive numbering based on subtype."
required: false
schema:
type: string
example: product
#- $ref: '#/components/parameters/FILTERS-PAGINATION'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
$ref: '#/components/responses/ConsecutiveNumberings'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/consecutive_numberings/{id}:
put:
tags:
- consecutive_numberings
summary: Update an existing consecutive numbering setting
description: Update an existing consecutive numbering by Id
operationId: UpdateConsecutiveNumbering
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent consecutive numbering
content:
application/json:
schema:
$ref: '#/components/schemas/ConsecutiveNumberingSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/ConsecutiveNumberings'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/tags:
get:
tags:
- tags
summary: List all tags
description: Returns a list of all tags
operationId: ListTags
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/TagSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
post:
tags:
- tags
summary: Create a new tag
description: Creates a new tag
operationId: CreateTag
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TagSchemaCreate'
responses:
'201':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/TagSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/tags/{id}:
get:
tags:
- tags
summary: Find tag by ID
description: Returns a single tag
operationId: ReadTag
parameters:
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/TagSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
put:
tags:
- tags
summary: Update an existing tag
description: Update an existing tag by Id
operationId: UpdateTag
parameters:
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existing tag
content:
application/json:
schema:
$ref: '#/components/schemas/TagSchemaUpdate'
required: true
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/TagSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
delete:
tags:
- tags
summary: Deletes a tag
description: Deletes a tag
operationId: DeleteTag
parameters:
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponseSchema'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/entity_tags:
get:
tags:
- entity_tags
summary: List all entity tags
description: Returns a list of all entity tags
operationId: ListEntityTags
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/EntityTagSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
post:
tags:
- entity_tags
summary: Create a new entity tag
description: Creates a new entity tag
operationId: CreateEntityTag
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EntityTagSchemaCreate'
responses:
'201':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/EntityTagSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/entity_tags/{id}:
get:
tags:
- entity_tags
summary: Find entity tag by ID
description: Returns a single entity tag
operationId: ReadEntityTag
parameters:
- $ref: '#/components/parameters/ID-IN-PATH'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/EntityTagSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
put:
tags:
- entity_tags
summary: Update an existing entity tag
description: Update an existing entity tag by Id
operationId: UpdateEntityTag
parameters:
- $ref: '#/components/parameters/ID-IN-PATH'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
description: Update an existing entity tag
content:
application/json:
schema:
$ref: '#/components/schemas/EntityTagSchemaUpdate'
required: true
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/EntityTagSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
delete:
tags:
- entity_tags
summary: Deletes an entity tag
description: Deletes an entity tag
operationId: DeleteEntityTag
parameters:
- $ref: '#/components/parameters/ID-IN-PATH'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'204':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponseSchema'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/validate_xml:
post:
tags:
- xml_validation
summary: Validates an XML file against a specified XSD schema.
description: This endpoint allows you to validate an XML file against a given XSD.
operationId: validateXml
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/XMLValidationSchemaCreate'
responses:
'200':
$ref: '#/components/responses/XMLValidation'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/history:
get:
tags:
- history
summary: Provides a history of updates in an entry.
description: List of one consecutive numbering schema can be provided
operationId: ListHistory
parameters:
- in: query
name: "entity_type"
description: "Type of the entity."
required: true
schema:
type: string
example: item
enum:
- company_user
- contact
- document
- item
- note
- task
- user
- vat_rate
- time_entry
- in: query
name: "entity_id"
description: "ID of the entity."
required: false
schema:
type: string
example: 85d4454e-a819-41a5-b796-4c00493f7aed
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
$ref: '#/components/responses/History'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/exports:
post:
tags:
- exports
summary: Starts a new export process
description: Starts a new export process
operationId: CreateExport
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExportSchemaCreate'
responses:
'201':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ExportSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/exports/{id}:
get:
tags:
- exports
summary: Find export by ID
description: Returns a single entity tag
operationId: ReadExport
parameters:
- $ref: '#/components/parameters/ID-IN-PATH'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ExportSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/default_texts:
get:
tags:
- default_texts
summary: Provides default texts
description: Multiple default texts can be provided
operationId: ListDefaultTexts
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/DefaultTextSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
post:
tags:
- default_texts
summary: Create a new default text
description: This endpoint allows you to create a new default text entry.
operationId: CreateDefaultText
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DefaultTextSchemaCreate'
responses:
'200':
$ref: '#/components/responses/DefaultTexts'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/default_texts/{id}:
get:
tags:
- default_texts
summary: Find default text by ID
description: Returns a single default text
operationId: ReadDefaultText
parameters:
- $ref: '#/components/parameters/ID-IN-PATH'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DefaultTextSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
put:
tags:
- default_texts
summary: Update an existing default text
description: Update an existing default text by Id
operationId: UpdateDefaultText
parameters:
- $ref: '#/components/parameters/ID-IN-PATH'
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
description: Update an existing default text
content:
application/json:
schema:
$ref: '#/components/schemas/DefaultTextSchemaUpdate'
required: true
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DefaultTextSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/role_and_permissions:
get:
tags:
- roles_and_permissions
summary: Provides role and permissions
description: Multiple role and permissions can be provided
operationId: ListRoleAndPermissions
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/RoleAndPermissionSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
/file_attachments:
post:
tags:
- file_attachments
summary: Create a new file attachment
description: |
Attach file to an entity
operationId: CreateFileAttachment
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FileAttachmentSchemaCreate'
responses:
'201':
$ref: '#/components/responses/FileAttachments'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
get:
tags:
- file_attachments
summary: Provides file attachments
description: |
Retrieves a list of existing file attachments. Multiple file attachments can be returned
operationId: ListFileAttachments
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/FileAttachmentWithFileSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
delete:
tags:
- file_attachments
summary: Deletes one or more file attachments
description: |
Deletes one or more file attachments. This action removes the association between a file an an entity
operationId: DeleteFileAttachment
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteManySchema'
responses:
'204':
description: Successful operation
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/document_attachments:
post:
tags:
- document_attachments
summary: Create a new document attachment
description: |
Attach document to an entity (currently only TASK)
operationId: CreateDocumentAttachment
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentAttachmentSchemaCreate'
responses:
'201':
$ref: '#/components/responses/DocumentAttachments'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
get:
tags:
- document_attachments
summary: Provides document attachments
description: |
Retrieves a list of existing document attachments. Multiple document attachments can be returned
operationId: ListDocumentAttachments
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/DocumentAttachmentSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
delete:
tags:
- document_attachments
summary: Deletes one or more document attachments
description: |
Deletes one or more document attachments. This action removes the association between a document and an entity
operationId: DeleteDocumentAttachment
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteManySchema'
responses:
'204':
description: Successful operation
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/cashbooks:
get:
tags:
- finances
summary: List all cashbooks
description: List all cashbooks
operationId: ListCashBooks
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CashbookSchemaRead'
post:
tags:
- finances
summary: Create a new cashbook
description: This endpoint allows you to create a new cashbook
operationId: CreateCashBook
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CashbookSchemaCreate'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/CashbookSchemaRead'
/cashbooks/{id}:
get:
tags:
- finances
summary: Get a specific cashbook
description: This endpoint retrieves the details of a specific cashbook identified by its unique ID.
operationId: ReadCashBook
parameters:
- in: path
name: id
required: true
schema:
type: string
format: uuid
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/CashbookSchemaRead'
put:
tags:
- finances
summary: Update or archive a cashbook
description: Updates a cashbook's description or archives the cashbook
operationId: UpdateCashBook
parameters:
- in: path
name: id
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CashbookSchemaUpdate'
responses:
'200':
description: Cashbook successfully updated or archived
content:
application/json:
schema:
$ref: '#/components/schemas/CashbookSchemaRead'
/cashbooks/{id}/transactions:
post:
tags:
- finances
summary: Create a new transaction for a cashbook
description: This endpoint allows you to create a new transaction associated with a specific cashbook
operationId: CreateTransaction
parameters:
- in: path
name: id
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionSchemaCreate'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionSchemaRead'
'422':
$ref: '#/components/responses/ValidationFailed'
'403':
$ref: '#/components/responses/Forbidden'
get:
tags:
- finances
summary: list all transactions for a cashbook
description: This endpoint retrieves a list of all transactions associated with a specific cashbook
operationId: ReadTransactions
parameters:
- in: path
name: id
required: true
schema:
type: string
format: uuid
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
- $ref: '#/components/parameters/SEARCH'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
/subscription_plans:
get:
tags:
- subscriptions
summary: List all subscription plans
description: Returns a list of available subscription plans
operationId: ListSubscriptionPlans
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SubscriptionPlanSchemaRead'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/discounts/validate:
post:
tags:
- subscriptions
summary: Validate subscription discount
description: Validates a discount code for subscription plans
operationId: ValidateSubscriptionDiscount
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
description: Discount validation request
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SubscriptionDiscountValidateSchema'
responses:
'200':
description: Successful validation
content:
application/json:
schema:
$ref: '#/components/schemas/SubscriptionDiscountSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/companies/{id}/company_subscription_plans:
get:
tags:
- subscriptions
summary: List company subscription plans of a company
description: Returns subscription plans for a specific company
operationId: ReadCompanySubscriptionPlans
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CompanySubscriptionPlanSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/companies/{id}/company_subscription_plans/upgrade:
post:
tags:
- subscriptions
summary: Upgrade Company Subscription Plan
description: Upgrades company's subscription plan to higher plan.
operationId: UpgradeCompanySubscriptionPlan
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Company subscription plan upgrade request.
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CompanySubscriptionPlanUpgradeSchema'
responses:
'200':
description: Successful upgrade
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CompanySubscriptionPlanSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/public_holidays:
get:
tags:
- public_holidays
summary: Provides public holidays
description: Multiple public holidays can be provided
operationId: ListPublicHolidays
parameters:
- in: query
name: year
description: Filter holidays by year
required: false
schema:
type: integer
example: 2024
- in: query
name: region_code
description: Filter holidays by German federal state
required: false
schema:
$ref: '#/components/schemas/GermanFederalState'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PublicHolidaySchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/vacations:
get:
tags:
- vacations
summary: Provides entitled vacations of company users
description: Multiple vacations can be provided
operationId: ListVacationdays
parameters:
- in: query
name: year
description: Filter vacations by year
required: false
schema:
type: integer
example: 2024
- in: query
name: user_id
description: Filter vacations by user_id
required: false
schema:
type: string
format: uuid
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
- $ref: '#/components/parameters/ORDER-DIRECTION'
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/VacationSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
post:
tags:
- vacations
summary: Create a new vacation
description: "This endpoint allows adding a new vacation of a user"
operationId: CreateVacation
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VacationSchemaCreate'
responses:
'200':
$ref: '#/components/responses/Vacations'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/vacations/{id}:
put:
tags:
- vacations
summary: Update an existing vacation
description: Update an existing vacation by Id
operationId: UpdateVacation
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
requestBody:
description: Update an existent vacation
content:
application/json:
schema:
$ref: '#/components/schemas/VacationSchemaUpdate'
required: true
responses:
'200':
$ref: '#/components/responses/Vacations'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- vacations
summary: Deletes a vacation
description: delete a vacation entry of a user
operationId: DeleteVacation
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/ID-IN-PATH'
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'423':
$ref: '#/components/responses/DisabledUser'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/work_time_contracts:
get:
tags:
- work_time_contracts
summary: Provides work time contracts
description: Multiple work time contracts can be provided
operationId: ListWorkTimeContracts
parameters:
- in: query
name: user_id
description: Filter work time contracts by user ID
required: false
schema:
type: string
format: uuid
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
- in: query
name: work_time_contract_start
description: Filter work time contracts by start date
required: false
schema:
type: string
format: date
example: "2024-01-01"
- in: query
name: work_time_contract_end
description: Filter work time contracts by end date
required: false
schema:
type: string
format: date
example: "2024-12-31"
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/WorkTimeContractSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
post:
tags:
- work_time_contracts
summary: Create a new work time contract
description: Creates a new work time contract
operationId: CreateWorkTimeContract
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WorkTimeContractSchemaCreate'
responses:
'201':
description: Work time contract created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/WorkTimeContractSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
delete:
tags:
- work_time_contracts
summary: Delete multiple work time contracts
description: Delete one or more work time contracts by their IDs
operationId: DeleteWorkTimeContracts
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ids:
type: array
items:
type: string
format: uuid
description: Array of work time contract IDs to delete
minItems: 1
example: ["12345678-1234-5678-1234-567812345678", "87654321-4321-8765-4321-876543218765"]
required:
- ids
responses:
'204':
$ref: '#/components/responses/DeleteNoContent'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/work_time_contracts/{id}:
put:
tags:
- work_time_contracts
summary: Update a work time contract
description: Update an existing work time contract by ID
operationId: UpdateWorkTimeContract
parameters:
- in: path
name: id
required: true
description: ID of the work time contract to update
schema:
type: string
format: uuid
example: "12345678-1234-5678-1234-567812345678"
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WorkTimeContractSchemaUpdate'
responses:
'200':
description: Work time contract updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/WorkTimeContractSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/ValidationFailed'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/feature_flags:
get:
tags:
- feature_flags
summary: Get all feature flags
description: Retrieve all feature flags with their current status as key-value pairs. Returns all flags in a single response (no pagination).
operationId: getFeatureFlags
responses:
'200':
description: All feature flags retrieved successfully
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
additionalProperties:
type: boolean
description: All feature flags as key-value pairs in a single object
example:
cashbook_is_enabled: true
another_feature: false
new_ui_enabled: false
maxItems: 1
description: Array containing a single object with all feature flags
total_result_count:
type: integer
description: Always 1 (single object containing all flags)
example: 1
total_page_count:
type: integer
description: Always 1 (no pagination for feature flags)
example: 1
page_size:
type: integer
description: Not applicable for feature flags (all returned)
example: 50
current_page:
type: integer
description: Always 0 (no pagination for feature flags)
example: 0
'400':
$ref: '#/components/responses/MissingOrInvalid'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: []
/company_smtp_config:
post:
tags:
- company_smtp_config
summary: Create SMTP configuration for a company
description: Create a new SMTP configuration (one per company).
operationId: CreateCompanySmtpConfig
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CompanySmtpConfigSchemaCreate'
responses:
'200':
$ref: '#/components/schemas/CompanySmtpConfigSchemaRead'
'400':
$ref: '#/components/responses/MissingOrInvalid'
'409':
$ref: '#/components/responses/ValidationFailed'
'422':
$ref: '#/components/responses/ValidationFailed'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
get:
tags:
- company_smtp_config
summary: List SMTP configurations
description: Retrieves all SMTP configurations for the given company (max 1).
operationId: ListSmtpConfigs
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- $ref: '#/components/parameters/PAGE_SIZE-PAGINATION'
- $ref: '#/components/parameters/PAGE-PAGINATION'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CompanySmtpConfigSchemaRead'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
/company_smtp_config/{id}:
get:
tags:
- company_smtp_config
summary: Get a company SMTP config
description: Get a company SMTP configuration for a company
operationId: GetCompanySmtpConfig
parameters:
- in: path
name: id
required: true
schema:
type: string
format: uuid
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/CompanySmtpConfigSchemaRead'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
put:
tags:
- company_smtp_config
summary: Update Company SMTP config
description: Update Company SMTP configuration for company
operationId: UpdateCompanySmtpConfig
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- name: id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CompanySmtpConfigSchemaUpdate'
responses:
'200':
$ref: '#/components/responses/CompanySmtpConfig'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
delete:
tags:
- company_smtp_config
summary: Delete SMTP configuration
description: Delete SMTP configuration for company
operationId: DeleteSmtpConfig
parameters:
- $ref: '#/components/parameters/X-WCS-COMPANY_ID-HEADER'
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Successfully deleted
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/ServerError'
security:
- keycloakAuth: [ ]
components:
securitySchemes:
keycloakAuth:
type: http
scheme: bearer
bearerFormat: JWT
schemas:
GermanFederalState:
type: string
enum:
- NATIONAL
- BW # Baden-Württemberg
- BY # Bayern
- BE # Berlin
- BB # Brandenburg
- HB # Bremen
- HH # Hamburg
- HE # Hessen
- MV # Mecklenburg-Vorpommern
- NI # Niedersachsen
- NW # Nordrhein-Westfalen
- RP # Rheinland-Pfalz
- SL # Saarland
- SN # Sachsen
- ST # Sachsen-Anhalt
- SH # Schleswig-Holstein
- TH # Thüringen
description: German federal states where this holiday is valid
example: "NATIONAL"
PublicHolidaySchema:
type: object
properties:
id:
type: string
format: uuid
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
region_code:
$ref: '#/components/schemas/GermanFederalState'
name:
type: string
description: Name of the public holiday
example: "Neujahr"
date:
type: string
format: date
description: Date of the holiday
example: "2024-01-01"
required:
- id
- region_code
- name
- date
PublicHolidaySchemaRead:
allOf:
- $ref: '#/components/schemas/PublicHolidaySchema'
- type: object
VacationSchema:
type: object
properties:
id:
type: string
format: uuid
year:
type: integer
description: year of which vacations will be allocated
example: 2025
vacation_limit:
type: integer
description: vacations of a user in a year
example: 28
carry_over_vacation:
description: vacation days carried over from last year
type: integer
example: 4
carry_over_vacation_expiration_date:
type: string
format: date
description: expiration date of carried over vacation
example: "2025-12-31"
company_id:
type: string
format: uuid
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
user_id:
type: string
format: uuid
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
VacationSchemaRead:
allOf:
- $ref: '#/components/schemas/VacationSchema'
- type: object
VacationSchemaUpdate:
allOf:
- $ref: '#/components/schemas/VacationSchema'
- type: object
required:
- id
- company_id
- user_id
VacationSchemaCreate:
allOf:
- $ref: '#/components/schemas/VacationSchema'
- type: object
properties:
id:
type: string
format: uuid
example: '550e8400-e29b-41d4-a716-446655440000'
required:
- year
- vacation_limit
- company_id
- user_id
ZippedDocumentsSchema:
type: object
properties:
year:
type: number
example: 2025
description: Year for filtering documents
month:
type: number
example: 4
description: The month you want to get the files from
include_datev_xml:
type: boolean
example: true
description: If true, include datev xml file in the zip and generate document.xml
ZippedDocumentsSchemaCreate:
allOf:
- $ref: '#/components/schemas/ZippedDocumentsSchema'
DocumentPDFSchema:
type: object
properties:
document_id:
type: string
format: uuid
description: The ID of the document
required:
- document_id
DocumentPDFSchemaRead:
allOf:
- $ref: '#/components/schemas/DocumentPDFSchema'
type: object
properties:
presigned_url:
type: string
description: presigned URL of the PDF file on S3
DocumentPDFSchemaCreate:
allOf:
- $ref: '#/components/schemas/DocumentPDFSchema'
type: object
properties:
pdf_binary:
type: string
description: base64-encoded pdf binary
required:
- pdf_binary
EInvoiceSchema:
type: object
properties:
document_id:
type: string
format: uuid
profile:
type: string
enum: [MINIMUM, BASICWL, BASIC, EN16931, EXTENDED]
default: MINIMUM
presigned_url:
type: string
EInvoiceSchemaRead:
allOf:
- $ref: '#/components/schemas/EInvoiceSchema'
XMLValidationSchema:
type: object
properties:
file_name:
type: string
example: 'example_xml.xml'
schema_name:
type: string
description: "Name of XSD schema"
example: 'autodetect'
default: 'autodetect'
enum:
- factur-x
- datev-ledger
- datev-document
- autodetect
XMLValidationSchemaCreate:
allOf:
- $ref: '#/components/schemas/XMLValidationSchema'
DocumentSchema:
type: object
properties:
id:
type: string
format: uuid
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
document_details:
type: object
description: The document details of the document, can be any valid JSON object.
type:
type: string
description: document types
example: LETTER
enum:
- LETTER
- EXPENSE
- OFFER
- INVOICE
- CUSTOM
- DEFECT
- CONFIRMATION
- PHOTOREPORT
- CHECKLISTMACHINETESTING
- SERVICEREPORT
- CANCELLATIONINVOICE
document_items:
type: array
description: A list of items in the document (e.g., invoice or offer), each represents a distinct row or position in the document item table.
items:
$ref: '#/components/schemas/DocumentItemSchema'
required:
- document_details
- type
DocumentSchemaRead:
allOf:
- $ref: '#/components/schemas/DocumentSchema'
- type: object
properties:
document_items:
type: array
description: A list of items in the document (e.g., invoice or offer), each represents a distinct row or position in the document item table.
items:
$ref: '#/components/schemas/DocumentItemSchemaRead'
template_schema:
type: object
description: The schema of the document, can be any valid JSON object.
tags:
type: array
items:
$ref: '#/components/schemas/TagReferencedSchemaRead'
nullable: true
files:
type: array
items:
$ref: '#/components/schemas/FileSchemaRead'
nullable: false
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
created_at:
type: string
format: date-time
description: Timestamp of when the document was created.
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
description: Timestamp of when the document was last updated.
example: "2024-01-01T00:00:00Z"
DocumentSchemaCreate:
allOf:
- $ref: '#/components/schemas/DocumentSchema'
- type: object
properties:
id:
type: string
format: uuid
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
DocumentSchemaUpdate:
allOf:
- $ref: '#/components/schemas/DocumentSchema'
- $ref: '#/components/schemas/CompanyRelationIdentifierSchema'
- type: object
required:
- id
TemplateSchema:
type: object
properties:
id:
type: string
format: uuid
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
schema_name:
type: object
description: The schema of the template, can be any valid JSON object.
type:
type: string
description: template types
example: LETTER
enum:
- LETTER
- EXPENSE
- OFFER
- INVOICE
- CUSTOM
- DEFECT
- CONFIRMATION
- PHOTOREPORT
- CHECKLISTMACHINETESTING
- SERVICEREPORT
- CANCELLATIONINVOICE
required:
- type
TemplateSchemaRead:
allOf:
- $ref: '#/components/schemas/TemplateSchema'
- type: object
properties:
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
states:
type: array
nullable: true
description: "list of states available for a template"
items:
type: string
enum:
- DRAFT
- PENDING_APPROVAL
- APPROVED
- FINALIZED
- SENT
- ACCEPTED
- REJECTED
- CONFIRMED
- CANCELED
- PAID
- OVERDUE
example: ["DRAFT", "PENDING_APPROVAL", "APPROVED", "FINALIZED", "SENT"]
required:
- type
TemplateSchemaCreate:
allOf:
- $ref: '#/components/schemas/TemplateSchema'
- type: object
properties:
id:
type: string
format: uuid
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
TemplateSchemaUpdate:
allOf:
- $ref: '#/components/schemas/TemplateSchema'
- $ref: '#/components/schemas/CompanyRelationIdentifierSchema'
- type: object
required:
- id
OrderProcessSchema:
type: object
properties:
id:
type: string
format: uuid
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
order_process_number:
type: string
example: "auf00000005"
description: "the number of the order process"
nullable: true
type:
type: string
description: "type of the order process"
enum:
- order
nullable: false
contact_id:
type: string
format: uuid
description: "uuid of the recipient contact"
contact_details:
$ref: "#/components/schemas/OrderProcessContact"
state:
type: string
description: "state of the order process"
example: DRAFT
enum:
- DRAFT
- PENDING_APPROVAL
- APPROVED
- SENT
- PAID
- OVERDUE
- DONE
created_by:
type: string
format: uuid
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
example: "12345678-1234-5678-1234-567812345678"
required:
- type
- state
OrderProcessContact:
type: object
properties:
name:
type: string
example: "Musterfirma GmbH/Max Mustermann"
maxLength: 50
minLength: 1
contact_person:
type: string
example: "Max Mustermann"
maxLength: 50
minLength: 1
address:
type: string
example: "Cuvrystraße 53"
maxLength: 50
minLength: 1
zip:
type: string
example: "10997"
maxLength: 10
minLength: 1
city:
type: string
example: "Berlin"
maxLength: 40
minLength: 1
country_code:
type: string
description: Two digit ISO31661 country code
example: "DE"
minLength: 1
OrderProcessSchemaRead:
allOf:
- $ref: '#/components/schemas/OrderProcessSchema'
- type: object
properties:
created_at:
type: string
format: date-time
description: Timestamp of when the order process was created.
example: "2024-01-01T00:00:00Z"
required:
- id
OrderProcessSchemaUpdate:
type: object
properties:
id:
type: string
format: uuid
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
order_process_number:
type: string
example: "auf00000005"
description: "the number of the order process"
nullable: true
type:
type: string
description: "type of the order process"
enum:
- order
nullable: false
contact_id:
type: string
format: uuid
description: "uuid of the recipient contact"
contact_details:
$ref: "#/components/schemas/OrderProcessContact"
state:
type: string
description: "state of the order process"
example: DRAFT
enum:
- DRAFT
- PENDING_APPROVAL
- APPROVED
- SENT
- PAID
- OVERDUE
- DONE
created_by:
type: string
format: uuid
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
example: "12345678-1234-5678-1234-567812345678"
required:
- id
OrderProcessSchemaCreate:
allOf:
- $ref: '#/components/schemas/OrderProcessSchema'
- type: object
CompanySchema:
type: object
properties:
id:
type: string
format: uuid
example: 091a8acb-a8ce-4f31-a9d8-7285cfc616ca
name:
type: string
description: At least 2 characters
example: ACME
state:
type: string
description: Company subscription state
example: testing
enum:
- testing
- free
- paying
- dunning
timezone:
type: string
description: IANA Timezone for the company
example: "Europe/Berlin"
default: "UTC"
enum:
- "UTC"
- "Europe/Berlin"
onboarding_survey_status:
type: string
example: unstarted
enum:
- unstarted
- step_1
- step_2
- completed
logo_id:
type: string
format: uuid
nullable: true
details:
$ref: '#/components/schemas/CompanyDetails'
contact_data:
$ref: '#/components/schemas/ContactData'
contact_person:
$ref: '#/components/schemas/ContactPerson'
bank_details:
type: array
items:
$ref: '#/components/schemas/CompanyBankDetails'
users:
description: TBD a list of users
CompanySchemaRead:
allOf:
- $ref: '#/components/schemas/CompanySchema'
- type: object
type: object
properties:
users:
description: TBD a list of users
external_details:
$ref: '#/components/schemas/ExternalCompanyDetails'
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
required:
- id
CompanySchemaCreate:
allOf:
- $ref: '#/components/schemas/CompanySchema'
- type: object
CompanySchemaUpdate:
allOf:
- $ref: '#/components/schemas/CompanySchema'
- type: object
type: object
required:
- id
AddressSchema:
type: object
properties:
street:
type: string
zip:
type: string
city:
type: string
country_code:
type: string
additional_information:
type: string
CompanyUserSchema:
type: object
properties:
id:
type: string
format: uuid
example: 091a8acb-a8ce-4f31-a9d8-7285cfc616ca
user_id:
type: string
format: uuid
example: 091a8acb-a8ce-4f31-a9d8-7285cfc616ca
company_id:
type: string
format: uuid
example: 091a8acb-a8ce-4f31-a9d8-7285cfc616ca
is_mobile:
type: boolean
description: has mobile subscription plan.
example: True
work_address:
$ref: '#/components/schemas/AddressSchema'
state:
type: string
description: user state
example: active
enum:
- active
- disabled
- invited
- access_requested
- not_invited
role:
type: string
example: "Admin"
enum:
- CompanyOwner
- Admin
- Member
user_data:
$ref: '#/components/schemas/UserDataSchema'
CompanyUserSchemaRead:
allOf:
- $ref: '#/components/schemas/CompanyUserSchema'
- type: object
type: object
properties:
external_details:
$ref: '#/components/schemas/ExternalCompanyUserDetails'
CompanyUserSchemaUpdate:
type: object
properties:
id:
type: string
format: uuid
example: 091a8acb-a8ce-4f31-a9d8-7285cfc616ca
state:
type: string
description: user state
example: active
nullable: true
enum:
- active
- disabled
- invited
- access_requested
- not_invited
work_address:
$ref: '#/components/schemas/AddressSchema'
role:
type: string
example: CompanyOwner
nullable: true
enum:
- CompanyOwner
- Admin
- Member
is_mobile:
type: boolean
description: "Has a mobile subscription plan"
example: true
nullable: true
required:
- company_id
- state
CompanyDetails:
type: object
properties:
size:
type: string
enum:
- "1"
- "2-5"
- "6-10"
- "> 10"
trade:
type: string
enum:
- building_services
- construction
- interior
- wood
- landscaping_gardening
- metal
- automotive_cargo
- miscellaneous
vat_id:
type: string
example: DE124356789012345678
maxLength: 20
minLength: 1
nullable: true
tax_number:
type: string
example: 123/456/78901
maxLength: 20
minLength: 1
nullable: true
managing_directors:
type: array
example: [\"Anton Hofmann\", \"Birte Rüdiger\"]
items:
type: string
district_court:
type: string
example: Amtgericht Pankow
company_registration_number:
type: string
example: DE781237
ContactData:
type: object
properties:
email:
type: string
format: email
example: [email protected]
phone:
type: string
address:
type: string
additional_address:
type: string
zip:
type: string
city:
type: string
country_code:
type: string
example: DE
ContactPerson:
type: object
properties:
salutation:
type: string
enum:
- Herr
- Frau
title:
type: string
firstname:
type: string
lastname:
type: string
email:
type: string
phone:
type: string
CompanyBankDetails:
type: object
properties:
iban:
type: string
bic:
type: string
bank_name:
type: string
account_owner:
type: string
ExternalCompanyDetails:
type: object
properties:
creation_source:
type: string
example: "wuerth_e-shop"
external_company_id:
type: string
example: "1461847"
AcceptedRetryResponseSchema:
type: object
properties:
message:
type: string
ErrorResponseSchema:
type: object
properties:
http_code:
type: integer
error_message:
type: string
ValidationErrorDetail:
type: object
properties:
field:
type: string
message:
type: string
code:
type: string
description: The error code associated with the validation error.
ValidationErrorResponseSchema:
allOf:
- $ref: '#/components/schemas/ErrorResponseSchema'
- type: object
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/ValidationErrorDetail'
DeleteManySchema:
description: The payload for deleting multiple resources.
type: array
example: [ "091a8acb-a8ce-4f31-a9d8-7285cfc616ca","a494d4e1-61a0-4599-b14d-96b91163c897" ]
items:
type: string
format: uuid
example: "091a8acb-a8ce-4f31-a9d8-7285cfc616ca"
minItems: 1
GenericResponseSchema:
type: object
properties:
message:
type: string
VatRateSchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
rate:
type: number
description: constraints are ge=0, le=1
example: 0.19
name:
type: string
description: min. length 3 characters
country_code:
type: string
description: Two digit ISO31661 country code
example: DE
is_default:
type: boolean
description: Identifies the pre-selected VAT rate in create views
example: true
VatRateSchemaRead:
allOf:
- $ref: '#/components/schemas/VatRateSchema'
- type: object
type: object
properties:
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
required:
- id
VatRateSchemaCreate:
allOf:
- $ref: '#/components/schemas/VatRateSchema'
- type: object
VatRateSchemaUpdate:
allOf:
- $ref: '#/components/schemas/VatRateSchema'
- type: object
required:
- id
ImportSchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
rate:
type: number
description: constraints are ge=0, le=1
example: 0.19
name:
type: string
description: min. length 3 characters
country_code:
type: string
description: Two digit ISO31661 country code
example: DE
original_file_name:
type: string
description: original file name
file_path:
type: string
description: storage file path
entity_type:
type: string
enum:
- item
file_type:
type: string
description: extension of file that will upload.
example: jpg
enum:
- csv
- jpg
- jpeg
- png
- pdf
file_size:
type: number
description: size of the file that is being uploaded in bytes
FieldMappings:
$ref: '#/components/schemas/FieldMappingsSchema'
state:
type: string
enum:
- url_generated
- uploaded
- mapped
- validated
- imported
- validation_failed
- import_failed
progress:
type: integer
description: Percentage value with constraints ge=0 and le=100
required:
- original_file_name
- entity_type
- file_type
- state
FieldMappingsSchema:
type: object
properties:
type:
type: integer
nullable: true
image:
type: integer
nullable: true
title:
type: integer
nullable: true
number:
type: integer
nullable: true
company_id:
type: integer
nullable: true
description:
type: integer
nullable: true
item_number:
type: integer
nullable: true
sales_price_net:
type: integer
nullable: true
measurement_unit:
type: integer
nullable: true
measurement_value:
type: integer
nullable: true
sales_price_gross:
type: integer
nullable: true
sales_price_currency:
type: integer
nullable: true
sales_price_vat_rate_id:
type: integer
nullable: true
identifier_numbers.EAN-Code:
type: integer
nullable: true
identifier_numbers.Alternative Artikelnummer-Code:
type: integer
nullable: true
identifier_numbers.ASIN:
type: integer
nullable: true
identifier_numbers.ISBN:
type: integer
nullable: true
identifier_numbers.JAN-Code:
type: integer
nullable: true
identifier_numbers.OEM-Nummer:
type: integer
nullable: true
identifier_numbers.UPC-Code:
type: integer
nullable: true
identifier_numbers.Zolltarifnummer:
type: integer
nullable: true
ImportSchemaRead:
allOf:
- $ref: '#/components/schemas/ImportSchema'
type: object
properties:
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
required:
- id
ImportSchemaCreate:
allOf:
- $ref: '#/components/schemas/ImportSchema'
- type: object
ImportSchemaUpdate:
allOf:
- $ref: '#/components/schemas/ImportSchema'
- $ref: '#/components/schemas/CompanyRelationIdentifierSchema'
- type: object
required:
- id
ResourceIdentifierSchema:
type: object
properties:
id:
type: string
format: uuid
example: 091a8acb-a8ce-4f31-a9d8-7285cfc616ca
CompanyRelationIdentifierSchema:
type: object
properties:
company_id:
type: string
format: uuid
description: UUID of the company.
example: "321ea12f-1dde-4ced-bd7e-ef5724d988cc"
required:
- company_id
IdentifierNumber:
type: object
properties:
type:
type: string
minLength: 1
number:
type: string
minLength: 1
ComponentSchema:
allOf:
- $ref: "#/components/schemas/ItemBaseSchema"
type: object
properties:
original_item_id:
type: string
format: uuid
description: "ID of the masterdata item from which this component is copied from"
quantity:
type: number
example: 1
unit:
type: string
example: "pce"
ComponentSchemaRead:
allOf:
- $ref: '#/components/schemas/ComponentSchema'
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
required:
- id
DocumentItemComponentSchema:
allOf:
- $ref: '#/components/schemas/ComponentSchema'
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
required:
- id
ComponentSchemaCreate:
allOf:
- $ref: '#/components/schemas/ComponentSchema'
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
ComponentSchemaUpdate:
allOf:
- $ref: '#/components/schemas/ComponentSchema'
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
required:
- id
LaborEffortSchema:
type: object
properties:
time_effort:
description: effort time in minutes
type: integer
example: 45
hourly_rate_item_id:
description: UUID of the master data item with type hourly_rate
type: string
format: UUID
example: 51584918-bd8c-4d47-9c8b-e92e8ebf70f6
description:
type: string
example: "labor effort in minutes and hourly rates"
LaborEffortSchemaRead:
allOf:
- $ref: '#/components/schemas/LaborEffortSchema'
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
required:
- id
LaborEffortSchemaCreate:
allOf:
- $ref: '#/components/schemas/LaborEffortSchema'
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
LaborEffortSchemaUpdate:
allOf:
- $ref: '#/components/schemas/LaborEffortSchema'
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
required:
- id
ItemBaseSchema:
type: object
properties:
title:
type: string
description: min. length 3 characters
minLength: 3
description:
type: string
description: max. length 1200 characters
maxLength: 1200
sales_price_net:
type: number
format: decimal
description: The net sales price for items, the max digits 10, decimal places 2
sales_price_gross:
type: number
format: decimal
description: The gross sales price for items, the max digits 10, decimal places 2
sales_price_currency:
type: string
description: The sales price currency is EURO for items
sales_price_vat_rate_id:
type: string
format: uuid
description: ID of the linked VAT rate
required:
- title
ItemSchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
type:
type: string
description: item types
example: product
enum:
- product
- service
- hourly_rate
title:
type: string
description: min. length 3 characters
image_id:
type: string
format: uuid
nullable: true
description:
type: string
description: max. length 2000 characters
maxLength: 2000
item_number:
type: string
description: the number of the item
nullable: true
measurement_unit:
type: string
nullable: true
measurement_value:
type: number
nullable: true
identifier_numbers:
type: array
items:
type: object
properties:
type:
type: string
minLength: 1
number:
type: string
minLength: 1
description: An array of identifier numbers for reading items
sales_price_net:
type: number
format: decimal
nullable: true
description: The net sales price for items, the max digits 10, decimal places 2
sales_price_gross:
type: number
format: decimal
nullable: true
description: The gross sales price for items, the max digits 10, decimal places 2
sales_price_currency:
type: string
nullable: true
description: The sales price currency is EURO for items
sales_price_vat_rate_id:
type: string
format: uuid
nullable: true
suppliers:
type: array
items:
$ref: '#/components/schemas/ItemSupplierSchema'
nullable: true
required:
- type
- title
ImagePathsSchema:
type: object
nullable: true
description: Paths to associated images
properties:
resized_62px:
type: string
description: URL for resized image (62px)
resized_300px:
type: string
description: URL for resized image (300px)
resized_960px:
type: string
description: URL for resized image (960px)
required:
- resized_62px
- resized_300px
- resized_960px
ItemSchemaRead:
allOf:
- $ref: '#/components/schemas/ItemSchema'
- type: object
required:
- id
properties:
image_paths:
allOf:
- $ref: '#/components/schemas/ImagePathsSchema'
original:
type: string
nullable: true
description: URL for original image
required:
- images
- original
tags:
type: array
items:
$ref: '#/components/schemas/TagReferencedSchemaRead'
nullable: true
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
created_at:
type: string
format: date-time
description: Timestamp of when the file was created.
example: "2024-01-01T00:00:00Z"
suppliers:
type: array
items:
$ref: '#/components/schemas/ItemSupplierSchemaRead'
nullable: true
components:
type: array
description: "sub items that are components of the service"
items:
$ref: '#/components/schemas/ComponentSchemaRead'
labor_efforts:
type: array
description: "sub items that are labor efforts of the service"
items:
$ref: '#/components/schemas/LaborEffortSchemaRead'
ItemSchemaCreate:
allOf:
- $ref: '#/components/schemas/ItemSchema'
- type: object
type: object
properties:
components:
type: array
description: "sub items that are components of the service"
items:
$ref: '#/components/schemas/ComponentSchemaCreate'
labor_efforts:
type: array
description: "sub items that are labor efforts of the service"
items:
$ref: '#/components/schemas/LaborEffortSchemaCreate'
ItemSchemaUpdate:
allOf:
- $ref: '#/components/schemas/ItemSchema'
- $ref: '#/components/schemas/CompanyRelationIdentifierSchema'
- type: object
properties:
suppliers:
type: array
items:
$ref: '#/components/schemas/ItemSupplierSchemaRead'
nullable: true
components:
type: array
description: "sub items that are components of the service"
items:
$ref: '#/components/schemas/ComponentSchemaUpdate'
labor_efforts:
type: array
description: "sub items that are labor efforts of the service"
items:
$ref: '#/components/schemas/LaborEffortSchemaUpdate'
required:
- id
UserSchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
salutation:
type: string
description: Salutation of the user.
example: "Herr"
enum:
- Herr
- Frau
title:
type: string
description: Title of the user.
example: Dr.
firstname:
type: string
description: Firstname of the user.
example: John
lastname:
type: string
description: Lastname of the user.
example: Doe
phone:
type: string
description: Phone number of the user
example: "+4915632145789"
onboarding_survey_status:
type: string
example: UNSTARTED
enum:
- UNSTARTED
- COMPLETED
required:
- firstname
- lastname
UserSchemaRead:
allOf:
- $ref: '#/components/schemas/UserSchema'
- type: object
type: object
properties:
email:
type: string
format: email
description: Email of the user.
example: [email protected]
companies:
type: array
description: List of companies the user belongs to.
items:
$ref: '#/components/schemas/CompanySchemaRead'
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
required:
- id
UserDataSchema:
allOf:
- type: object
type: object
properties:
salutation:
type: string
description: Salutation of the user.
enum:
- Herr
- Frau
title:
type: string
description: Title of the user.
example: Dr.
nullable: true
firstname:
type: string
description: First name of the user.
example: John
lastname:
type: string
description: Last name of the user.
example: Doe
phone:
type: string
description: Phone number of the user.
example: null
nullable: true
email:
type: string
format: email
description: Email of the user.
example: [email protected]
ExternalCompanyUserDetails:
type: object
properties:
creation_source:
type: string
example: "wuerth_e-shop"
external_user_id:
type: string
example: "9430607"
UserSchemaUpdate:
allOf:
- $ref: '#/components/schemas/UserSchema'
- type: object
type: object
required:
- id
UserReferenceSchema:
allOf:
- $ref: '#/components/schemas/GenericResponseSchema'
- type: object
type: object
properties:
id:
type: string
format: uuid
firstname:
type: string
description: The first name of the user.
lastname:
type: string
description: The last name of the user.
UserInviteSchema:
type: object
properties:
company_id:
type: string
format: uuid
role:
type: string
example: "Admin"
enum:
- CompanyOwner
- Admin
- Member
email:
type: string
format: email
example: "[email protected]"
is_mobile:
type: boolean
default: false
description: "Has a mobile subscription plan"
nullable: false
firstname:
type: string
description: Firstname of the contact.
example: "John"
lastname:
type: string
description: Lastname of the contact.
example: "Doe"
partner_number:
type: string
description: Partner number on Würth Onlineshop.
UserInviteSchemaRead:
allOf:
- $ref: "#/components/schemas/UserSchema"
- type: object
type: object
properties:
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
required:
- id
UserInviteSchemaUpdate:
allOf:
- $ref: "#/components/schemas/UserInviteSchema"
- type: object
type: object
required:
- id
properties:
id:
type: string
format: uuid
description: Unique ID of the invited user
example: "47d7a0a8-fd2f-4615-a6e2-556c45e55827"
ContactBankAccount:
type: object
properties:
iban:
type: string
description: IBAN of the bank account.
example: "DE02120300000000202051"
bic:
type: string
description: BIC of the bank account.
example: "BYLADEM1001"
bank_name:
type: string
description: Name of the bank account.
example: "DEUTSCHE KREDITBANK BERLIN"
account_owner:
type: string
description: Name of the bank account owner.
example: "John Doe"
ContactSchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
contact_number:
type: string
description: Contact number.
example: "123456"
minLength: 1
maxLength: 16
salutation:
type: string
description: Salutation of the contact.
example: "Herr"
enum:
- Herr
- Frau
title:
type: string
description: Title of the contact.
example: "Dr."
maxLength: 10
firstname:
type: string
description: Firstname of the contact.
example: "John"
maxLength: 20
lastname:
type: string
description: Lastname of the contact.
example: "Doe"
maxLength: 20
company_name:
type: string
description: Company name of the contact.
example: "WCS"
maxLength: 200
email:
type: string
format: email
description: Email the contact.
example: "[email protected]"
phone:
type: string
description: Phone number of the contact
example: "+4915632145789"
website:
type: string
description: Website of the contact.
example: "www.john-doe.com"
address:
type: string
description: Address of the contact.
example: "Suncity Street 23"
maxLength: 50
additional_address:
type: string
description: Additional address of the contact.
example: "Moon Rover Block"
maxLength: 200
zip:
type: string
description: Postal code of the contact.
example: "74516"
maxLength: 10
city:
type: string
description: City of the contact.
example: "New York"
maxLength: 50
country_code:
type: string
pattern: '^[A-Z]{2}$'
description: Country code of the contact. Confirming ISO-31661
example: "DE"
bank_accounts:
type: array
items:
$ref: '#/components/schemas/ContactBankAccount'
required:
- contact_number
ContactSchemaCreate:
allOf:
- $ref: '#/components/schemas/ContactSchema'
- type: object
type: object
ContactSchemaRead:
allOf:
- $ref: '#/components/schemas/ContactSchema'
- type: object
properties:
tags:
type: array
items:
$ref: '#/components/schemas/TagReferencedSchemaRead'
nullable: true
type: object
properties:
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
created_at:
type: string
format: date-time
description: Timestamp of when the file was created.
example: "2024-01-01T00:00:00Z"
required:
- id
ContactSchemaUpdate:
allOf:
- $ref: '#/components/schemas/ContactSchema'
- $ref: '#/components/schemas/CompanyRelationIdentifierSchema'
- type: object
type: object
required:
- id
PresignedUrlSchema:
type: object
properties:
entity_type:
type: string
description: Type of related entity.
example: item
enum:
- item
- image
- document
file_type:
type: string
example: csv
enum:
- csv
- jpg
- jpeg
- png
- pdf
original_file_name:
type: string
example: "example_image.jpg"
file_size:
type: number
description: size of the file that is being uploaded in bytes
resource_path:
type: string
example: import
enum:
- import
- item
- logo
- document
caption:
type: string
description: small description of a photo
example: any string value
nullable: true
required:
- entity_type
- file_type
- original_file_name
- resource_path
- file_size
ImportRequestBody:
type: object
properties:
id:
type: string
format: uuid
required:
- id
ImagePresignUrlSchema:
type: object
properties:
presignedURL:
$ref: "#/components/schemas/ImageSchema"
ImageSchema:
type: object
properties:
original:
type: string
resized_62px:
type: string
resized_300px:
type: string
resized_960px:
type: string
FilePathsSchema:
type: object
properties:
original:
type: string
images:
$ref: '#/components/schemas/ImageSchema'
FileSchema:
type: object
properties:
id:
type: string
format: uuid
company_id:
type: string
format: uuid
entity_type:
type: string
enum:
- image
- item
- document
file_path:
$ref: '#/components/schemas/FilePathsSchema'
file_size:
type: number
nullable: true
description: size of the file in bytes
state:
type: string
enum:
- url_generated
- uploaded
- resized
- processing_failed
- deleted
original_file_name:
type: string
description: original file name
nullable: false
caption:
type: string
example: string
nullable: true
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
FileSchemaCreate:
allOf:
- $ref: '#/components/schemas/FileSchema'
- type: object
properties:
id:
type: string
format: uuid
required:
- id
example:
id: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
FileSchemaRead:
allOf:
- $ref: '#/components/schemas/FileSchema'
type: object
properties:
created_at:
type: string
format: date-time
description: Timestamp of when the file was created.
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
description: Timestamp of when the file was last updated.
example: "2024-01-01T00:00:00Z"
FileSchemaUpdate:
$ref: '#/components/schemas/FileSchema'
NoteSchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
entity_id:
type: string
format: uuid
description: UUID of the entity related to the note.
example: "321ea12f-1dde-4ced-bd7e-ef5724d988cc"
entity_type:
type: string
description: Type of related entity.
example: item
enum:
- company
- contact
- item
- user
- task
body:
type: string
description: max. length 500 characters.
NoteSchemaRead:
allOf:
- $ref: '#/components/schemas/NoteSchema'
- type: object
properties:
company_id:
type: string
format: uuid
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
created_at:
type: string
format: date-time
description: Timestamp of when the note was created.
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
description: Timestamp of when the note was last updated.
example: "2024-01-01T00:00:00Z"
created_by_user:
allOf:
- $ref: '#/components/schemas/UserReferenceSchema'
- type: object
updated_by_user:
allOf:
- $ref: '#/components/schemas/UserReferenceSchema'
- type: object
required:
- id
NoteSchemaCreate:
properties:
entity_id:
type: string
format: uuid
description: UUID of the entity related to the note.
example: "321ea12f-1dde-4ced-bd7e-ef5724d988cc"
entity_type:
type: string
description: Type of related entity.
example: item
enum:
- company
- contact
- item
- user
- task
body:
type: string
description: max. length 500 characters.
NoteSchemaUpdate:
allOf:
- $ref: '#/components/schemas/NoteSchema'
- type: object
required:
- id
TaskSchema:
type: object
properties:
title:
type: string
description: maximum 100 characters
example: ACME
description:
type: string
description: maximum 1200 characters
example: Task for construction
nullable: true
location:
$ref: '#/components/schemas/LocationSchema'
archived_at:
type: string
format: date-time
nullable: true
example: "2024-01-01T00:00:00Z"
started_at:
type: string
format: date-time
nullable: true
example: "2024-01-01T00:00:00Z"
completed_at:
type: string
format: date-time
nullable: true
example: "2024-01-01T00:00:00Z"
status:
type: string
example: open
enum:
- completed
- in_progress
- open
priority:
type: string
example: low
enum:
- low
- medium
- high
- none
contact_id:
type: string
format: uuid
nullable: true
company_id:
type: string
format: uuid
TaskSchemaCreate:
allOf:
- $ref: '#/components/schemas/TaskSchema'
- type: object
type: object
properties:
task_users:
type: array
items:
$ref: '#/components/schemas/TaskCreateTaskUserSchemaCreate'
kanban_board_previous_task_id:
type: string
format: uuid
nullable: true
default: null
description: This field should be always set to default value null. This will put new task to the top in kanban column.
required:
- title
- company_id
TaskSchemaUpdate:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- $ref: '#/components/schemas/TaskSchema'
- type: object
type: object
properties:
kanban_board_previous_task_id:
type: string
format: uuid
nullable: true
description: |
This field specifies the task after which the current task should be positioned on the Kanban board. It can have three states:
1. Null: The value is null, which places the task in the first position.
2. UUID: The value is a specific task ID, which places the current task immediately after the specified task.
3. Omitted: The field is not provided, which means the task's position will not be updated. This field can not be ommited if task status is changed.
required:
- id
- title
- company_id
TaskSchemaRead:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- $ref: '#/components/schemas/TaskSchema'
- type: object
type: object
properties:
kanban_card_position_index:
type: number
nullable: true
example: 1.5
description: kanban position index of the task for sorting task status wise
task_users:
type: array
items:
$ref: '#/components/schemas/TaskUserSchemaRead'
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
TaskUserSchema:
type: object
properties:
company_id:
type: string
format: uuid
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
user_id:
type: string
format: uuid
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
task_id:
type: string
format: uuid
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
role:
type: string
example: requester
enum:
- requester
- owner
- follower
TaskUserSchemaCreate:
allOf:
- $ref: '#/components/schemas/TaskUserSchema'
- type: object
type: object
required:
- user_id
- role
- task_id
- company_id
TaskUserSchemaRead:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- $ref: '#/components/schemas/TaskUserSchema'
- type: object
type: object
TaskUserSchemaUpdate:
type: object
properties:
id:
type: string
format: uuid
example: "123e4567-e89b-12d3-a456-426614174000"
user_id:
type: string
format: uuid
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
required:
- user_id
- id
TimeEntrySchema:
type: object
properties:
start_time:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
end_time:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
description:
type: string
description: maximum 1200 characters
example: A note to time entry
user_id:
type: string
format: uuid
required:
- start_time
- end_time
- user_id
TaskCreateTaskUserSchemaCreate:
allOf:
- $ref: '#/components/schemas/TaskUserSchema'
type: object
required:
- role
- user_id
TimeEntryReferencedEntitiesSchema:
type: object
properties:
referenced_entities:
type: array
items:
type: object
properties:
entity_id:
type: string
format: uuid
entity_type:
type: string
enum:
- TASK
- DOCUMENT_ITEM
- HOURLY_RATE_ITEM
description: Referenced entities of the time entry.
TimeEntrySchemaCreate:
allOf:
- $ref: '#/components/schemas/TimeEntrySchema'
- $ref: '#/components/schemas/TimeEntryReferencedEntitiesSchema'
- type: object
type: object
TimeEntrySchemaUpdate:
allOf:
- $ref: '#/components/schemas/TimeEntrySchema'
- type: object
properties:
id:
type: string
example: "123e4567-e89b-12d3-a456-426614174000"
type: object
TimeEntrySchemaRead:
allOf:
- $ref: '#/components/schemas/TimeEntrySchema'
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- $ref: '#/components/schemas/TimeEntryReferencedEntitiesSchema'
- type: object
type: object
properties:
duration:
type: number
description: Duration of the time entry in seconds
example: 3600
company_id:
type: string
format: uuid
required:
- duration
- company_id
- id
LocationSchema:
type: object
properties:
google_place_id:
type: string
address:
type: string
city:
type: string
zip:
type: string
additional_address:
type: string
nullable: true
country_code:
type: string
nullable: true
longitude:
type: number
nullable: true
latitude:
type: number
nullable: true
ConsecutiveNumberingSchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
entity_type:
type: string
description: Entity type of the consecutive numbering.
enum:
- item
- order_process
- document
subtype:
type: string
description: Subtype of entity type of the consecutive numbering.
enum:
- product
- offer
- order
- invoice
- cancellationinvoice
consecutive_schema:
type: string
description: Consecutive schema of the consecutive numbering.
example: "art{consecutive_number}"
is_enabled:
type: boolean
description: Consecutive numbering is enabled or not.
example: True
consecutive_number:
type: integer
description: Consecutive number of the consecutive numbering.
example: 10
digit:
type: integer
description: Digit of the consecutive numbering with ge=1 and le=10.
example: 8
required:
- entity_type
- subtype
ConsecutiveNumberingSchemaRead:
allOf:
- $ref: '#/components/schemas/ConsecutiveNumberingSchema'
- type: object
type: object
required:
- entity_type
- subtype
ConsecutiveNumberingSchemaUpdate:
type: object
properties:
id:
type: string
description: "ID of the consecutive numbering setting to be updated."
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
consecutive_number:
type: integer
description: "the number from which we start generating the consecutive numberings"
example: 5
consecutive_schema:
type: string
description: "the format of the consecutive numbering"
example: "re{consecutive_number}"
digit:
type: integer
description: "Minimum number of digits to be handled by the consecutive numbering"
example: 4
PermissionEndpoint:
type: object
properties:
methods:
type: array
items:
type: string
enum: [ GET, POST, PUT, DELETE ]
description: HTTP methods allowed for this endpoint.
endpoint:
type: string
description: The API endpoint.
required:
- methods
- endpoint
PermissionSchema:
type: object
properties:
user_id:
type: string
format: uuid
description: UUID of the user.
example: 85d4454e-a819-41a5-b796-4c00493f7aed
company_id:
type: string
format: uuid
description: UUID of the company.
example: 85d4454e-a819-41a5-b796-4c00493f7aed
role:
type: string
description: Role of the user in respect to company.
example: "CompanyOwner"
permissions:
type: array
description: List of endpoints and methods the user has access to.
items:
$ref: '#/components/schemas/PermissionEndpoint'
required:
- user_id
- company_id
- role
- permissions
PermissionSchemaRead:
allOf:
- $ref: '#/components/schemas/PermissionSchema'
- type: object
type: object
EntityTagSchema:
type: object
properties:
id:
type: string
format: uuid
tag_id:
type: string
format: uuid
entity_id:
type: string
format: uuid
entity_type:
type: string
enum:
- company
- contact
- item
- user
EntityTagSchemaRead:
allOf:
- $ref: '#/components/schemas/EntityTagSchema'
- type: object
properties:
tag_name:
type: string
nullable: true
created_at:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
EntityTagSchemaUpdate:
allOf:
- $ref: '#/components/schemas/EntityTagSchema'
- type: object
properties:
created_at:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
tag_name:
type: string
nullable: true
EntityTagSchemaCreate:
allOf:
- $ref: '#/components/schemas/EntityTagSchema'
- type: object
properties:
id:
type: string
format: uuid
example: '550e8400-e29b-41d4-a716-446655440000'
TagSchema:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
minLength: 3
maxLength: 50
pattern: "^[a-zA-Z0-9\\-_&()]+$"
TagSchemaRead:
allOf:
- $ref: '#/components/schemas/TagSchema'
- type: object
properties:
created_at:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
TagSchemaUpdate:
allOf:
- $ref: '#/components/schemas/TagSchema'
TagSchemaCreate:
allOf:
- $ref: '#/components/schemas/TagSchema'
- type: object
properties:
id:
type: string
format: uuid
example: '550e8400-e29b-41d4-a716-446655440000'
TagReferencedSchemaRead:
type: object
properties:
id:
type: string
format: uuid
entity_tag_id:
type: string
format: uuid
name:
type: string
HistorySchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
id:
type: string
description: History ID.
example: "14b10914-9b5a-4f01-818d-ac9e5d399093"
entity_id:
type: string
description: ID of an specific entity (e.g item or contact).
example: "12310914-9b5a-4f01-818d-ac9e5d399321"
diff:
type: object
description: Values before and after update for different fields.
additionalProperties:
type: object
properties:
new:
type: string
description: The new value for this field.
example: "ac6468ee-7ade-4a0a-8854-a00536c86334"
old:
type: string
description: The old value for this field. Can be null if not previously set.
nullable: true
example: null
example:
updated_by:
new: "4a62f74b-ead6-4c2b-8bb4-8e572e44f43e"
old: null
bank_accounts:
new: "[{\"bic\": \"DEUTDEFFXXX\", \"iban\": \"DE89370400440532013000\", \"bank_name\": \"Deutsche Bank\", \"account_owner\": \"John Doe\"}]"
old: "[{\"bic\": \"INGDDEFFXXX\", \"iban\": \"DE75512108001245126199\", \"bank_name\": \"ING\", \"account_owner\": \"Jane Smith\"}]"
contact_number:
new: "+491234567890"
old: "+499876543210"
updated_at:
type: string
description: Update timestamp.
example: "2024-06-06T13:22:38.888919"
updated_by:
type: object
description: User responsible for the update.
example: {
'id': 'eac58d35-4a68-4bd5-bc28-172ca2eb326b',
'salutation': 'Herr',
'title': null,
'firstname': 'John',
'lastname': 'Doe'
}
required:
- entity_type
HistorySchemaRead:
allOf:
- $ref: '#/components/schemas/HistorySchema'
- type: object
properties:
created_at:
type: string
description: Create timestamp.
example: "2024-06-06T13:20:38.888919"
type: object
required:
- entity_type
ItemSupplierSchema:
type: object
properties:
id:
type: string
format: uuid
example: '550e8400-e29b-41d4-a716-446655440000'
contact_id:
type: string
format: uuid
example: '550e8400-e29b-41d4-a716-446655440000'
item_id:
type: string
format: uuid
example: '550e8400-e29b-41d4-a716-446655440000'
company_id:
type: string
format: uuid
example: '550e8400-e29b-41d4-a716-446655440000'
purchase_price_net:
type: number
format: decimal
nullable: true
description: The net sales price for items, the max digits 10, decimal places 2
sales_price_gross:
type: number
format: decimal
nullable: true
description: The gross sales price for items, the max digits 10, decimal places 2
supplier_item_number:
type: string
nullable: true
ItemSupplierSchemaRead:
allOf:
- $ref: '#/components/schemas/ItemSupplierSchema'
- type: object
properties:
contact:
type: object
properties:
id:
type: string
format: uuid
description: "Unique identifier for the supplier"
contact_number:
type: string
description: "Contact number of the supplier"
salutation:
type: string
nullable: true
description: "Salutation of the supplier"
title:
type: string
nullable: true
description: "Title of the supplier"
firstname:
type: string
nullable: true
description: "First name of the supplier"
lastname:
type: string
nullable: true
description: "Last name of the supplier"
company_name:
type: string
nullable: true
description: "Name of the company"
created_at:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
ItemSupplierSchemaUpdate:
allOf:
- $ref: '#/components/schemas/ItemSupplierSchema'
ItemSupplierSchemaCreate:
allOf:
- $ref: '#/components/schemas/ItemSupplierSchema'
- type: object
properties:
id:
type: string
format: uuid
example: '550e8400-e29b-41d4-a716-446655440000'
ExportSchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
fields:
type: array
description: Entity fields that will be exported.
items:
type: string
example: ["title", "description"]
entity_type:
type: string
description: Entity type to be exported
example: "product"
format:
type: string
description: Export file format.
example: "csv"
ExportSchemaCreate:
allOf:
- $ref: '#/components/schemas/ExportSchema'
- type: object
ExportSchemaRead:
allOf:
- $ref: '#/components/schemas/ExportSchema'
- type: object
properties:
company_id:
type: string
format: uuid
description: UUID of the company.
example: "321ea12f-1dde-4ced-bd7e-ef5724d988cc"
file_id:
type: string
format: uuid
description: UUID of the exported file.
nullable: true
example: "567ea12f-1dde-4ced-bd7e-ef5724d988cc"
expires_at:
type: string
description: Until when the file is available for download.
nullable: true
example: "2024-01-01T00:00:00Z"
created_at:
type: string
format: date-time
description: Create timestamp.
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
example: "2024-01-01T00:00:00Z"
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "eac58d35-4a68-4bd5-bc28-172ca2eb326b"
type: object
required:
- entity_type
DocumentTypeEnum:
type: string
description: Document type enumeration.
enum:
- OFFER
- CONFIRMATION
- INVOICE
- SERVICEREPORT
- CANCELLATIONINVOICE
DefaultTextSchema:
type: object
properties:
id:
type: string
format: uuid
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
category:
type: string
description: Category of the default text
example: INTRO_TEXT
enum:
- INTRO_TEXT
- OUTRO_TEXT
- PAYMENT_TERMS
- TAX_INFORMATION
title:
type: string
description: Title of the default text.
minLength: 1
maxLength: 100
content:
type: string
description: Content of the default text.
minLength: 1
maxLength: 5000
vat_category_code:
type: string
nullable: true
description: >
VAT category code. **Required when `category` is `TAX_INFORMATION`**.
example: E
enum:
- Z
- E
- AE
- K
- G
- O
- L
- M
document_types:
type: array
description: |
List of document types for this default text.
If null, it means it is a draft default text not assigned to any document yet.
items:
$ref: '#/components/schemas/DocumentTypeEnum'
nullable: true
default: []
payment_term_days:
type: integer
description: Number of days after invoice date when payment is due
minimum: 0
default: 14
nullable: true
example: 14
required:
- category
- title
- content
DefaultTextSchemaRead:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- $ref: '#/components/schemas/DefaultTextSchema'
- type: object
properties:
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
DefaultTextSchemaCreate:
allOf:
- $ref: '#/components/schemas/DefaultTextSchema'
- type: object
DefaultTextSchemaUpdate:
allOf:
- $ref: '#/components/schemas/DefaultTextSchema'
- type: object
required:
- id
RoleAndPermissionSchema:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
minLength: 1
maxLength: 30
description:
type: string
minLength: 1
maxLength: 500
permissions:
type: array
items:
type: object
properties:
endpoint:
type: string
description: API endpoint for the permission.
methods:
type: array
description: Allowed HTTP methods for the endpoint.
items:
type: string
example:
- endpoint: "/vat_rates"
methods: [ "GET", "POST" ]
- endpoint: "/imports"
methods: [ "GET" ]
required:
- id
- name
- description
- permissions
RoleAndPermissionSchemaRead:
allOf:
- $ref: '#/components/schemas/RoleAndPermissionSchema'
- type: object
FileAttachmentSchema:
type: object
properties:
id:
type: string
format: uuid
company_id:
type: string
format: uuid
entity_type:
type: string
enum:
- TASK
- DOCUMENT
description: The type of an entity, to which a file will be attached.
entity_id:
type: string
format: uuid
description: An id of the entity, to which a file will be attached.
file_entity_id:
type: string
format: uuid
required:
- id
- entity_type
- entity_id
- file_entity_id
FileAttachmentSchemaCreate:
allOf:
- type: object
properties:
entity_type:
type: string
enum:
- TASK
- DOCUMENT
description: The type of an entity, to which a file will be attached.
entity_id:
type: string
format: uuid
file_entity_id:
type: string
format: uuid
description: An id of an entity, to which a file will be attached.
required:
- entity_type
- entity_id
- file_entity_id
FileAttachmentSchemaRead:
allOf:
- $ref: '#/components/schemas/FileAttachmentSchema'
- type: object
properties:
created_by_user:
allOf:
- $ref: '#/components/schemas/UserReferenceSchema'
- type: object
updated_by_user:
allOf:
- $ref: '#/components/schemas/UserReferenceSchema'
- type: object
created_at:
type: string
format: date-time
description: Timestamp of when the file was created.
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
description: Timestamp of when the file was last updated.
example: "2024-01-01T00:00:00Z"
FileAttachmentWithFileSchemaRead:
type: object
allOf:
- $ref: '#/components/schemas/FileAttachmentSchemaRead'
- type: object
properties:
file:
$ref: '#/components/schemas/FileSchemaRead'
DocumentAttachmentSchema:
type: object
properties:
id:
type: string
format: uuid
company_id:
type: string
format: uuid
entity_type:
type: string
enum:
- TASK
description: The type of an entity, to which a document will be attached.
entity_id:
type: string
format: uuid
description: An id of the entity, to which a document will be attached.
document_entity_id:
type: string
format: uuid
document_entity:
$ref: '#/components/schemas/DocumentSchemaRead'
required:
- id
- entity_type
- entity_id
- document_entity_id
DocumentAttachmentSchemaCreate:
allOf:
- type: object
properties:
entity_type:
type: string
enum:
- TASK
description: The type of an entity, to which a document will be attached.
entity_id:
type: string
format: uuid
document_entity_id:
type: string
format: uuid
description: An id of a document entity, which will be attached.
required:
- entity_type
- entity_id
- document_entity_id
DocumentAttachmentSchemaRead:
allOf:
- $ref: '#/components/schemas/DocumentAttachmentSchema'
- type: object
CashbookTypes:
type: string
enum: ["MANUAL", "ONLINE_BANKING"]
CashbookSchema:
type: object
properties:
id:
type: string
format: uuid
description:
type: string
minLength: 3
maxLength: 50
description: "Brief description of the cashbook."
iban:
type: string
nullable: true
description: "IBAN of the bank account, validated if provided."
bic:
type: string
nullable: true
description: "BIC of the bank account, validated if provided."
cashbook_type:
$ref: '#/components/schemas/CashbookTypes'
company_id:
type: string
format: uuid
starting_balance:
type: number
format: decimal
description: "Initial balance set at the time of creation."
opening_balance_date:
type: string
format: date-time
nullable: false
description: "Opening balance date for cashbook"
current_balance:
type: number
format: decimal
description: "Current balance, initialized to `starting_balance` if not provided."
created_by:
type: string
format: uuid
nullable: true
updated_by:
type: string
format: uuid
nullable: true
archived:
type: boolean
description: "Indicates if the cashbook has been archived."
nullable: true
archived_at:
type: string
format: date-time
nullable: true
description: "Timestamp for when the cashbook was archived."
archived_by:
type: string
format: uuid
nullable: true
description: "UUID of the user who archived the cashbook."
created_at:
type: string
format: date-time
description: "Timestamp for cashbook creation."
updated_at:
type: string
format: date-time
description: "Timestamp for the last update."
CashbookSchemaRead:
allOf:
- $ref: '#/components/schemas/CashbookSchema'
CashbookSchemaCreate:
type: object
required:
- description
- cashbook_type
- starting_balance
- opening_balance_date
properties:
description:
type: string
minLength: 3
maxLength: 50
description: "Brief description of the cashbook."
cashbook_type:
$ref: '#/components/schemas/CashbookTypes'
starting_balance:
type: number
format: decimal
description: "Initial balance for the cashbook entry."
opening_balance_date:
type: string
format: date-time
nullable: false
description: "Opening balance date for cashbook"
current_balance:
type: number
format: decimal
nullable: true
description: "Defaults to starting_balance if not provided."
CashbookSchemaUpdate:
type: object
properties:
id:
type: string
description: "ID of the cashbook to be updated."
example: "3fa85f64-5717-4562-b3fc-2c963f66afa6"
description:
type: string
minLength: 3
maxLength: 50
description: "Optional description of the cashbook."
iban:
type: string
description: "IBAN of the bank account, validated if provided."
example: "DE02120300000000202051"
bic:
type: string
description: "BIC of the bank account, validated if provided."
example: "BYLADEM1001"
archived:
type: boolean
description: "Flag to archive or unarchive the cashbook."
example: true
TransactionTypes:
type: string
enum: [ INCOME, EXPENSE ]
TransactionSchema:
type: object
properties:
id:
type: string
format: uuid
cashbook_id:
type: string
format: uuid
description:
type: string
minLength: 3
maxLength: 50
number:
type: string
nullable: true
total_amount:
type: number
format: decimal
transaction_type:
$ref: '#/components/schemas/TransactionTypes'
transaction_date:
type: string
format: date-time
nullable: false
created_by:
type: string
format: uuid
nullable: true
updated_by:
type: string
format: uuid
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
TransactionSchemaCreate:
type: object
required:
- cashbook_id
- description
- total_amount
- transaction_type
- transaction_date
properties:
cashbook_id:
type: string
format: uuid
description: "Identifier of the cashbook the transaction belongs to."
description:
type: string
minLength: 3
maxLength: 50
description: "Brief description of the transaction."
total_amount:
type: number
format: decimal
description: "Total amount including VAT, validated as a currency decimal."
transaction_type:
$ref: '#/components/schemas/TransactionTypes'
transaction_date:
type: string
format: date-time
description: "Date and time when the transaction occurred."
TransactionSchemaRead:
allOf:
- $ref: '#/components/schemas/TransactionSchema'
DocumentItemSchema:
type: object
properties:
id:
type: string
format: UUID
example: eec30cad-ccc2-416e-af6f-06b3d64cb7fb
title:
type: string
description:
type: string
sales_price_net:
type: number
example: 1.50
sales_price_gross:
type: number
quantity:
type: number
example: 1
unit:
type: string
example: "pce"
position:
type: integer
description: "Position of the item in the document"
example: 0
nullable: true
document_id:
type: string
format: UUID
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
task_id:
type: string
format: UUID
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
source_document_item_id:
type: string
format: UUID
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
description: Document item ID from which this item was copied. Used for tracking the immediate source when modifying document items list and managing copied items.
origin_document_item_id:
type: string
format: UUID
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
description: Document item ID from which the copying process originally started. Enables querying all document items sharing the same origin to track the complete chain of changes from the initial source.
sales_price_currency:
type: string
example: "€"
sales_price_vat_rate_id:
type: string
format: UUID
example: dea47f3d-cf18-4c1e-a3ab-3acd018ce4c2
components:
description: List of items that are part of this document item.
type: array
items:
$ref: '#/components/schemas/DocumentItemComponentSchema'
labor_efforts:
type: array
description: List of labor efforts that are part of this document item.
items:
$ref: '#/components/schemas/LaborEffortSchemaRead'
DocumentItemSchemaRead:
allOf:
- $ref: '#/components/schemas/DocumentItemSchema'
- type: object
type: object
properties:
created_at:
type: string
format: date-time
description: Timestamp of when the document item was created.
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
description: Timestamp of when the document item was last updated.
example: "2024-01-01T00:00:00Z"
company_id:
type: string
format: uuid
example: "321ea12f-1dde-4ced-bd7e-ef5724d988cc"
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
DocumentItemSchemaCreate:
type: object
properties:
title:
type: string
description:
type: string
sales_price_net:
type: number
example: 1.50
sales_price_gross:
type: number
quantity:
type: number
example: 1
unit:
type: string
example: "pce"
position:
type: integer
description: "Position of the item in the document"
example: 0
nullable: true
document_id:
type: string
format: UUID
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
task_id:
type: string
format: UUID
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
source_document_item_id:
type: string
format: UUID
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
description: Document item ID from which this item was copied. Used for tracking the immediate source when modifying document items list and managing copied items.
origin_document_item_id:
type: string
format: UUID
example: e34dfb27-fca7-43a6-9e36-188fb0a19d29
description: Document item ID from which the copying process originally started. Enables querying all document items sharing the same origin to track the complete chain of changes from the initial source.
sales_price_currency:
type: string
example: "€"
sales_price_vat_rate_id:
type: string
format: UUID
example: dea47f3d-cf18-4c1e-a3ab-3acd018ce4c2
components:
description: List of items that are part of this document item.
type: array
items:
$ref: '#/components/schemas/DocumentItemComponentSchema'
labor_efforts:
type: array
description: List of labor efforts that are part of this document item.
items:
$ref: '#/components/schemas/LaborEffortSchemaRead'
required:
- title
DocumentItemSchemaUpdate:
type: object
properties:
id:
type: string
format: UUID
example: eec30cad-ccc2-416e-af6f-06b3d64cb7fb
title:
type: string
description:
type: string
sales_price_net:
type: number
example: 1.50
sales_price_gross:
type: number
quantity:
type: number
example: 1
unit:
type: string
example: "pce"
position:
type: integer
description: "Position of the item in the document"
example: 0
nullable: true
sales_price_currency:
type: string
example: "€"
sales_price_vat_rate_id:
type: string
format: UUID
example: dea47f3d-cf18-4c1e-a3ab-3acd018ce4c2
components:
description: List of items that are part of this document item.
type: array
items:
$ref: '#/components/schemas/DocumentItemComponentSchema'
labor_efforts:
type: array
description: List of labor efforts that are part of this document item.
items:
$ref: '#/components/schemas/LaborEffortSchemaRead'
required:
- title
SubscriptionPlanSchema:
type: object
description: Schema for subscription plan data
properties:
id:
type: string
format: uuid
name:
type: string
maxLength: 50
nullable: false
description:
type: string
format: text
nullable: true
amount:
type: number
format: decimal
description: Currency amount for the subscription
nullable: false
minimum_duration:
type: string
maxLength: 10
description: "Duration format (e.g., P1D, P1M, P1Y)"
nullable: false
contract_duration:
type: string
maxLength: 10
description: "Duration format (e.g., P1M, P1Y)"
nullable: true
type:
type: string
enum:
- TRIAL
- BASE
- PACKAGE
- PRO
- MOBILE
- ENTERPRISE
nullable: false
required:
- id
- name
- amount
- minimum_duration
- type
SubscriptionPlanSchemaRead:
description: Schema for reading subscription plan data
allOf:
- $ref: '#/components/schemas/SubscriptionPlanSchema'
- type: object
properties:
parent:
description: Reference to a parent subscription plan
nullable: true
allOf:
- $ref: '#/components/schemas/SubscriptionPlanSchema'
SubscriptionDiscountValidateSchema:
type: object
properties:
name:
type: string
description: The name/code of the discount to validate
example: "SUMMER2025"
required:
- name
SubscriptionDiscountSchema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
name:
type: string
description: The name/code of the discount
example: "SUMMER2025"
amount:
type: number
format: decimal
is_recurring:
type: boolean
description: Defines if the discount is one time or recurring one.
type:
type: string
enum: [PERCENTAGE, FIXED]
example: "FIXED"
required:
- id
- name
- amount
- is_recurring
- type
SubscriptionDiscountSchemaRead:
allOf:
- $ref: '#/components/schemas/SubscriptionDiscountSchema'
- type: object
CompanySubscriptionPlanSchemaRead:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
type: object
properties:
duration:
type: string
description: Duration of the subscription plan (e.g., P1D, P1M, P1Y)
nullable: true
state:
type: string
enum: [ACTIVE, EXPIRED, CANCELLED, DUNNING]
description: Current state of the subscription plan
start_date:
type: string
format: date-time
description: Start date of the subscription plan
end_date:
type: string
format: date-time
description: End date of the subscription plan
company_id:
type: string
format: uuid
description: ID of the company this subscription plan belongs to
active_seats:
$ref: '#/components/schemas/activeSeatsSchema'
subscription_plan:
$ref: '#/components/schemas/SubscriptionPlanSchemaRead'
required:
- id
- state
- start_date
- end_date
- company_id
- subscription_plan_id
activeSeatsSchema:
description: Number of Desktop and Mobile 'seats' for Company Subscription
nullable: true
type: object
properties:
desktop:
type: integer
description: Number of active Desktop users
example: 10
mobile:
type: integer
description: Number of active Mobile users
example: 5
CompanySubscriptionPlanUpgradeUserSchema:
type: object
properties:
user_id:
type: string
format: uuid
description: ID of the user to upgrade
subscription_plan_id:
type: string
format: uuid
description: ID of the subscription plan for this user
required:
- user_id
- subscription_plan_id
CompanySubscriptionPlanUpgradeSchema:
type: object
properties:
company_id:
type: string
format: uuid
description: ID of the company to upgrade
packages:
type: array
description: List of package subscription plan IDs
items:
type: string
format: uuid
default: []
subscription_plan_id:
type: string
format: uuid
description: ID of the main subscription plan to upgrade to
discount_id:
type: string
format: uuid
description: Optional ID of a discount to apply
nullable: true
users:
type: array
description: List of user upgrades
items:
$ref: '#/components/schemas/CompanySubscriptionPlanUpgradeUserSchema'
total_price:
type: number
format: decimal
description: Total price for the upgrade
required:
- company_id
- subscription_plan_id
- users
- total_price
SmtpEncryptionTypes:
type: string
enum: [ "ssl", "tls", "none" ]
CompanySmtpConfigSchema:
type: object
properties:
id:
type: string
format: uuid
company_id:
type: string
format: uuid
smtp_host:
type: string
minLength: 1
maxLength: 255
description: "SMTP server hostname."
smtp_port:
type: integer
format: int32
description: "SMTP server port."
smtp_username:
type: string
minLength: 1
maxLength: 255
description: "SMTP server username."
smtp_encryption:
$ref: '#/components/schemas/SmtpEncryptionTypes'
CompanySmtpConfigSchemaRead:
allOf:
- $ref: '#/components/schemas/CompanySmtpConfigSchema'
CompanySmtpConfigSchemaCreate:
type: object
required:
- smtp_host
- smtp_port
- smtp_username
- smtp_password
properties:
smtp_host:
type: string
minLength: 1
maxLength: 255
description: "SMTP server hostname."
smtp_port:
type: integer
format: int32
description: "SMTP server port."
smtp_username:
type: string
minLength: 1
maxLength: 255
description: "SMTP server username."
smtp_password:
type: string
minLength: 1
maxLength: 512
description: "SMTP server password."
smtp_encryption:
$ref: '#/components/schemas/SmtpEncryptionTypes'
CompanySmtpConfigSchemaUpdate:
type: object
properties:
smtp_host:
type: string
minLength: 1
maxLength: 255
description: "SMTP server hostname."
smtp_port:
type: integer
format: int32
description: "SMTP server port."
smtp_username:
type: string
minLength: 1
maxLength: 255
description: "SMTP server username."
smtp_password:
type: string
minLength: 1
maxLength: 512
description: "SMTP server password."
smtp_encryption:
$ref: '#/components/schemas/SmtpEncryptionTypes'
WorkingDays:
type: string
enum:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
- SATURDAY
- SUNDAY
description: Days of the week for working days
TypeOfVacationRule:
type: string
enum:
- FULL_TIME
- PART_TIME_FIXED_NUMBER_DAYS_PER_WEEK
- PART_TIME_EVENLY_DISTRIBUTED_HOURS
- PART_TIME_VARYING_WORK_DAYS
description: Type of vacation rule for work time contracts
TargetWorkingDaysSchema:
type: object
properties:
day:
$ref: '#/components/schemas/WorkingDays'
hours:
type: number
format: decimal
description: Number of hours to work on this day
required:
- day
- hours
WorkTimeContractSchemaCreate:
type: object
properties:
user_id:
type: string
format: uuid
description: ID of the user this contract belongs to
target_working_days:
type: array
description: List of target working days and hours
items:
$ref: '#/components/schemas/TargetWorkingDaysSchema'
work_time_contract_start:
type: string
format: date-time
description: Start date and time of the work time contract
work_time_contract_end:
type: string
format: date-time
description: End date and time of the work time contract
nullable: true
weekly_hours:
type: number
format: decimal
description: Total weekly hours for this contract
nullable: true
required:
- user_id
- target_working_days
- work_time_contract_start
WorkTimeContractSchemaRead:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
properties:
company_id:
type: string
format: uuid
description: ID of the company this contract belongs to
user_id:
type: string
format: uuid
description: ID of the user this contract belongs to
target_working_days:
type: array
description: List of target working days and hours
items:
$ref: '#/components/schemas/TargetWorkingDaysSchema'
work_time_contract_start:
type: string
format: date-time
description: Start date and time of the work time contract
work_time_contract_end:
type: string
format: date-time
description: End date and time of the work time contract
nullable: true
weekly_hours:
type: number
format: decimal
description: Total weekly hours for this contract
nullable: true
created_at:
type: string
format: date-time
description: Timestamp of when the contract was created.
example: "2024-01-01T00:00:00Z"
updated_at:
type: string
format: date-time
description: Timestamp of when the contract was last updated.
required:
- id
- company_id
- user_id
- target_working_days
- work_time_contract_start
- created_at
- updated_at
WorkTimeContractSchemaUpdate:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- type: object
properties:
user_id:
type: string
format: uuid
description: ID of the user this contract belongs to
target_working_days:
type: array
description: List of target working days and hours
items:
$ref: '#/components/schemas/TargetWorkingDaysSchema'
work_time_contract_start:
type: string
format: date-time
description: Start date and time of the work time contract
work_time_contract_end:
type: string
format: date-time
description: End date and time of the work time contract
nullable: true
weekly_hours:
type: number
format: decimal
description: Total weekly hours for this contract
nullable: true
required:
- id
responses:
Companies:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/CompanySchemaRead'
CompanyUsers:
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CompanyUserSchemaRead'
OrderProcesses:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/OrderProcessSchemaRead'
Documents:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentSchemaRead'
Templates:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateSchemaRead'
Items:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ItemSchemaRead'
DocumentItems:
description: Successful operation
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/DocumentItemSchemaRead'
Contacts:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ContactSchemaRead'
Users:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/UserSchemaRead'
UserInvites:
description: Successful operation
content:
application/json:
schema:
$ref: "#/components/schemas/UserInviteSchemaRead"
Permission:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/PermissionSchemaRead'
Imports:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ImportSchemaRead'
VatRates:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/VatRateSchemaRead'
Tasks:
description: Successful operation
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/TaskSchemaRead'
TaskWithRelationships:
description: Successful operation
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ResourceIdentifierSchema'
- $ref: '#/components/schemas/TaskSchema'
type: object
properties:
document_attachments:
type: array
items:
$ref: '#/components/schemas/DocumentAttachmentSchemaRead'
file_attachments:
type: array
items:
$ref: '#/components/schemas/FileAttachmentWithFileSchemaRead'
kanban_card_position_index:
type: number
nullable: true
example: 1.5
description: kanban position index of the task for sorting task status wise
task_users:
type: array
items:
$ref: '#/components/schemas/TaskUserSchemaRead'
document_items:
type: array
items:
$ref: '#/components/schemas/DocumentItemSchemaRead'
created_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
updated_by:
type: string
format: uuid
nullable: true
example: "12345678-1234-5678-1234-567812345678"
TaskUsers:
description: Successful operation
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/TaskUserSchemaRead'
TimeEntries:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/TimeEntrySchemaRead'
Files:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/FileSchemaRead'
ImagePresignUrl:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ImagePresignUrlSchema'
Notes:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/NoteSchemaRead'
ConsecutiveNumberings:
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ConsecutiveNumberingSchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
History:
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/HistorySchemaRead'
headers:
X-WCS-PAGE:
$ref: '#/components/headers/X-WCS-PAGE-HEADER'
X-WCS-PAGE_SIZE:
$ref: '#/components/headers/X-WCS-PAGE_SIZE-HEADER'
X-WCS-TOTAL_PAGE_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_PAGE_COUNT-HEADER'
X-WCS-TOTAL_RESULT_COUNT:
$ref: '#/components/headers/X-WCS-TOTAL_RESULT_COUNT-HEADER'
DefaultTexts:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DefaultTextSchemaRead'
FileAttachments:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/FileAttachmentSchemaRead'
DocumentAttachments:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentAttachmentSchemaRead'
DeleteNoContent:
description: Successful deleted
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponseSchema'
AcceptedRetryResponse:
description: Retry after duration
content:
application/json:
schema:
$ref: '#/components/schemas/AcceptedRetryResponseSchema'
MissingOrInvalid:
description: Missing or invalid payload
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseSchema'
DisabledUser:
description: User is disabled
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseSchema'
NotFound:
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseSchema'
Forbidden:
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseSchema'
ValidationFailed:
description: Validation exception
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationErrorResponseSchema'
ServerError:
description: Server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponseSchema'
FilesPresignedUrl:
description: Presigned URL for file upload
content:
application/json:
schema:
type: object
properties:
id:
type: string
presignedURL:
type: object
properties:
url:
type: string
fields:
type: object
properties:
Content-Type:
type: string
example: "image/jpeg"
Cache-Control:
type: string
example: "max-age=3600"
Content-Disposition:
type: string
example: "attachment; filename=\"original.jpg\""
x-amz-meta-company_id:
type: string
example: "c9e18632-3b86-45d7-9e0e-d784b37ec66d"
x-amz-meta-entity_type:
type: string
example: "image"
x-amz-meta-workflow:
type: string
example: "imageProcessing"
x-amz-meta-file_id:
type: string
example: "42000e43-8267-430b-842a-dda6253052a5"
x-amz-meta-file_type:
type: string
example: "csv"
x-amz-meta-resource_path:
type: string
example: "item or logo, ..."
key:
type: string
example: "temp/42000e43-8267-430b-842a-dda6253052a5.csv"
x-amz-algorithm:
type: string
example: "AWS4-HMAC-SHA256"
x-amz-credential:
type: string
example: "test_aws_credential"
x-amz-date:
type: string
example: "20240507T105303Z"
x-amz-security-token:
type: string
example: "security_token"
x-amz-signature:
type: string
example: signature
x-amz-meta-created_by:
type: string
example: "42000e43-8267-430b-842a-dda6253052a5"
policy:
type: string
example: policy
EInvoice:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/EInvoiceSchemaRead'
DocumentPDF:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentPDFSchemaRead'
XMLValidation:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/GenericResponseSchema'
RoleAndPermissions:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/RoleAndPermissionSchemaRead'
CompanySmtpConfig:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/CompanySmtpConfigSchemaRead'
Vacations:
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/VacationSchemaRead'
parameters:
ID-IN-PATH:
name: id
in: path
description: ID of the entity
required: true
schema:
type: string
format: uuid
FILTERS-PAGINATION:
name: filters
in: query
description: Filter values
required: false
schema:
type: string
PAGE_SIZE-PAGINATION:
name: page_size
in: query
description: Max. number of items to be returned per page. Max page size is 50.
required: false
schema:
type: integer
minimum: 1
maximum: 50
default: 50
PAGE-PAGINATION:
name: page
in: query
description: Current page. Starting page index is 0.
required: false
schema:
type: integer
minimum: 0
default: 0
ORDER-DIRECTION:
name: order-direction
in: query
description: order direction value
example: "asc or desc"
required: false
schema:
type: string
SEARCH:
name: search
in: query
description: Search string, min. 3 characters
required: false
schema:
type: string
X-WCS-COMPANY_ID-HEADER:
in: header
name: X-WCS-COMPANY_ID
schema:
type: string
format: uuid
description: Company ID
required: true
headers:
X-WCS-PAGE-HEADER:
schema:
type: integer
description: Current page. Starting page index is 0.
X-WCS-PAGE_SIZE-HEADER:
schema:
type: integer
description: Requested page size. Max page size is 200.
X-WCS-TOTAL_PAGE_COUNT-HEADER:
schema:
type: integer
description: Total number of pages.
X-WCS-TOTAL_RESULT_COUNT-HEADER:
schema:
type: integer
description: Total number of results.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment