openapi: 3.0.1
info:
  title: Management API v2 (Current)
  description: >-
    ✅ CURRENT VERSION - This is the improved and redesigned API version with
    enhanced features, better performance, and comprehensive validation. This is
    the recommended version for all new integrations and provides the best
    developer experience with detailed error handling and validation.
  version: '2.0'
paths:
  /api/v2/Public/Organization:
    post:
      tags:
        - 1.Organization
      summary: >-
        Creates a new organization object in the Organization tree under the
        given ownerOrganization.
      description: "Creates a new organization entry in the system hierarchy. The organization will be placed under the specified owner Organization and can contain other organizational units and companies.\r\n\r\n🔒 **Permissions:** ManageCompany permission on the Organization identified via ownerOrganizationId in the request body.\r\n\r\n🔴 **Required Fields:**\r\n- `parentEntityId`: ID of the parent Organization (minimum value: 2)\r\n\r\n- `name`: Organization name (2-1000 characters)\r\n\r\n🔵 **Optional Fields:**\r\n- `address`: Street address (max 1000 characters)\r\n\r\n- `city`: City name (max 1000 characters)\r\n\r\n- `zip`: Postal code (max 50 characters)\r\n\r\n- `countryCode`: ISO-2 country code (exactly 2 characters, e.g., \"DE\", \"AT\", \"FR\")\r\n\r\n- `invoiceEmailAddress`: Email for invoice notifications (valid email format, max 100 characters)\r\n\r\n- `userComment`: Custom description (max 2000 characters)\r\n\r\n- `state`: Organization state - \"Productive\" (default) or \"Test\"\r\n\r\n📝 **Important Notes:**\r\n- Valid states: \"Productive\", \"Test\" \r\n- Organization will be created with \"Productive\" state by default\r\n- If created under a Test organization, it will automatically be set to \"Test\" state\r\n- State changes from \"Productive\" to \"Test\" are irreversible\r\n- Address fields are primarily used for billing and invoicing purposes\r\n- The organization will be assigned a unique ID and creation timestamp"
      requestBody:
        description: >-
          The request body containing all properties required for organization
          creation. Must include ownerOrganizationId, name, and optional address
          information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePublicOrganizationRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/CreatePublicOrganizationRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreatePublicOrganizationRequest'
      responses:
        '200':
          description: >-
            Organization created successfully. Returns the complete organization
            data including assigned ID and timestamps.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicOrganizationResult'
        '400':
          description: >-
            Invalid input data, validation failed, or required fields are
            missing. Check the validation errors in the response.
        '403':
          description: >-
            Insufficient permissions to create organization under the specified
            OwnerOrganization.
        '404':
          description: >-
            OwnerOrganization not found or not accessible with current
            permissions.
  /api/v2/Public/Organization/{organizationId}:
    put:
      tags:
        - 1.Organization
      summary: Updates an existing organization with the provided data.
      description: "Updates the existing organization properties. This is a full update operation - all properties should be included in the request as missing properties may cause validation errors or unexpected behavior.\r\n\r\n🔒 **Permissions:** ManageCompany on the organization to update.\r\n\r\n🔴 **Required Fields:**\r\n\r\n- `name`: Organization name (2-1000 characters)\r\n\r\n🔵 **Optional Fields:**\r\n- `address`: Street address (max 1000 characters)\r\n\r\n- `city`: City name (max 1000 characters)\r\n\r\n- `zip`: Postal code (max 50 characters)\r\n\r\n- `countryCode`: ISO-2 country code (exactly 2 characters, e.g., \"DE\", \"AT\", \"FR\")\r\n\r\n- `invoiceEmailAddress`: Email for invoice notifications (valid email format, max 100 characters)\r\n\r\n- `userComment`: Custom description (max 2000 characters)\r\n\r\n- `state`: Organization state - \"Productive\", \"Test\", or \"Deactivated\" \r\n\r\n📝 **Important Notes:**\r\n- All properties should be included in the request as missing properties may cause validation errors\r\n- Address fields are primarily used for billing and invoicing purposes\r\n- Some properties may be restricted based on the organization's current state\r\n- State changes from \"Productive\" to \"Test\" are irreversible and cannot be undone\r\n- State changes from \"Test\" to \"Productive\" are not allowed\r\n- The organization's change timestamp will be updated automatically"
      parameters:
        - name: organizationId
          in: path
          description: >-
            The unique identifier of the organization to update (minimum value:
            2).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      requestBody:
        description: >-
          The request body containing all properties to update. All properties
          will be updated, so include all current values.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePublicOrganizationRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/UpdatePublicOrganizationRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UpdatePublicOrganizationRequest'
      responses:
        '200':
          description: >-
            Organization updated successfully. Returns the complete updated
            organization data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicOrganizationResult'
        '400':
          description: >-
            Invalid input data, validation failed, or organization ID is
            invalid.
        '403':
          description: Insufficient permissions to update the specified organization.
        '404':
          description: Organization not found or not accessible with current permissions.
    get:
      tags:
        - 1.Organization
      summary: Gets the organization by the specified ID.
      description: "Retrieves a single organization by its unique identifier. \r\n🔒 **Permissions:** ReadCompany permission on the organization identified via the given ID.\r\n\r\n📝 **Important Notes:**\r\n- If the organization is not found, a 404 error will be returned\r\n- The response includes the organization's current state and all associated metadata"
      parameters:
        - name: organizationId
          in: path
          description: >-
            The unique identifier of the organization to retrieve (minimum
            value: 2).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: >-
            Organization retrieved successfully. Returns complete organization
            data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicOrganizationResult'
        '400':
          description: Invalid organization ID format or request is malformed.
        '403':
          description: Insufficient permissions to access the specified organization.
        '404':
          description: Organization not found or not accessible with current permissions.
  /api/v2/Public/Organization/Search:
    put:
      tags:
        - 1.Organization
      summary: >-
        Searches for organizations based on given parameters in the request
        body.
      description: "Performs a filtered search across organizations based on the provided search criteria. Multiple search parameters can be combined to narrow down results. Supports pagination, sorting, and various filtering options.\r\n            \r\n🔒 **Permissions:** ReadCompany permission is required for each organization to appear in the search results.\r\n\r\n📝 **Search Parameters:**\r\n\r\n- `parentEntityId`: Filter by parent Organization (optional, minimum value: 2)\r\n\r\n- `createdAfter`: Filter by creation date (optional, ISO-8601 format)\r\n            \r\n- `hasUserComment`: Filter by presence of user comments (optional, boolean)\r\n            \r\n- `hasDeactivateAfterTimestamp`: Filter by deactivation date presence (optional, boolean)\r\n            \r\n- `searchText`: Text search across name, comment, and other fields (optional, max 1000 characters)\r\n            \r\n- `state`: Filter by organization state - \"Productive\", \"Test\", or \"Deactivated\" (optional)\r\n            \r\n- `orderByField`: Sort field name (optional, default: \"name\")\r\n            \r\n- `orderDescending`: Sort direction (optional, default: false for ascending)\r\n            \r\n- `offset`: Number of items to skip for pagination (optional, minimum: 0)\r\n            \r\n- `limit`: Number of items to return (optional, range: 0-250, default: 100)\r\n\r\n📝 **Important Notes:**\r\n- Maximum 250 results per request, default limit is 100 if not specified\r\n- If parentEntityId is provided, only direct children of that Organization are returned\r\n- State filtering supports: \"Productive\", \"Test\", \"Deactivated\"\r\n- Search is case-insensitive for text fields\r\n- Results include pagination metadata (total count, offset, limit)\r\n- Empty search criteria will return all accessible organizations (up to limit)"
      requestBody:
        description: >-
          The search request object containing filter criteria, pagination
          settings, and sorting options for querying organizations.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchPublicOrganizationsRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/SearchPublicOrganizationsRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/SearchPublicOrganizationsRequest'
      responses:
        '200':
          description: >-
            Search completed successfully. Returns matching organizations with
            pagination information.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/PublicOrganizationSearchPublicCompanyObjectsResult
        '400':
          description: Invalid search parameters, request format, or validation failed.
        '403':
          description: >-
            Invalid access grant or insufficient permissions to search
            organizations.
  /api/v2/Public/Company:
    post:
      tags:
        - 2.Company
      summary: Creates a new company within the organizational hierarchy.
      description: "Creates a new company entry in the system hierarchy. The company will be placed under the specified organization and can contain locations, registers, and other business entities.\r\n\r\n🔒 **Permissions:** ManageCompany permission on the organization identified via parentEntityId in the request body.\r\n\r\n🔴 **Required Fields:**\r\n- `parentEntityId`: ID of the parent organization (minimum value: 2)\r\n\r\n- `name`: Company name (2-1000 characters)\r\n\r\n- `taxId`: EU tax ID/ECI (4-40 characters, e.g., \"DE999999999\")\r\n\r\n- `address`: Street address (max 1000 characters) \r\n\r\n- `city`: City name (max 1000 characters)\r\n\r\n- `zip`: Postal code (max 50 characters) \r\n\r\n- `countryCode`: ISO-2 country code (exactly 2 characters, e.g., \"DE\", \"AT\", \"FR\") \r\n\r\n🔵 **Optional Fields:**\r\n- `invoiceEmailAddress`: Email for invoice notifications (valid email format, max 100 characters)\r\n\r\n- `userComment`: Custom description (max 2000 characters)\r\n\r\n- `state`: Company state - \"Productive\" (default) or \"Test\"\r\n\r\n- `ignoreTaxId`: If set to true, the validation of the TaxId will be skipped. The TaxId will still be saved.\r\n            \r\n- `countryProperties`: Additional country-specific company data (e.g. `DE_WIdNr` for the German Wirtschafts-Identifikationsnummer). See \"PublicCompanyCountryProperties\" for available fields.\r\n            \r\n📝 **Important Notes:**\r\n- Valid states: \"Productive\", \"Test\"\r\n- Company will be created with \"Productive\" state by default\r\n- If created under a Test organization, it will automatically be set to \"Test\" state\r\n- State changes from \"Productive\" to \"Test\" are irreversible\r\n- Address fields are primarily used for billing and invoicing purposes\r\n- The company will be assigned a unique ID and creation timestamp\r\n- the field DE_WIdNr in the countryProperties is mandatory for DE companies as of 01.01.2027 until then it is optional"
      requestBody:
        description: >-
          The request body containing all properties required for company
          creation. Must include parentEntityId, name, taxId, and optional
          address information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePublicCompanyRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/CreatePublicCompanyRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreatePublicCompanyRequest'
      responses:
        '200':
          description: >-
            Company created successfully. Returns the complete company data
            including assigned ID and timestamps.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicCompanyResult'
        '400':
          description: >-
            Invalid input data, validation failed, or required fields are
            missing. Check the validation errors in the response.
        '403':
          description: >-
            Insufficient permissions to create company under the specified owner
            organization.
        '404':
          description: >-
            Owner organization not found or not accessible with current
            permissions.
  /api/v2/Public/Company/{companyId}:
    put:
      tags:
        - 2.Company
      summary: Updates existing company information and settings.
      description: " Updates the existing company properties. This is a full update operation - all properties should be included in the request as missing properties may cause validation errors or unexpected behavior.\r\n\r\n 🔒 **Permissions:** ManageCompany permission on the company to update.\r\n\r\n 🔴 **Required Fields:**\r\n\r\n-  `name`: Company name (2-1000 characters)\r\n\r\n - `address`: Street address (max 1000 characters)\r\n\r\n - `city`: City name (max 1000 characters)\r\n\r\n - `zip`: Postal code (max 50 characters)\r\n\r\n - `countryCode`: ISO-2 country code (exactly 2 characters)\r\n\r\n 🔵 **Optional Fields:**\r\n\r\n - `invoiceEmailAddress`: Email for invoice notifications (valid email format, max 100 characters)\r\n\r\n - `userComment`: Custom description (max 2000 characters)\r\n\r\n - `state`: Company state - \"Productive\", \"Test\", or \"Deactivated\"\r\n\r\n - `taxId`: EU tax ID/ECI (4-40 characters, e.g., \"DE999999999\") - Can only be changed if the company's IgnoreEci flag is set to true in the database\r\n\r\n - `countryProperties`: Additional country-specific company data (e.g. `DE_WIdNr` for the German Wirtschafts-Identifikationsnummer). See \"PublicCompanyCountryProperties\" for available fields.\r\n\r\n 📝 **Important Notes:**\r\n - All company fields should be provided as the update replaces the entire entity\r\n - Changes are automatically synchronized to all locations and registers\r\n - State changes from \"Productive\" to \"Test\" are irreversible and cannot be undone\r\n - State changes from \"Test\" to \"Productive\" are not allowed\r\n - The company's change timestamp will be updated automatically\r\n - the field DE_WIdNr in the countryProperties is mandatory for DE companies as of 01.01.2027 until then it is optional \r\n - The Tax ID can only be changed if the company's IgnoreEci flag is set to true. In normal cases of company renaming (rebranding), a new company must be created. See FAQs."
      parameters:
        - name: companyId
          in: path
          description: 'The unique identifier of the company to update (minimum value: 2).'
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      requestBody:
        description: >-
          The request body containing all properties to update. All properties
          will be updated, so include all current values.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePublicCompanyRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/UpdatePublicCompanyRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UpdatePublicCompanyRequest'
      responses:
        '200':
          description: >-
            Company updated successfully. Returns the complete updated company
            data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicCompanyResult'
        '400':
          description: Invalid input data, validation failed, or company ID is invalid.
        '403':
          description: Insufficient permissions to update the specified company.
        '404':
          description: Company not found or not accessible with current permissions.
    get:
      tags:
        - 2.Company
      summary: Gets the company by the specified ID.
      description: "Retrieves a single company by its unique identifier. Returns complete company information\r\n\r\n🔒 **Permissions:** ReadCompany permission on the company identified via the given ID.\r\n\r\n📝 **Important Notes:**\r\n- If the company is not found, a 404 error will be returned\r\n- The response includes the company's current state and all associated metadata"
      parameters:
        - name: companyId
          in: path
          description: 'The unique identifier of the company to retrieve (minimum value: 2).'
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Company retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicCompanyResult'
        '400':
          description: Invalid company ID format or request is malformed.
        '403':
          description: Insufficient permissions to access the specified company.
        '404':
          description: Company not found or not accessible with current permissions.
  /api/v2/Public/Company/{companyId}/Deactivate:
    put:
      tags:
        - 2.Company
      summary: Deactivates a company and all its subordinate entities.
      description: "Deactivates a company and all its subordinate entities including registers, locations, and fiscal units. \r\nThe process executes in a specific order to ensure proper shutdown of all connected systems.\r\n\r\n🔒 **Permissions:** ManageCompany permission required for the specified company.\r\n\r\n📝 **Deactivation Process:**\r\n- Immediate deactivation: If no year specified, company is deactivated immediately\r\n\r\n- Scheduled deactivation: If year specified, deactivation occurs on December 31st at 23:59:59\r\n\r\n- Subordinate entities: All locations, registers, and fiscal units are deactivated\r\n\r\n- Fiscal units: Terminated after notice period (unless forceSubDeactivation is true)\r\n\r\n📝 **Important Notes:**\r\n- Process is irreversible once completed\r\n- All subordinate entities will be deactivated\r\n- Scheduled deactivation year must be current year or later\r\n- Fiscal Units will be terminated after notice period (unless forced)\r\n- Force sub-deactivation bypasses normal notice periods"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the company to deactivate (minimum value:
            2).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
        - name: deactivateAfterYear
          in: query
          description: >-
            Optional year for scheduled deactivation (executed on December 31st
            at 23:59:59). Must be current year or later.
          style: form
          schema:
            type: integer
            format: int32
        - name: forceSubDeactivation
          in: query
          description: >-
            Optional flag to force immediate deactivation of all subordinate
            entities without waiting for notice periods.
          style: form
          schema:
            type: boolean
      responses:
        '200':
          description: >-
            Company successfully deactivated or scheduled for deactivation.
            Returns operation status and details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultBase'
        '400':
          description: >-
            Invalid input data, validation failed, or company cannot be
            deactivated (e.g., invalid year).
        '403':
          description: Insufficient permissions to deactivate the specified company.
        '404':
          description: Company not found or not accessible with current permissions.
  /api/v2/Public/Company/Search:
    put:
      tags:
        - 2.Company
      summary: Searches for companies using flexible criteria and filters.
      description: "Performs a filtered search across companies based on the provided search criteria. Multiple search parameters can be combined to narrow down results. Supports pagination, sorting, and various filtering options.\r\n            \r\n🔒 **Permissions:** ReadCompany permission is required for each company to appear in the search results.\r\n\r\n📝 **Search Parameters:**\r\n- `ParentEntityId`: Filter by parent organization (optional, minimum value: 2)\r\n\r\n- `createdAfter`: Filter by creation date (optional, ISO-8601 format)\r\n\r\n- `hasUserComment`: Filter by presence of user comments (optional, boolean)\r\n\r\n- `hasDeactivateAfterTimestamp`: Filter by deactivation date presence (optional, boolean)\r\n\r\n- `searchText`: Text search across name, comment, and other fields (optional, max 1000 characters)\r\n\r\n- `state`: Filter by company state - \"Productive\", \"Test\", or \"Deactivated\" (optional)\r\n\r\n- `countryCode`: Filter by ISO-2 country code (optional, exactly 2 characters, e.g., \"DE\", \"AT\", \"FR\")\r\n\r\n- `orderByField`: Sort field name (optional, default: \"name\")\r\n\r\n- `orderDescending`: Sort direction (optional, default: false for ascending)\r\n\r\n- `offset`: Number of items to skip for pagination (optional, minimum: 0)\r\n\r\n- `limit`: Number of items to return (optional, range: 0-250, default: 100)\r\n\r\n📝 **Important Notes:**\r\n- Maximum 250 results per request, default limit is 100 if not specified\r\n- If ParentEntityId is provided, only direct children of that organization are returned\r\n- State filtering supports: \"Productive\" (10), \"Test\" (9), \"Deactivated\" (8)\r\n- Search is case-insensitive for text fields\r\n- Results include pagination metadata (total count, offset, limit)\r\n- Empty search criteria will return all accessible companies (up to limit)"
      requestBody:
        description: >-
          The search request object containing filter criteria, pagination
          settings, and sorting options for querying companies.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchPublicCompaniesRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/SearchPublicCompaniesRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/SearchPublicCompaniesRequest'
      responses:
        '200':
          description: >-
            Search completed successfully. Returns matching companies with
            pagination information.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/PublicCompanySearchPublicCompanyObjectsResult
        '400':
          description: Invalid search parameters, request format, or validation failed.
        '403':
          description: >-
            Invalid access grant or insufficient permissions to search
            companies.
  /api/v2/Public/Company/{companyId}/Notifications:
    get:
      tags:
        - 2.Company
      summary: Retrieves system notifications relevant to a company.
      description: "Loads all available notifications for registers of a company and all related locations. These notifications contain warnings from the efsta Portal escalation\r\nsystem and describe issues and potential problems with registers.\r\n\r\n🔒 **Permissions:** ReadCompany permission required for the specified company.\r\n            \r\n📝 **Returned Data:**\r\n- Register information: RegisterNumber, EventCode, DescriptionShort\r\n\r\n- Event details: DescriptionLong, CurrentLevel, InitialTimestamp\r\n\r\n- Company context: parentEntityId, CompanyName, CompanyType\r\n\r\n📝 **Important Notes:**\r\n- Language code defaults to \"en-US\" if not provided\r\n- Only Works on Productive Companies\r\n- Only active notifications are returned\r\n- Notifications are localized based on the provided language code"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the company to retrieve notifications for
            (minimum value: 2).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
        - name: languageCode
          in: query
          description: >-
            ISO 639-1 language code for localized notifications (e.g., "de",
            "en"). Defaults to "en-US" if not provided.
          style: form
          schema:
            type: string
      responses:
        '200':
          description: >-
            Notifications retrieved successfully. Returns all relevant
            notifications for the company's registers and locations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPublicCompanyNotificationsResult'
        '400':
          description: Invalid company ID format, language code, or request is malformed.
        '403':
          description: Insufficient permissions to access the specified company.
        '404':
          description: Company not found or not accessible with current permissions.
  /api/v2/Public/Company/Contact:
    post:
      tags:
        - 2.Company
      summary: Creates a new contact person for a company.
      description: "Creates a new contact person for a company. Contact persons are used for automated notifications and communication purposes.\r\n            \r\n🔒 **Permissions:** ManageCompany permission required for the company specified in the request.\r\n\r\n🔴 **Required Fields:**\r\n- `companyId`: ID of the company to add the contact to (minimum value: 2)\r\n\r\n- `contactName`: Contact person's full name (2-500 characters)\r\n\r\n- `emailAddress`: Contact person's email address (valid email format, max 500 characters)\r\n\r\n- `contactType`: Type of contact role (see Contact Types below)\r\n\r\n👤 **Contact Types:**\r\n- `InvoiceContact`: Responsible for invoice-related communications\r\n\r\n- `TechnicalContact`: Responsible for technical support and system issues\r\n\r\n- `CommercialContact`: Responsible for commercial and business matters\r\n\r\n- `ElsterContact`: Responsible for fiscal authority communications (Germany)\r\n\r\n📝 **Important Notes:**\r\n- Email addresses must be unique within the company\r\n- Contact information is used for automated notifications\r\n- Multiple contacts of the same type are allowed\r\n- The contact will be assigned a unique ID upon creation"
      requestBody:
        description: >-
          The request body containing complete contact person information
          including name, email, and role assignment.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePublicCompanyContactRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/CreatePublicCompanyContactRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreatePublicCompanyContactRequest'
      responses:
        '200':
          description: >-
            Contact created successfully. Returns the complete contact data
            including assigned ID.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatePublicCompanyContactResult'
        '400':
          description: >-
            Invalid input data, validation failed, or duplicate email address
            within the company.
        '403':
          description: >-
            Insufficient permissions to create contact for the specified
            company.
        '404':
          description: Company not found or not accessible with current permissions.
  /api/v2/Public/Company/{companyId}/Contacts:
    get:
      tags:
        - 2.Company
      summary: Retrieves all contact persons associated with a company.
      description: "Gets a list of all the different contacts added to the Company. Returns complete contact information including roles, verification status, and communication preferences.\r\n            \r\n🔒 **Permissions:** ReadCompany permission required for the specified company.\r\n\r\n📝 **Returned Information:**\r\n- Contact person details: Name, Email,\r\n\r\n- Role and responsibility assignments: ContactType   \r\n\r\n- Company context: CompanyId\r\n            \r\n👤 **Contact Types:**\r\n- `InvoiceContact`: Responsible for invoice-related communications\r\n\r\n- `TechnicalContact`: Responsible for technical support and system issues\r\n\r\n- `CommercialContact`: Responsible for commercial and business matters\r\n\r\n- `ElsterContact`: Responsible for fiscal authority communications (Germany)\r\n\r\n📝 **Important Notes:**\r\n- Only contacts for the specified company are returned\r\n- If the company is not found, a 404 error will be returned\r\n- Contact information includes all available metadata\r\n- Verification status is particularly relevant for German fiscal contacts"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the company to retrieve contacts for
            (minimum value: 2).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: >-
            Contacts retrieved successfully. Returns all contact persons
            associated with the company.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPublicCompanyContactsResult'
        '400':
          description: Invalid company ID format or request is malformed.
        '403':
          description: Insufficient permissions to access the specified company.
        '404':
          description: Company not found or not accessible with current permissions.
  /api/v2/Public/Location:
    post:
      tags:
        - 3.Location
      summary: >-
        Creates a new location object in the company tree under the specified
        owner company.
      description: "Creates a new location entry in the system hierarchy. The location will be placed under the specified company and can contain registers and process transactions.\r\n\r\n🔒 **Permissions:** ManageCompany permission on the company identified via parentEntityId in the request body.\r\n\r\n🔴 **Required Fields:**\r\n- `parentEntityId`: ID of the parent company (minimum value: 2)\r\n\r\n- `name`: Location name (2-1000 characters)\r\n            \r\n- `address`: Street address (max 1000 characters)\r\n\r\n- `city`: City name (max 1000 characters)\r\n\r\n- `zip`: Postal code (max 50 characters)\r\n\r\n- `countryCode`: ISO-2 country code (exactly 2 characters, e.g., \"DE\", \"AT\", \"FR\")\r\n\r\n- `locationIdentification`: Unique identifier within the company (1-1000 characters, alphanumeric and special characters )\r\n\r\n🔵 **Optional Fields**\r\n\r\n- `invoiceEmailAddress`: Email for invoice notifications (valid email format, max 100 characters)\r\n\r\n- `userComment`: Custom description (max 2000 characters)\r\n\r\n- `state`: Location state - \"Productive\" (default) or \"Test\"\r\n\r\n📝 **Important Notes:**\r\n- Valid states: \"Productive\", \"Test\" \r\n- Location will be created with \"Productive\" state by default\r\n- If created under a Test company, it will automatically be set to \"Test\" state\r\n- State changes from \"Productive\" to \"Test\" are irreversible\r\n- Address fields are primarily used for billing and invoicing purposes\r\n- The location will be assigned a unique ID and creation timestamp\r\n- Location name should be unique within the parent company for better organization"
      requestBody:
        description: >-
          The request body containing all properties required for location
          creation. Must include parentEntityId, name, and optional address
          information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePublicLocationRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/CreatePublicLocationRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreatePublicLocationRequest'
      responses:
        '200':
          description: >-
            Location created successfully. Returns the complete location data
            including assigned ID and timestamps.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicLocationResult'
        '400':
          description: >-
            Invalid input data, validation failed, or required fields are
            missing. Check the validation errors in the response.
        '403':
          description: >-
            Insufficient permissions to create location under the specified
            owner company.
        '404':
          description: Owner company not found or not accessible with current permissions.
  /api/v2/Public/Location/{locationId}:
    put:
      tags:
        - 3.Location
      summary: Updates existing location information and settings.
      description: "Updates the existing location properties. This is a full update operation - all properties should be included in the request as missing properties may cause validation errors or unexpected behavior.\r\n\r\n🔒 **Permissions:** ManageCompany permission on the location to update.\r\n            \r\n🔴 **Required Fields:**\r\n- `parentEntityId`: ID of the parent company (minimum value: 2)\r\n\r\n- `name`: Location name (2-1000 characters)\r\n            \r\n- `address`: Street address (max 1000 characters)\r\n\r\n- `city`: City name (max 1000 characters)\r\n\r\n- `zip`: Postal code (max 50 characters)\r\n\r\n- `countryCode`: ISO-2 country code (exactly 2 characters)\r\n\r\n- `locationIdentification`: Unique identifier within the company (1-1000 characters, alphanumeric and special characters )\r\n\r\n🔵 **Optional Fields:**\r\n\r\n- `invoiceEmailAddress`: Email for invoice notifications (valid email format, max 100 characters)\r\n\r\n- `userComment`: Custom description (max 2000 characters)\r\n\r\n- `state`: Location state - \"Productive\", \"Test\", or \"Deactivated\"\r\n            \r\n📝 **Important Notes:**\r\n- All properties should be included in the request to avoid validation errors\r\n- Missing properties may be cleared or cause validation failures\r\n- State changes from \"Productive\" to \"Test\" are irreversible and cannot be undone\r\n- State changes from \"Test\" to \"Productive\" are not allowed\r\n- The location's change timestamp will be updated automatically"
      parameters:
        - name: locationId
          in: path
          description: 'The unique identifier of the location to update (minimum value: 2).'
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      requestBody:
        description: >-
          The request body containing all properties to update. All properties
          will be updated, so include all current values.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePublicLocationRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/UpdatePublicLocationRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UpdatePublicLocationRequest'
      responses:
        '200':
          description: >-
            Location updated successfully. Returns the complete updated location
            data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicLocationResult'
        '400':
          description: Invalid input data, validation failed, or location ID is invalid.
        '403':
          description: Insufficient permissions to update the specified location.
        '404':
          description: Location not found or not accessible with current permissions.
    get:
      tags:
        - 3.Location
      summary: Gets the location by the specified ID.
      description: "Retrieves a single location by its unique identifier.\r\n\r\n🔒 **Permissions:** ReadCompany permission on the location identified via the given ID."
      parameters:
        - name: locationId
          in: path
          description: >-
            The unique identifier of the location to retrieve (minimum value:
            2).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Location retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicLocationResult'
        '400':
          description: Invalid location ID format or request is malformed.
        '403':
          description: Insufficient permissions to access the specified location.
        '404':
          description: Location not found or not accessible with current permissions.
  /api/v2/Public/Location/{locationId}/Deactivate:
    put:
      tags:
        - 3.Location
      summary: Deactivates a location and all its subordinate entities.
      description: "Deactivates a location and all its subordinate entities including registers and fiscal units. \r\nThe process executes in a specific order to ensure proper shutdown of all connected systems.\r\n\r\n🔒 **Permissions:** ManageCompany permission required for the specified location.\r\n\r\n📝 **Deactivation Process:**\r\n- Immediate deactivation: If no year specified, location is deactivated immediately\r\n\r\n- Scheduled deactivation: If year specified, deactivation occurs on December 31st at 23:59:59\r\n\r\n- Subordinate entities: All registers and fiscal units are deactivated\r\n\r\n- Fiscal units: Terminated after notice period (unless forceSubDeactivation is true)\r\n\r\n📝 **Important Notes:**\r\n- Process is irreversible once completed\r\n- All subordinate entities will be deactivated\r\n- Scheduled deactivation year must be current year or later\r\n- Fiscal Units will be terminated after notice period (unless forced)\r\n- Force sub-deactivation bypasses normal notice periods"
      parameters:
        - name: locationId
          in: path
          description: >-
            The unique identifier of the location to deactivate (minimum value:
            2).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
        - name: deactivateAfterYear
          in: query
          description: >-
            Optional year for scheduled deactivation (executed on December 31st
            at 23:59:59). Must be current year or later.
          style: form
          schema:
            type: integer
            format: int32
        - name: forceSubDeactivation
          in: query
          description: >-
            Optional flag to force immediate deactivation of all subordinate
            entities without waiting for notice periods.
          style: form
          schema:
            type: boolean
      responses:
        '200':
          description: >-
            Location successfully deactivated or scheduled for deactivation.
            Returns operation status and details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultBase'
        '400':
          description: >-
            Invalid input data, validation failed, or location cannot be
            deactivated (e.g., invalid year).
        '403':
          description: Insufficient permissions to deactivate the specified location.
        '404':
          description: Location not found or not accessible with current permissions.
  /api/v2/Public/Location/Search:
    put:
      tags:
        - 3.Location
      summary: Searches for locations based on given parameters in the request body.
      description: "Performs a filtered search across locations based on the provided search criteria. Multiple search parameters can be combined to narrow down results. Supports pagination, sorting, and various filtering options.\r\n            \r\n🔒 **Permissions:** ReadCompany permission is required for each location to appear in the search results.\r\n\r\n📝 **Search Parameters:**\r\n- `parentEntityId`: Filter by parent company (optional, minimum value: 2)\r\n\r\n- `createdAfter`: Filter by creation date (optional, ISO-8601 format)\r\n\r\n- `hasUserComment`: Filter by presence of user comments (optional, boolean)\r\n\r\n- `hasDeactivateAfterTimestamp`: Filter by deactivation date presence (optional, boolean)\r\n\r\n- `searchText`: Text search across name, comment, and other fields (optional, max 1000 characters)\r\n\r\n- `state`: Filter by location state - \"Productive\", \"Test\", or \"Deactivated\" (optional)\r\n\r\n- `countryCode`: Filter by ISO-2 country code (optional, exactly 2 characters, e.g., \"DE\", \"AT\", \"FR\")\r\n\r\n- `orderByField`: Sort field name (optional, default: \"name\")\r\n\r\n- `orderDescending`: Sort direction (optional, default: false for ascending)\r\n\r\n- `offset`: Number of items to skip for pagination (optional, minimum: 0)\r\n\r\n- `limit`: Number of items to return (optional, range: 0-250, default: 100)\r\n\r\n📝 **Important Notes:**\r\n- Maximum 250 results per request, default limit is 100 if not specified\r\n- If parentEntityId is provided, only direct children of that company are returned\r\n- State filtering supports: \"Productive\", \"Test\", \"Deactivated\"\r\n- Search is case-insensitive for text fields\r\n- Results include pagination metadata (total count, offset, limit)\r\n- Empty search criteria will return all accessible locations (up to limit)"
      requestBody:
        description: >-
          The search request object containing filter criteria, pagination
          settings, and sorting options for querying locations.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchPublicLocationsRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/SearchPublicLocationsRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/SearchPublicLocationsRequest'
      responses:
        '200':
          description: >-
            Search completed successfully. Returns matching locations with
            pagination information.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/PublicLocationSearchPublicCompanyObjectsResult
        '400':
          description: Invalid search parameters, request format, or validation failed.
        '403':
          description: >-
            Invalid access grant or insufficient permissions to search
            locations.
  /api/v2/Public/Register/{registerNumber}:
    get:
      tags:
        - 4.Register
      summary: Gets the register by the specified register number.
      description: "Retrieves a single register by its unique register number. Returns complete register information.\r\n\r\n🔒 **Permissions:** ReadRegister permission on the company that owns the register.\r\n\r\n\r\n📝 **Important Notes:**\r\n- Register numbers are typically 11 digits long"
      parameters:
        - name: registerNumber
          in: path
          description: The unique register number to retrieve (e.g., "12345678901").
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: >-
            Register retrieved successfully. Returns complete register data
            including all properties and metadata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPublicRegisterObjectResult'
        '400':
          description: Invalid register number format or request is malformed.
        '403':
          description: Insufficient permissions to access the specified register.
        '404':
          description: Register not found or not accessible with current permissions.
  /api/v2/Public/Register/Search:
    put:
      tags:
        - 4.Register
      summary: Searches for registers based on given parameters in the request body.
      description: "Performs a filtered search across registers based on the provided search criteria. Multiple search parameters can be combined to narrow down results. Supports pagination, sorting, and various filtering options.\r\n            \r\n🔒 **Permissions:** ReadRegister permission is required for each register to appear in the search results.\r\n\r\n📝 **Search Parameters:**\r\n- `parentEntityId`: Filter by parent company (optional, minimum value: 2)\r\n\r\n- `createdAfter`: Filter by creation date (optional, ISO-8601 format)\r\n\r\n- `hasUserComment`: Filter by presence of user comments (optional, boolean)\r\n\r\n- `hasDeactivateAfterTimestamp`: Filter by deactivation date presence (optional, boolean)\r\n            \r\n- `state`: Filter by RegisterState (optional, Productive|Test|Deactivated)\r\n\r\n- `searchText`: Text search across register properties (optional, max 1000 characters)\r\n\r\n- `orderByField`: Sort field name (optional, default: \"registerNumber\")\r\n\r\n- `orderDescending`: Sort direction (optional, default: false for ascending)\r\n\r\n- `offset`: Number of items to skip for pagination (optional, minimum: 0)\r\n\r\n- `limit`: Number of items to return (optional, range: 0-250, default: 100)\r\n\r\n📝 **Important Notes:**\r\n- Maximum 250 results per request, default limit is 100 if not specified\r\n- If pFarentEntityId is provided, only registers of that company are returned\r\n- Search text filtering is applied across register properties\r\n- Results include pagination metadata (total count, offset, limit)\r\n- Empty search criteria will return all accessible registers (up to limit)"
      requestBody:
        description: >-
          The search request object containing filter criteria, pagination
          settings, and sorting options for querying registers.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchPublicRegistersRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/SearchPublicRegistersRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/SearchPublicRegistersRequest'
      responses:
        '200':
          description: >-
            Search completed successfully. Returns matching registers with
            pagination information.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/PublicRegisterSearchPublicCompanyObjectsResult
        '400':
          description: Invalid search parameters, request format, or validation failed.
        '403':
          description: >-
            Invalid access grant or insufficient permissions to search
            registers.
  /api/v2/Public/Register/{registerNumber}/Deactivate:
    put:
      tags:
        - 4.Register
      summary: Deactivates a register or schedules deactivation for a future date.
      description: "Deactivates a register by changing state to \"Discharged\". This operation can be immediate or scheduled for a future date.\r\n\r\n🔒 **Permissions:** ManageRegister permission required for the company that owns the register.\r\n\r\n📝 **Important Notes:**\r\n- Register must not be in \"DATA_PENDING\" state to be deactivated\r\n- Registers with active subregisters cannot be deactivated\r\n- Registers still active with fiscal authorities cannot be deactivated\r\n- Already deactivated registers cannot be reanimated\r\n- Scheduled deactivation year must be current year or later"
      parameters:
        - name: registerNumber
          in: path
          description: The unique register number to deactivate (e.g., "12345678901").
          required: true
          style: simple
          schema:
            type: string
        - name: deactivateAfterYear
          in: query
          description: >-
            Optional year for scheduled deactivation (executed on December 31st
            at 23:59:59). Must be current year or later.
          style: form
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: >-
            Register successfully deactivated or scheduled for deactivation.
            Returns operation status and details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultBase'
        '400':
          description: >-
            Invalid input data, validation failed, or register cannot be
            deactivated (e.g., invalid year, business rule violation).
        '403':
          description: Insufficient permissions to deactivate the specified register.
        '404':
          description: Register not found or not accessible with current permissions.
  /api/v2/Public/Register/{RegisterNumber}/UpdateSoftware/{Release}:
    put:
      tags:
        - 4.Register
      summary: >-
        Assigns a specific software release version to a register for update
        purposes.
      description: "Updates the software release version assigned to a register. The operation is performed asynchronously in the background.\r\n\r\n🔒 **Permissions:** ManageRegister permission required for the company that owns the register.\r\n\r\n📝 **Update Process:**\r\n- Compatibility check: Target release must be compatible with register's platform and architecture\r\n\r\n- Background processing: Update is initiated asynchronously via messaging system\r\n\r\n- Version validation: Software version compatibility is verified\r\n\r\n- Platform restrictions: Cross-platform updates have specific limitations\r\n\r\n📝 **Important Notes:**\r\n- Register must exist and be accessible to the user\r\n- Target release must be compatible with the register's platform and architecture\r\n- Cross-platform updates have restrictions (e.g., Windows-only for major version changes)\r\n- Downgrade to version 1.x is not supported\r\n- EFR version 1.x is only available for ia32 architecture on Linux\r\n- Multiple target releases for the same parameters are not allowed\r\n- Update process runs in the background and may take time to complete\r\n\r\n⚡ **Error Codes:**\r\n- **01:** No register found to update\r\n\r\n- **02:** No assignment found to update\r\n\r\n- **03:** Multiple target releases found\r\n\r\n- **04:** No target release found\r\n\r\n- **06:** Main releases different - downgrade not possible or cross update only available for Windows"
      parameters:
        - name: RegisterNumber
          in: path
          description: The unique register number to update (e.g., "12345678901").
          required: true
          style: simple
          schema:
            type: string
        - name: Release
          in: path
          description: The software release version to assign (e.g., "2.0.1").
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: >-
            Software update initiated successfully. Returns operation status and
            details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicRegisterUpdateSoftwareResult'
        '400':
          description: Invalid parameters, register not found, or compatibility issues.
        '403':
          description: Insufficient permissions to update the specified register.
        '404':
          description: Register not found or not accessible with current permissions.
        '500':
          description: Failed to initiate update due to messaging system failure.
  /api/v2/Public/Purchase/{companyId}/Products:
    get:
      tags:
        - 5.Purchase
      summary: Retrieves all available products for purchase by the specified company.
      description: "Returns a list of all products available for purchase by the company. Products are filtered based on company state, assignment type, and purchase mode restrictions.\r\n\r\n🔒 **Permissions:** Purchase permission on the specified company.\r\n\r\n📝 **Returned Data:**\r\n- Product information: ID, Name, DescriptionShort, DescriptionLong\r\n\r\n- Pricing details: PriceOnce, PriceReoccurring (may be hidden based on purchase mode)\r\n\r\n- Product details: WarningText, ImageLink, Supplier, AmountLimit\r\n\r\n- Localization: CountryCode, AmountSelectionType\r\n\r\n📝 **Important Notes:**\r\n- Products are filtered by state (Production/Test)\r\n- Efsta-only products are excluded from results\r\n- Purchase mode restrictions may hide prices or entire products\r\n- Results are ordered by CountryCode and Supplier\r\n- Language code defaults to \"en\" if not provided or invalid\r\n- Only active products are returned"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the company to retrieve products for
            (minimum value: 1).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
        - name: languageCode
          in: query
          description: >-
            The language code for product descriptions and details (e.g., "en",
            "de", "fr"). Defaults to "en" if not provided.
          style: form
          schema:
            type: string
      responses:
        '200':
          description: >-
            Products retrieved successfully. Returns all available products for
            the company with localized descriptions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPublicProductsResult'
        '400':
          description: Invalid company ID format or language code.
        '403':
          description: Insufficient permissions to access company products.
        '404':
          description: Company not found or no products available.
  /api/v2/Public/Purchase/{companyId}/List:
    get:
      tags:
        - 5.Purchase
      summary: >-
        Retrieves a purchase overview for the specified company within the given
        date range.
      description: "Returns a comprehensive overview of all purchases made by the company within the specified date range. Results include purchase details, pricing information, and product information.\r\n\r\n🔒 **Permissions:** Purchase permission on the specified company.\r\n\r\n📝 **Important Notes:**\r\n- Results are ordered by purchase date (newest first)\r\n- Date format must be yyyyMMdd (e.g., \"20230101\" for January 1, 2023)\r\n- If fromDate is after tillDate, a validation error will be returned\r\n- Purchase mode restrictions may hide pricing information\r\n- Test orders are clearly marked in the results\r\n- Results include translated product names when available"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the company to retrieve purchase overview
            for (minimum value: 1).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
        - name: fromDate
          in: query
          description: >-
            The start date for the purchase overview in DateTimeOffset (e.g.,
            "2024-10-23T16:45:00Z").
          style: form
          schema:
            type: string
            format: date-time
        - name: tillDate
          in: query
          description: >-
            The end date for the purchase overview in DateTimeOffset (e.g.,
            "2025-10-23T16:45:00Z").
          style: form
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: >-
            Purchase overview retrieved successfully. Returns all purchases
            within the specified date range.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPublicPurchaseOverviewResult'
        '400':
          description: Invalid company ID, date format, or date range validation failed.
        '403':
          description: Insufficient permissions to access company purchase history.
        '404':
          description: Company not found or no purchases in the specified period.
  /api/v2/Public/Purchase:
    post:
      tags:
        - 5.Purchase
      summary: >-
        Creates a new purchase order for the specified company with the provided
        products and details.
      description: "Creates a new purchase order in the system. The purchase will be processed according to the company's payment method and billing preferences. All validation checks are performed before order creation.\r\n\r\n🔒 **Permissions:** Purchase permission required for all companies involved in the purchase (companyId, invoiceCompanyId, shippingCompanyId if provided).\r\n\r\n🔴 **Required Fields:**\r\n- `companyId`: ID of the company making the purchase (minimum value: 1)\r\n\r\n- `invoiceCompanyId`: ID of the company to invoice (minimum value: 1)\r\n\r\n- `items`: List of products to purchase with amounts and assignments\r\n\r\n- `recipientEmailAddress`: Email address for order notifications (valid email format)\r\n\r\n🔵 **Optional Fields:**\r\n- `shippingCompanyId`: ID of the company for shipping (if different from companyId)\r\n\r\n- `shippingName`: Name for shipping address (max 200 characters)\r\n\r\n- `shippingStreet`: Street address for shipping (max 200 characters)\r\n\r\n- `shippingCity`: City for shipping address (max 200 characters)\r\n\r\n- `shippingZip`: Postal code for shipping (max 20 characters)\r\n\r\n- `shippingCountryCode`: ISO-2 country code for shipping (exactly 2 characters)\r\n\r\n- `recipientEmailRealName`: Real name of the recipient (max 200 characters)\r\n\r\n- `customerReference`: Customer reference information (max 200 characters)\r\n\r\n📝 **Important Notes:**\r\n- Request must not be empty and must pass validation\r\n- All specified companies must be accessible with Purchase permission\r\n- Products must be available and valid for the company\r\n- Order processing is initiated asynchronously\r\n- Collective invoice is automatically enabled\r\n- Language is set based on user's language code or defaults to \"en-US\""
      requestBody:
        description: >-
          The request body containing all necessary information for the purchase
          order including company details, products, and shipping information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePublicPurchaseRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/CreatePublicPurchaseRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreatePublicPurchaseRequest'
      responses:
        '200':
          description: >-
            Purchase order created successfully. Returns operation status and
            details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultBase'
        '400':
          description: >-
            Invalid purchase data, product unavailable, validation failed, or
            request is empty/invalid.
        '403':
          description: >-
            Insufficient permissions to create purchase for the specified
            companies.
        '404':
          description: Company not found or not accessible with current permissions.
  /api/v2/Public/Export/{companyId}:
    post:
      tags:
        - 6.Export
      summary: >-
        Initiates a new data export process for the specified company with the
        provided export parameters.
      description: "Starts an export process for company data. The export will be processed in the background and can be monitored using the returned ticket number.\r\n\r\n🔒 **Permissions:** ExportData permission on the specified company.\r\n\r\n🔴 **Required Fields:**\r\n- `from`: Start date for the export data range (ISO-8601 format)\r\n\r\n- `till`: End date for the export data range (ISO-8601 format)\r\n\r\n- `exportType`: Type of export to perform (see Export Types below)\r\n\r\n🔵 **Optional Fields:**\r\n- `registerNumber`: Specific register number to export (if not provided, all registers for the company are included)\r\n            \r\n- `externalRecipientEmail`: Email address of the External recipient of the export.\r\n            \r\n📑 **Export Types:**\r\n- `Journal_Archive_Json`: Journal archive export in JSON format\r\n- `Transactions_CSV`: Transactions export in CSV format\r\n- `AT_DEP_7_RKSV`: Austrian data collection protocol §7 RKSV\r\n- `AT_DEP_131_BAO`: Austrian data collection protocol §131 BAO\r\n- `DE_DSFinVK`: German DSFinVK export format\r\n- `DE_TSE_Export_Journal`: German TSE export (journal)\r\n- `DE_GoBD`: German GoBD export format\r\n- `FR_Fiscal`: French fiscal export format\r\n- `FR_Grand_Totals`: French grand totals export format\r\n- `PT_SAFT`: Portuguese SAF-T export format\r\n- `SI_Export`: Slovenian export format\r\n\r\n📝 **Important Notes:**\r\n- Export process may take several minutes to complete\r\n- Export ticket number is returned immediately for tracking purposes\r\n- Export files are available for download for 30 days after completion\r\n- If no specific register is provided, all registers under the company are included\r\n- Export is processed asynchronously in the background\r\n- Use the ticket number to check export status and download completed files"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the company to export data for (minimum
            value: 1).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      requestBody:
        description: >-
          The request body containing all parameters and settings for the export
          operation including date range, export type, and register selection.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartPublicExportRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/StartPublicExportRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/StartPublicExportRequest'
      responses:
        '200':
          description: >-
            Export initiated successfully. Returns ticket number for tracking
            the export progress.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StartPublicExportResult'
        '400':
          description: Invalid export parameters, company ID, or request format.
        '403':
          description: Insufficient permissions to export data for the specified company.
        '404':
          description: Company not found or no exportable data available.
        '409':
          description: Another export is already in progress for this company.
  /api/v2/Public/Export/{companyId}/List:
    get:
      tags:
        - 6.Export
      summary: >-
        Retrieves the list of all export operations for the specified company,
        including their current status and details.
      description: "Returns a comprehensive list of all export operations initiated for the company, including both completed and in-progress exports. Results include detailed status information and metadata for each export.\r\n            \r\n🔒 **Permissions:** ExportData permission on the specified company.\r\n            \r\n📝 **Returned Data:**\r\n- Export information: TicketNr, ExportType, Creation timestamp\r\n            \r\n- Status details: Current status, Progress information\r\n            \r\n- Date range: From date, Till date for the export\r\n            \r\n- File information: File size, Download availability\r\n            \r\n- Error details: Error messages for failed exports\r\n            \r\n📤 **Export Status Information:**\r\n- `Pending`: Export is queued and waiting to be processed\r\n            \r\n- `In Progress`: Export is currently being generated\r\n            \r\n- `Completed`: Export is ready for download\r\n            \r\n- `Failed`: Export failed due to an error\r\n            \r\n- `Expired`: Export file has been automatically deleted\r\n            \r\n📝 **Important Notes:**\r\n- Export history is maintained for 30 days after completion\r\n- Export list is ordered by creation date (newest first)\r\n- Completed exports show file size and download expiration time\r\n- Failed exports include error details and failure reasons\r\n- Only exports with ExportType set are returned"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the company to retrieve exports for
            (minimum value: 1).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: >-
            Export list retrieved successfully. Returns all export operations
            for the company with their current status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPublicExportsResult'
        '400':
          description: Invalid company ID format or request is malformed.
        '403':
          description: Insufficient permissions to access company exports.
        '404':
          description: Company not found or no exports available.
  /api/v2/Public/Export/{ticketNr}:
    get:
      tags:
        - 6.Export
      summary: Downloads the completed export file using the specified ticket number.
      description: "Downloads the completed export file as a ZIP archive. The file contains all exported data in the requested format.\r\n            \r\n🔒 **Permissions:** ExportData permission on the company associated with the export ticket.\r\n            \r\n📝 **Download Process:**\r\n- File retrieval: Export files are retrieved from secure cloud storage\r\n            \r\n- Encryption: Files are stored encrypted\r\n            \r\n- ZIP creation: Multiple files are packaged into a single ZIP archive\r\n            \r\n- Stream delivery: File is streamed directly to the client\r\n            \r\n📝 **Important Notes:**\r\n- Export must be in \"Completed\" status to be downloadable\r\n- Export files are available for download for 30 days after completion\r\n- If multiple files exist, they are packaged into a single ZIP archive\r\n- If only one ZIP file exists, it is returned directly\r\n- File name follows the pattern: \"{ticketNr}.zip\"\r\n- Content-Type is set to \"application/zip\""
      parameters:
        - name: ticketNr
          in: path
          description: >-
            The unique ticket number identifying the export to download (e.g.,
            "TKT-123456789").
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: >-
            Export file downloaded successfully. Returns the export file as a
            ZIP archive.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultBase'
        '400':
          description: Invalid ticket number format or request is malformed.
        '403':
          description: Insufficient permissions to download the export.
        '404':
          description: Export ticket not found or file no longer available.
        '410':
          description: Export file has expired and been deleted.
  /api/v2/Public/Fiscal/DE/Reporting/List/{companyId}:
    get:
      tags:
        - 7.Fiscal
      summary: >-
        Retrieves the list of all available fiscal reporting periods for the
        specified German company.
      description: "Returns a comprehensive list of all fiscal reporting periods available for the German company, including both completed and pending reporting periods. Results include detailed information about each reporting period's status and requirements.\r\n\r\n🔒 **Permissions:** ReadCompany permission on the specified company.\r\n\r\n📝 **Returned Data:**\r\n- Reporting period information: GUID, CompanyId, Period details\r\n\r\n- Status information: Current state, Processing status\r\n\r\n- Date information: Reporting period dates, Creation timestamps\r\n\r\n- Company context: Company type, Support level, Location details\r\n\r\n📝 **Important Notes:**\r\n- Only available for German companies with active fiscal registration\r\n- Results include both company and location-level reporting periods\r\n- Organization companies (CompanyType \"O\") are not supported\r\n- Results are filtered by company hierarchy and user permissions\r\n- Empty results indicate no fiscal reporting periods are available"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the German company to retrieve fiscal
            reporting periods for (minimum value: 1).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: >-
            Reporting periods retrieved successfully. Returns all available
            fiscal reporting periods for the company.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DE_GetPublicReportingListResult'
        '400':
          description: Invalid company ID format or company not German.
        '403':
          description: Insufficient permissions to access company fiscal data.
        '404':
          description: Company not found or no fiscal registration found.
  /api/v2/Public/Fiscal/DE/Reporting/Data/{guid}:
    get:
      tags:
        - 7.Fiscal
      summary: >-
        Retrieves the fiscal reporting data for the specified German reporting
        period.
      description: "Returns detailed fiscal reporting data for the specified German reporting period, including all relevant financial information required for compliance. Data is compiled from all registers and fiscal units within the company.\r\n\r\n🔒 **Permissions:** ReadCompany permission on the company associated with the reporting period.\r\n\r\n📝 **Returned Data:**\r\n- Reporting contact information: Contact details, Company association\r\n\r\n- Company data: Location name, Support level, Address details\r\n\r\n- Recording systems: System information, Deactivation status, Count\r\n\r\n- Previous reporting: Previous GUID reference for continuity\r\n\r\n- State information: Current processing state\r\n\r\n📝 **Important Notes:**\r\n- Reporting data is compiled from all registers and fiscal units within the company\r\n- Data format complies with German fiscal authority requirements (ELSTER format)\r\n- Street address is automatically parsed into components (name, number, suffix)\r\n- Recording systems count excludes deactivated systems\r\n- Previous reporting GUID is provided for data continuity\r\n- Data is only available for companies with valid company types (not Organization)\r\n- Owner company validation ensures proper hierarchy access"
      parameters:
        - name: guid
          in: path
          description: >-
            The unique identifier of the reporting period to retrieve data for
            (e.g., "12345678-1234-1234-1234-123456789012").
          required: true
          style: simple
          schema:
            type: string
      responses:
        '200':
          description: >-
            Reporting data retrieved successfully. Returns detailed fiscal
            reporting data for the specified period.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DE_GetPublicReportingDataResult'
        '400':
          description: Invalid GUID format or reporting period not found.
        '403':
          description: Insufficient permissions to access reporting data.
        '404':
          description: Reporting period not found or no data available.
        '409':
          description: Data is currently being recalculated or updated.
  /api/v2/Public/Fiscal/DE/Reporting/{guid}:
    post:
      tags:
        - 7.Fiscal
      summary: Creates a fiscal report.
      description: "Creates an official fiscal report.\r\n\r\n🔒 **Permissions:** ManageCompany permission on the company associated with the reporting period.\r\n\r\n📝 **Submission Process:**\r\n- Disclaimer validation: Legal disclaimer must be accepted\r\n\r\n- State update: Reporting state is set to \"CREATING\"\r\n\r\n- Background processing: Report generation is initiated asynchronously\r\n\r\n📝 **Important Notes:**\r\n- Report submission is legally binding and cannot be reversed\r\n- Disclaimer acceptance is mandatory for report submission\r\n- Report is automatically formatted according to ELSTER specifications\r\n- Submission confirmation is provided by German tax authorities\r\n- Failed submissions may require manual intervention or correction\r\n- Report data is locked after successful submission\r\n- Digital signature is applied automatically during submission"
      parameters:
        - name: guid
          in: path
          description: >-
            The unique identifier of the reporting period to create and submit
            the report for (e.g., "12345678-1234-1234-1234-123456789012").
          required: true
          style: simple
          schema:
            type: string
        - name: acceptDisclaimer
          in: query
          description: >-
            Boolean flag indicating acceptance of legal disclaimer and
            submission terms. Must be true for submission to proceed.
          style: form
          schema:
            type: boolean
      responses:
        '200':
          description: >-
            Report successfully created and submitted. Returns operation status
            and details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultBase'
        '400':
          description: Invalid GUID, disclaimer not accepted, or validation failed.
        '403':
          description: Insufficient permissions to submit fiscal reports.
        '404':
          description: Reporting period not found or not ready for submission.
        '409':
          description: Report already submitted or submission in progress.
        '422':
          description: Report data validation failed.
    get:
      tags:
        - 7.Fiscal
      summary: >-
        Retrieves the completed fiscal report document for the specified German
        reporting period.
      description: "Returns the official fiscal report document that was submitted to German tax authorities, including all supporting data and confirmations. The document is returned as a file download.\r\n\r\n🔒 **Permissions:** ReadCompany permission on the company associated with the reporting period.\r\n\r\n📝 **Download Process:**\r\n- Disclaimer validation: Legal disclaimer must be accepted\r\n\r\n- State verification: Report must be in \"CREATED\" or \"SENT\" state\r\n\r\n- File retrieval: Report file is retrieved from secure storage\r\n\r\n- Download tracking: Report access is logged for audit purposes\r\n\r\n📄 **Document Contents:**\r\n- Official Report: Complete fiscal report as submitted to authorities\r\n\r\n- Submission Confirmation: Official receipt and reference numbers\r\n\r\n- Data Summary: Aggregated financial information and calculations\r\n\r\n- Compliance Verification: Validation results and quality indicators\r\n\r\n- Supporting Documents: Related attachments and supplementary data\r\n\r\n📝 **Important Notes:**\r\n- Report document is only available after successful submission\r\n- Document includes official submission confirmations and reference numbers\r\n- Report format matches the version submitted to tax authorities\r\n- Access to official reports requires disclaimer acceptance\r\n- Report documents are archived and available for audit purposes\r\n- Document includes digital signature verification information\r\n- File format depends on state: XML for \"CREATED\", PDF for \"SENT\"\r\n- File name follows pattern: \"{ECI}_{Criteria}_{Time}_{Time}.{extension}\""
      parameters:
        - name: guid
          in: path
          description: >-
            The unique identifier of the reporting period to retrieve the report
            for (e.g., "12345678-1234-1234-1234-123456789012").
          required: true
          style: simple
          schema:
            type: string
        - name: acceptDisclaimer
          in: query
          description: >-
            Boolean flag indicating acceptance of legal disclaimer for accessing
            official report. Must be true for access to proceed.
          style: form
          schema:
            type: boolean
      responses:
        '200':
          description: >-
            Fiscal report document retrieved successfully. Returns the official
            report document as a file download.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultBase'
        '400':
          description: Invalid GUID or disclaimer not accepted.
        '403':
          description: Insufficient permissions to access fiscal report.
        '404':
          description: Reporting period not found or report not yet available.
        '409':
          description: Report is still being processed or submitted.
  /api/v2/Public/User/Active:
    get:
      tags:
        - 8.User
      summary: >-
        Retrieves the currently active user profile information for the
        authenticated session.
      description: "Returns detailed information about the user associated with the current authentication method (e.g., API key). This endpoint is useful for verifying authentication and retrieving user context.\r\n\r\n🔒 **Permissions:** No specific permissions required - returns information about the authenticated user.\r\n\r\n📝 **Returned Data:**\r\n- User profile information: Real name, Email address, User ID\r\n\r\n- Language preferences: Preferred language code\r\n\r\n📝 **Important Notes:**\r\n- User information is based on the authentication method used (API key, token, etc.)\r\n- This endpoint can be used to verify API key validity and user status\r\n- Returns null if user profile cannot be found or mapped\r\n- User profile is mapped from internal user profile structure"
      responses:
        '200':
          description: >-
            User profile retrieved successfully. Returns detailed information
            about the authenticated user.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetActiveUserResult'
        '404':
          description: User not found or API key mapping error.
  /api/v2/Public/User/Invite:
    post:
      tags:
        - 8.User
      summary: >-
        Creates and sends an invitation for a new user to join the specified
        company with defined permissions.
      description: " Sends an invitation email to a new user, allowing them to register and gain access to the specified company with the defined role and permissions.\r\n \r\n 🔒 **Permissions:** ManageUsers on the company identified via companyId of the body data.\r\n\r\n**Parameters:**\r\n - `companyId` (integer): The ID of the company to invite a user to.\r\n - `emailAddress` (string): The email address this invitation will be sent to.\r\n - `role` (string): Defines the role that will be set for the invited user as soon as he accepts the invitation. Default:(VIEWER)\r\n - `customText` (string): A custom text that will be added to the default invitation text. It might contain information about why the user has been invited and what to do or who to contact\r\n - `suggestedRealName` (string): The suggested real name for the user that the real user can change when logging in for the first time\r\n - `inviter`: The ID of the user who is sending the invitation.\r\n \r\n 📝 **Important Notes:**\r\n - Invitation email is sent to the specified email address with registration instructions\r\n - Default role is \"VIEWER\" if no role is specified in the request\r\n - Invitation includes a secure token with expiration date\r\n - Only users with ManageUsers permission can send invitations\r\n - API endpoint throttling may apply to prevent spam\r\n - Duplicate invitations to the same email for the same company are prevented\r\n \r\n **Invitation Process:**\r\n - **Validation:** Email format, company access, and role validity are checked\r\n - **Creation:** Invitation record is created with secure token\r\n - **Email Delivery:** Invitation email is sent with registration link\r\n - **Registration:** User follows link to complete registration process\r\n - **Activation:** User account is activated and linked to the company\r\n \r\n 👨‍💼**Role Assignment:**\r\n - **ADMIN** - Full system access (8 permissions)\r\n     - ✅ ReadCompany, ManageCompany, ManageRegister, ManageUsers, ManageBill, Purchase, ExportData, ReadRegister\r\n \r\n - **EDITOR** - Management capabilities without purchasing (7 permissions)\r\n     - ✅ ReadCompany, ManageCompany, ManageRegister, ManageUsers, ManageBill, ExportData, ReadRegister\r\n     - ❌ Purchase\r\n \r\n - **DATAFISCAL** - Company and data management (4 permissions)\r\n     - ✅ ReadCompany, ManageCompany, ReadRegister, ExportData\r\n     - ❌ ManageRegister, ManageUsers, ManageBill, Purchase\r\n \r\n - **DATAVIEWER** - Read-only with export capabilities (3 permissions)\r\n     - ✅ ReadCompany, ReadRegister, ExportData\r\n     - ❌ ManageCompany, ManageRegister, ManageUsers, ManageBill, Purchase\r\n \r\n - **FISCAL** - Basic company management (3 permissions)\r\n     - ✅ ReadCompany, ManageCompany, ReadRegister\r\n     - ❌ ManageRegister, ManageUsers, ManageBill, Purchase, ExportData\r\n \r\n - **VIEWER** - Read-only access (2 permissions)\r\n     - ✅ ReadCompany, ReadRegister\r\n     - ❌ ManageCompany, ManageRegister, ManageUsers, ManageBill, Purchase, ExportData"
      requestBody:
        description: >-
          The request body containing all details for the invitation request
          including email, company, and role information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInvitationRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/CreateInvitationRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreateInvitationRequest'
      responses:
        '200':
          description: >-
            Invitation created and sent successfully. Returns operation status
            and details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultBase'
        '400':
          description: Invalid request data, validation failed, or missing required fields.
        '403':
          description: Insufficient permissions to invite users to the specified company.
  /api/v2/Public/User/DeleteAccess:
    delete:
      tags:
        - 8.User
      summary: >-
        Removes user access permissions for a specific company and all its child
        entities.
      description: "Permanently removes all role assignments for the specified user from the target company and its entire hierarchy (child companies, locations, etc.). \r\nThis operation uses the company's parent-child relationship to restore appropriate permissions from parent companies if they exist.\r\n\r\n🔒 **Permissions:** ManageUsers permission required on the target company.\r\n\r\n📝 **Important Notes:**\r\n- **Hierarchical Impact:** Removes permissions from the target company AND all child entities\r\n- **Parent Permission Restoration:** If the user has roles in parent companies, those roles may be automatically restored for the affected hierarchy\r\n- **No Parent Roles:** If no parent company roles exist, the user will lose all access to the company hierarchy\r\n- **Irreversible Action:** This operation cannot be undone - user permissions must be manually re-assigned if needed\r\n\r\n⚠️ **Warning:** Use with caution as this affects the entire company hierarchy, not just the specified company."
      parameters:
        - name: CompanyId
          in: query
          description: >-
            The unique identifier of the company from which to remove user
            access permissions (minimum value: 1).
          style: form
          schema:
            type: integer
            format: int32
        - name: UserId
          in: query
          description: >-
            The unique identifier of the user whose access should be removed
            (minimum value: 1).
          style: form
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: >-
            User access removed successfully. Returns operation status and
            details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultBase'
        '400':
          description: Invalid input parameters or company/user not found.
        '403':
          description: Insufficient permissions to manage users for the specified company.
  /api/v2/Public/User/Invited:
    get:
      tags:
        - 8.User
      summary: >-
        Retrieves all users with permissions for a specific company, including
        their roles and detailed permission lists.
      description: "Returns a comprehensive list of all users who have any form of access to the specified company. Each user entry includes detailed information about their roles and permissions.\r\n\r\n🔒 **Permissions:** ReadCompany permission required on the target company.\r\n\r\n📝 **Returned Data:**\r\n- User profile information: Real name, Email address, User ID\r\n\r\n- Language preferences: Preferred language code\r\n\r\n- Permission details: Expanded list of specific permissions granted through the role\r\n\r\n- Summary information: Total count of users, Success status\r\n\r\n📝 **Important Notes:**\r\n- Complete Permission Overview: Shows both role names and expanded permission details for transparency\r\n- User Management: Essential for admin users to understand who has access to what\r\n- Security Auditing: Provides detailed permission breakdown for compliance reviews\r\n- Role-Based Access: Displays the relationship between roles and actual permissions\r\n- Only non-inherited roles are included in the results\r\n- Results are ordered by user name and role name\r\n- Empty results indicate no users have direct access to the company"
      parameters:
        - name: companyId
          in: query
          description: >-
            The unique identifier of the company to retrieve user permissions
            for (minimum value: 1).
          style: form
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: >-
            Company users retrieved successfully. Returns list of users with
            their permissions and roles.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCompanyUsersResult'
        '400':
          description: Invalid company ID format or company not found.
        '403':
          description: Insufficient permissions to view users for the specified company.
  /api/v2/Public/Permission/{companyId}:
    get:
      tags:
        - 9.Tools
      summary: >-
        Tests whether the authenticated user has the specified permission on the
        given company.
      description: "Performs a permission check to determine if the current user has the specified permission on the given company. This is useful for API clients to verify access before attempting operations.\r\n\r\n🔒 **Permissions:** No specific permissions required - tests current user's permissions.\r\n\r\n📝 **Returned Data:**\r\n- Permission result: Boolean indicating whether the user has the specified permission\r\n\r\n- Success status: Operation completion status\r\n\r\n🗝️ **Permission Types:**\r\n- `ReadCompany`: View company information and basic data\r\n\r\n- `ManageCompany`: Edit company settings and configuration\r\n\r\n- `ReadRegister`: View register information and status\r\n\r\n- `ManageRegister`: Configure and manage register\r\n\r\n- `Purchase`: Permission to place new purchases in the efsta Cloud\r\n\r\n- `ExportData`: Permission to export archive data from registers and companies\r\n\r\n- `ManageUsers`: Permission to manage users by adding new ones or remove and changing existing ones\r\n\r\n- `ManageBill`: Permission to manage efsta Bill and efsta Wallet configurations\r\n\r\n📝 **Important Notes:**\r\n- This endpoint is useful for API clients to verify access before attempting operations\r\n- Returns false if the user does not have the specified permission\r\n- Returns true if the user has the specified permission\r\n- Permission check is performed using the current authenticated user's context"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the company to test permissions for
            (minimum value: 1).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
        - name: permissionType
          in: query
          description: The type of permission to test. Select from the dropdown menu.
          style: form
          schema:
            type: string
      responses:
        '200':
          description: >-
            Permission test completed successfully. Returns permission test
            result (true/false).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermissionTestResult'
        '400':
          description: Invalid company ID format or permission type.
  /api/v2/Public/Company/{companyId}/Tree:
    get:
      tags:
        - 9.Tools
      summary: Retrieves the complete organizational hierarchy for a company.
      description: "Gets the company tree structure for the specified company, including its hierarchical relationships. Using the \"get\" filter options enables narrowing down the list of entries to traverse during the buildup of the result.\r\n\r\n🔒 **Permissions:** ReadCompany permission required for the base company. Additional permissions required for subordinate entities.\r\n\r\n📝 **Filter Options:**\r\n\r\n- `includeRegisters`: Include cash registers in the hierarchy tree\r\n\r\n📝 **Returned Data:**\r\n- Root node: The base company as the root of the hierarchy tree\r\n\r\n- Child nodes: All subordinate entities based on filter settings\r\n\r\n- Hierarchy structure: Parent-child relationships between entities\r\n\r\n- Entity details: Object name, ID, type, owner, State\r\n\r\n**Hierarchy Structure:**\r\n- Organizations (top level)\r\n\r\n- Companies (business entities)\r\n\r\n- Locations (physical sites)\r\n\r\n- Registers (cash register systems)\r\n\r\n📝 **Important Notes:**\r\n- Organization, company and locations are always displayed\r\n- Results are ordered by PATH for proper hierarchical structure\r\n- Empty results indicate no accessible entities in the hierarchy"
      parameters:
        - name: companyId
          in: path
          description: >-
            The unique identifier of the base company for hierarchy retrieval
            (minimum value: 2).
          required: true
          style: simple
          schema:
            type: integer
            format: int32
        - name: includeRegisters
          in: query
          style: form
          schema:
            type: boolean
      responses:
        '200':
          description: >-
            Company hierarchy retrieved successfully. Returns the complete
            organizational tree structure.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCompanyTreeResult'
        '400':
          description: Invalid company ID format or filter parameters.
        '403':
          description: Insufficient permissions or invalid access grant.
        '404':
          description: Base company not found.
components:
  schemas:
    CompanyTreeItem:
      type: object
      properties:
        objectId:
          type: string
          description: >-
            The ID of the object, for example the ID of the company or location
            or the register number of an EFR instance.
          nullable: true
          example: '1545'
        objectName:
          type: string
          description: >-
            The name of the object, for example the name of the company or
            organizational unit or the register number and (if available) TL/TT
            information of a register.
          nullable: true
          example: ACME Store Berlin
        objectType:
          type: string
          description: >-
            The type of the object (O = Organization, C = Company, L = Location,
            E = EFR / register)
          nullable: true
          example: C
        parentEntityId:
          type: integer
          description: The ID of the directly owning company of the current record.
          format: int32
          example: 1000
        state:
          type: integer
          description: The State of the current record. Productive | Test | Deactivated.
          format: int32
          example: 10
        children:
          type: array
          items:
            $ref: '#/components/schemas/CompanyTreeItem'
          description: >-
            A list of all children that are assigned to the current node (e.g.
            locations of a company or registers of a location).
          nullable: true
      additionalProperties: false
      description: >-
        A single entry in the company tree with its ID, the name and type as
        well as all children of that entry.
    CompanyUserPermissionInfo:
      type: object
      properties:
        userId:
          type: integer
          description: The unique ID of the user.
          format: int32
          example: 123
        realname:
          type: string
          description: >-
            The real name of the user profile, typically containing a human
            readable text describing the user (i.e. the actual name of a person
            or the purpose of the API key)
          nullable: true
          example: John Doe
        emailAddress:
          type: string
          description: >-
            The registered email address of the user profile, e.g. for needed
            communication.
          nullable: true
          example: john.doe@partner-company.com
        preferredLanguage:
          type: string
          description: >-
            The language code used for communication and translation (whenever
            translation is available).
          nullable: true
          example: en
        roleInvariantName:
          type: string
          description: Name of the Role
          nullable: true
          example: EDITOR
        permissions:
          type: array
          items:
            type: string
          description: The permissions granted to the user.
          nullable: true
      additionalProperties: false
    ContactType:
      enum:
        - Unknown
        - InvoiceContact
        - TechnicalContact
        - CommercialContact
        - ElsterContact
      type: string
    CreateInvitationRequest:
      type: object
      properties:
        companyId:
          type: integer
          description: >-
            The ID of the company to invite a user to. This can be both an ID
            identifying an organization or a company.
          format: int32
          example: 1545
        role:
          type: string
          description: "Defines the role that will be set for the invited user as soon as he accepts the invitation. Allowed values are\r\n\"ADMIN\", \"DATAFISCAL\", \"DATAVIEWER\", \"EDITOR\", \"FISCAL\", \"VIEWER\""
          nullable: true
          example: EDITOR
        emailAddress:
          type: string
          description: "The email address this invitation will be sent to. This does not have to be the email address the user uses for the actual\r\nefsta Portal account and the email can also be forwarded."
          nullable: true
          example: john.doe@partner-company.com
        customText:
          type: string
          description: "A custom text that will be added to the default invitation text. It might contain information about why the used has been invited\r\nand what to do or who to contact."
          nullable: true
          example: >-
            Welcome to our efsta Portal! Please contact our IT department if you
            need assistance with the initial setup.
        suggestedRealName:
          type: string
          description: >-
            The suggested real name for the user that the real user can change
            when logging in for the first time.
          nullable: true
          example: John Doe
        inviter:
          type: integer
          description: The ID of the user who is creating this invitation.
          format: int32
          example: 123
      additionalProperties: false
      description: >-
        The request object used to invite a new user to a certain node in the
        company tree.
    CreatePublicCompanyContactRequest:
      type: object
      properties:
        companyId:
          type: integer
          format: int32
        contactName:
          type: string
          nullable: true
        emailAddress:
          type: string
          nullable: true
        contactType:
          type: string
          nullable: true
        languageCode:
          type: string
          nullable: true
      additionalProperties: false
      description: Request model for creating a new company contact in the system.
    CreatePublicCompanyContactResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        companyContact:
          $ref: '#/components/schemas/PublicCompanyContact'
      additionalProperties: false
    CreatePublicCompanyRequest:
      type: object
      properties:
        parentEntityId:
          type: integer
          description: >-
            Represents the unique identifier of the company that owns the
            object.
          format: int32
          example: 3434
        name:
          type: string
          description: Represents the name of the object.
          nullable: true
        address:
          type: string
          description: The Address the object is located in (street and street number).
          nullable: true
          example: 123 Main Street
        city:
          type: string
          description: The name of the city the object is located in.
          nullable: true
          example: Berlin
        zip:
          type: string
          description: The zip / postal code the object is located in.
          nullable: true
          example: '10115'
        countryCode:
          type: string
          description: >-
            The ISO-2 country code of the address of the object (e.g. DE, FR or
            AT)
          nullable: true
          example: DE
        invoiceEmailAddress:
          type: string
          description: >-
            The invoice email address relevant for all nodes that receive
            invoice-emails (primarily company entries)
          nullable: true
          example: invoices@acmecorp.com
        userComment:
          type: string
          description: A custom comment set by users to further decribe the current node.
          nullable: true
          example: Main headquarters, established 1985
        state:
          type: string
          description: "Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE!\r\nValid values: \"Productive\", \"Test\""
          nullable: true
          example: Productive
        countryProperties:
          $ref: '#/components/schemas/PublicCompanyCountryProperties'
        taxId:
          type: string
          description: "The tax ID (also known as the ECI / external company identification) that is typically the EU tax ID (USt-ID, UID, etc.) of that company.\r\nThis is legally required and will be validated whenever possible / needed by efsta."
          nullable: true
          example: DE999999999
        ignoreTaxId:
          type: boolean
          description: >-
            If set to true, the validation of the TaxId will be skipped. The
            TaxId will still be saved.
          example: false
      additionalProperties: false
      description: >-
        The request object used on the public controller to create a new company
        entry in the company tree.
    CreatePublicLocationRequest:
      type: object
      properties:
        parentEntityId:
          type: integer
          description: >-
            Represents the unique identifier of the company that owns the
            object.
          format: int32
          example: 3434
        name:
          type: string
          description: Represents the name of the object.
          nullable: true
        address:
          type: string
          description: The Address the object is located in (street and street number).
          nullable: true
          example: 123 Main Street
        city:
          type: string
          description: The name of the city the object is located in.
          nullable: true
          example: Berlin
        zip:
          type: string
          description: The zip / postal code the object is located in.
          nullable: true
          example: '10115'
        countryCode:
          type: string
          description: >-
            The ISO-2 country code of the address of the object (e.g. DE, FR or
            AT)
          nullable: true
          example: DE
        invoiceEmailAddress:
          type: string
          description: >-
            The invoice email address relevant for all nodes that receive
            invoice-emails (primarily company entries)
          nullable: true
          example: invoices@acmecorp.com
        userComment:
          type: string
          description: A custom comment set by users to further decribe the current node.
          nullable: true
          example: Main headquarters, established 1985
        state:
          type: string
          description: "Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE!\r\nValid values: \"Productive\", \"Test\""
          nullable: true
          example: Productive
        locationIdentification:
          type: string
          description: "The identification of the location within the company (e.g. the location number, a unique identifier) Can contain upper and lower case characters as\r\nwell as numbers and special characters -+<>#.,=."
          nullable: true
          example: LOC-001
      additionalProperties: false
      description: >-
        The request object used on the public controller to create a new
        location entry in the company tree.
    CreatePublicOrganizationRequest:
      type: object
      properties:
        parentEntityId:
          type: integer
          description: >-
            Represents the unique identifier of the company that owns the
            object.
          format: int32
          example: 3434
        name:
          type: string
          description: Represents the name of the object.
          nullable: true
        invoiceEmailAddress:
          type: string
          description: >-
            The invoice email address relevant for all nodes that receive
            invoice-emails (primarily company entries)
          nullable: true
          example: invoices@acmecorp.com
        userComment:
          type: string
          description: A custom comment set by users to further decribe the current node.
          nullable: true
          example: Main headquarters, established 1985
        state:
          type: string
          description: "Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE!\r\nValid values: \"Productive\", \"Test\""
          nullable: true
          example: Productive
        address:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        zip:
          type: string
          nullable: true
        countryCode:
          type: string
          nullable: true
      additionalProperties: false
      description: >-
        The request object used on the public controller to create a new
        organization entry in the company tree.
    CreatePublicPurchaseRequest:
      type: object
      properties:
        companyId:
          type: integer
          description: >-
            The ID of the actual company the purchase is made for (i.e. the
            beneficiary)
          format: int32
          example: 1545
        customerReference:
          type: string
          description: >-
            A custom reference value that can be used to find and identify a
            specific purchase in the efsta system.
          nullable: true
          example: P-35333-94911-U
        invoiceCompanyId:
          type: integer
          description: >-
            The ID of the company that will be used for invoicing. Must be a
            company object entry that is allowed to receive invoices (i.e. must
            have Tax ID and address)
          format: int32
          example: 1545
        shippingCompanyId:
          type: integer
          description: "In case no manual address has been passed, the Id of the company entry to ship to can be passed for the purchase. The address of that company or location will\r\nreceive physical items (like USB TSEs or signature devices)."
          format: int32
          nullable: true
          example: 1546
        shippingName:
          type: string
          description: >-
            The legal name of the receiving address object (e.g. a person or the
            shop name).
          nullable: true
          example: ACME Store Berlin
        shippingStreet:
          type: string
          description: The street name of the receiving address.
          nullable: true
          example: Friedrichstraße 101
        shippingZip:
          type: string
          description: The zip / postal code of the receiving address.
          nullable: true
          example: '10117'
        shippingCity:
          type: string
          description: The city name of the receiving address.
          nullable: true
          example: Berlin
        shippingCountryCode:
          type: string
          description: The ISO-2 code of the country of the receiving address.
          nullable: true
          example: DE
        recipientEmailAddress:
          type: string
          description: >-
            In case an item will be sent via email (e.g. old PrimeSign online
            certificates) they will be sent to this email address.
          nullable: true
          example: admin@acme-store.com
        recipientEmailRealName:
          type: string
          description: >-
            In case an item will be sent via email (e.g. old PrimeSign online
            certificates) this name will be used as the recipient.
          nullable: true
          example: John Doe
        items:
          type: array
          items:
            $ref: '#/components/schemas/PurchaseItem'
          description: "The list of items thar should be purchases. It is recommended to stick with a single type of item (e.g. a fiskaly Cloud TSE) per purchase to\r\nreduce risk of one of the different (remote) systems to fail."
          nullable: true
          example:
            - id: 42
              amount: 3
              amountAssignment:
                LOC-001: 2
                LOC-002: 1
        empty:
          type: boolean
          description: Gets a value indicating whether this instance is empty.
          readOnly: true
        valid:
          type: boolean
          description: Gets a value indicating whether this instance is valid.
          readOnly: true
      additionalProperties: false
      description: >-
        The request model used for placing a new purchase in the public
        controller
    DE_GetPublicReportingDataResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        reportingContact:
          $ref: '#/components/schemas/ReportingDEContact'
        wIdNr:
          type: string
          description: >-
            The economic identification number of the reportable company
            required for the reporting process from 01.01.2027 onwards.
          nullable: true
        useLocationContact:
          type: boolean
          description: >-
            Flag indicating whether to use location-specific contact information
            instead of the company-wide reporting contact for this fiscal
            report.
          example: false
        companyData:
          $ref: '#/components/schemas/DE_ReportingCompanyData'
        recordingSystems:
          type: array
          items:
            $ref: '#/components/schemas/ReportingDE'
          description: >-
            Collection of all recording systems, cash registers, and
            point-of-sale systems registered under this company for German
            DSFinV-K compliance reporting.
          nullable: true
        previousGuid:
          type: string
          description: >-
            Unique identifier (GUID) linking to the previously submitted
            reporting period, ensuring continuity and audit trail compliance as
            required by German tax authorities.
          nullable: true
          example: 550e8400-e29b-41d4-a716-446655440000
        state:
          type: string
          description: >-
            Current processing state of the reporting data preparation (Ready,
            Processing, ValidationError, Completed, Submitted).
          nullable: true
          example: Ready
      additionalProperties: false
      description: >-
        Result model containing complete German fiscal reporting data including
        contact information, company details, recording systems, and
        configuration settings.
    DE_GetPublicReportingListResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        reportingList:
          type: array
          items:
            $ref: '#/components/schemas/PublicReportingDEState'
          description: >-
            Collection of German fiscal reporting entries available to the
            requesting company, each containing state information, status, and
            metadata.
          nullable: true
      additionalProperties: false
      description: >-
        Result model containing a list of German fiscal reporting entries with
        their current states.
    DE_ReportingCompanyData:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the company/location.
          format: int32
          example: 1545
        locationName:
          type: string
          description: The name of the location or company.
          nullable: true
          example: ACME Store Berlin
        recordingSystemsCount:
          type: integer
          description: The number of recording systems (cash registers) at this location.
          format: int32
          example: 3
        supportLevel:
          type: integer
          description: >-
            The support level of the location (10 = production, 9 = test, 8 =
            deactivated).
          format: int32
          example: 10
        dateOfDecomissioning:
          type: string
          description: >-
            The date when the location will be or was decommissioned (if
            applicable).
          format: date-time
          nullable: true
          example: '2024-12-31T23:59:59Z'
        street:
          type: string
          description: The street name of the location address.
          nullable: true
          example: Hauptstraße
        streetNumber:
          type: string
          description: The street number of the location address.
          nullable: true
          example: '123'
        streetNumberSuffix:
          type: string
          description: >-
            Additional suffix for the street number (like apartment number,
            building section, etc.).
          nullable: true
          example: a
        postalCode:
          type: string
          description: The postal code of the location address.
          nullable: true
          example: '10115'
        city:
          type: string
          description: The city name of the location address.
          nullable: true
          example: Berlin
      additionalProperties: false
      description: >-
        Company data for German fiscal reporting, containing location and
        operational information.
    EmailVerificationProgressStatus:
      enum:
        - Created
        - Worker
        - Sending
        - Sent
        - Verified
        - Expired
        - VerifiedByInvitationToken
        - InvalidEmailAddress
        - Suspended
        - Error
      type: string
    ExportTypes:
      enum:
        - Journal_Archive_Json
        - DE_DSFinVK
        - DE_GoBD
        - AT_DEP_131_BAO
        - Transactions_CSV
        - AT_DEP_7_RKSV
        - SI_Export
        - DE_TSE_Export_Journal
        - PT_SAFT
        - FR_Fiscal
        - FR_Grand_Totals
      type: string
      description: >-
        Defines the type of export to execute. This will determine the overall
        download result.
    GetActiveUserResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        userProfile:
          $ref: '#/components/schemas/PublicUserProfile'
      additionalProperties: false
      description: >-
        The result object describing the result and possibly error during the
        current operation.
    GetCompanyTreeResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        rootNode:
          $ref: '#/components/schemas/CompanyTreeItem'
      additionalProperties: false
      description: >-
        The result object describing the result and possibly error during the
        current operation.
    GetCompanyUsersResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        users:
          type: array
          items:
            $ref: '#/components/schemas/CompanyUserPermissionInfo'
          description: A list of the Users who have access to the company
          nullable: true
        totalCount:
          type: integer
          description: the count of users who have any type of Permission for the company
          format: int32
          example: 12
      additionalProperties: false
    GetPublicCompanyContactsResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/PublicCompanyContact'
          description: a list of Contacts
          nullable: true
      additionalProperties: false
    GetPublicCompanyNotificationsResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        notifications:
          type: array
          items:
            $ref: '#/components/schemas/PublicNotification'
          description: A list of all notifications received for that company.
          nullable: true
      additionalProperties: false
      description: >-
        The result object for company-related notifications containing a list of
        notifications per register
    GetPublicExportsResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        tickets:
          type: array
          items:
            $ref: '#/components/schemas/PublicTicket'
          description: >-
            The list of  tickets available for company defined via the request
            route.
          nullable: true
      additionalProperties: false
      description: >-
        The result object describing the result and possibly error during the
        current operation.
    GetPublicProductsResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        products:
          type: array
          items:
            $ref: '#/components/schemas/PublicProduct'
          description: The list of available products
          nullable: true
      additionalProperties: false
      description: >-
        The result object describing the result and possibly error during the
        current operation.
    GetPublicPurchaseOverviewResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        purchaseEntries:
          type: array
          items:
            $ref: '#/components/schemas/PublicPurchaseOverview'
          description: "The the entries returned for the query. Each entry is a position of the regarding purchase, meaning that a purchase\r\nwith multiple items does have multiple rows with the same purchase head information."
          nullable: true
      additionalProperties: false
      description: >-
        The result object describing the result and possibly error during the
        current operation.
    GetPublicRegisterObjectResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        register:
          $ref: '#/components/schemas/PublicRegister'
      additionalProperties: false
      description: Result class for retrieving public register object details.
    ObjectState:
      enum:
        - Deactivated
        - Test
        - Productive
      type: string
    PermissionTestResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        hasPermission:
          type: boolean
      additionalProperties: false
    PublicCompany:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the company object.
          format: int32
          example: 12345
        parentEntityId:
          type: integer
          description: >-
            The ID of the object owning the current object (e.g. the company a
            location is located under).
          format: int32
          example: 1545
        name:
          type: string
          description: The name of the company.
          nullable: true
          example: Acme Corporation
        address:
          type: string
          description: The Address the object is located in (street and street number).
          nullable: true
          example: 123 Main Street
        city:
          type: string
          description: The name of the city the object is located in.
          nullable: true
          example: Berlin
        zip:
          type: string
          description: The zip / postal code the object is located in.
          nullable: true
          example: '10115'
        countryCode:
          type: string
          description: >-
            The ISO-2 country code of the address of the object (e.g. DE, FR or
            AT)
          nullable: true
          example: DE
        invoiceEmailAddress:
          type: string
          description: >-
            The invoice email address relevant for all nodes that receive
            invoice-emails (primarily company entries)
          nullable: true
          example: invoices@acmecorp.com
        userComment:
          type: string
          description: A custom comment set by users to further decribe the current node.
          nullable: true
          example: Main headquarters, established 1985
        state:
          type: string
          description: The State of the Object [Productive|Deactivated|Test]
          nullable: true
          example: Productive
        badge:
          type: string
          description: Badge for company
          nullable: true
          example: XVTGBLZVUG
        taxId:
          type: string
          nullable: true
        ignoreTaxId:
          type: boolean
          description: >-
            If set to true, the validation of the TaxId will be skipped. The
            TaxId will still be saved.
      additionalProperties: false
      description: >-
        Public data model representing company information exposed through the
        API.
    PublicCompanyContact:
      type: object
      properties:
        companyId:
          type: integer
          format: int32
        contactName:
          type: string
          nullable: true
        emailAddress:
          type: string
          nullable: true
        languageCode:
          type: string
          nullable: true
        contactType:
          $ref: '#/components/schemas/ContactType'
        emailAddressVerification:
          $ref: '#/components/schemas/EmailVerificationProgressStatus'
      additionalProperties: false
    PublicCompanyCountryProperties:
      type: object
      properties:
        dE_WIdNr:
          type: string
          description: >-
            The WIdNr (Wirtschafts-Identifikationsnummer) is a unique identifier
            for companies in Germany, similar to a tax ID.
          nullable: true
          example: DE123456789-00001
      additionalProperties: false
    PublicCompanyResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        company:
          $ref: '#/components/schemas/PublicCompany'
        companyCountryProperties:
          $ref: '#/components/schemas/PublicCompanyCountryProperties'
      additionalProperties: false
      description: Result wrapper for company operations
    PublicCompanySearchPublicCompanyObjectsResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        currentCount:
          type: integer
          description: The number of items in the current page.
          format: int32
          example: 1
        totalCount:
          type: integer
          description: >-
            The total number of available company objects for the dedicated
            method and query options.
          format: int32
          example: 1
        foundItems:
          type: array
          items:
            $ref: '#/components/schemas/PublicCompany'
          nullable: true
      additionalProperties: false
      description: >-
        The result object used when querying the company tree with certain
        criteria.
    PublicLocation:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the company object.
          format: int32
          example: 12345
        parentEntityId:
          type: integer
          description: >-
            The ID of the object owning the current object (e.g. the company a
            location is located under).
          format: int32
          example: 1545
        name:
          type: string
          description: The name of the company.
          nullable: true
          example: Acme Corporation
        address:
          type: string
          description: The Address the object is located in (street and street number).
          nullable: true
          example: 123 Main Street
        city:
          type: string
          description: The name of the city the object is located in.
          nullable: true
          example: Berlin
        zip:
          type: string
          description: The zip / postal code the object is located in.
          nullable: true
          example: '10115'
        countryCode:
          type: string
          description: >-
            The ISO-2 country code of the address of the object (e.g. DE, FR or
            AT)
          nullable: true
          example: DE
        invoiceEmailAddress:
          type: string
          description: >-
            The invoice email address relevant for all nodes that receive
            invoice-emails (primarily company entries)
          nullable: true
          example: invoices@acmecorp.com
        userComment:
          type: string
          description: A custom comment set by users to further decribe the current node.
          nullable: true
          example: Main headquarters, established 1985
        state:
          type: string
          description: The State of the Object [Productive|Deactivated|Test]
          nullable: true
          example: Productive
        locationIdentification:
          type: string
          nullable: true
      additionalProperties: false
      description: >-
        Public data model representing location information exposed through the
        API.
    PublicLocationResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        location:
          $ref: '#/components/schemas/PublicLocation'
      additionalProperties: false
      description: Result wrapper for location operations
    PublicLocationSearchPublicCompanyObjectsResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        currentCount:
          type: integer
          description: The number of items in the current page.
          format: int32
          example: 1
        totalCount:
          type: integer
          description: >-
            The total number of available company objects for the dedicated
            method and query options.
          format: int32
          example: 1
        foundItems:
          type: array
          items:
            $ref: '#/components/schemas/PublicLocation'
          nullable: true
      additionalProperties: false
      description: >-
        The result object used when querying the company tree with certain
        criteria.
    PublicNotification:
      type: object
      properties:
        registerNumber:
          type: string
          description: The register number associated with this notification.
          nullable: true
          example: 00000004ZP6
        eventCode:
          type: string
          description: The event code that identifies the type of notification.
          nullable: true
          example: TSE_ACTIVATED
        descriptionShort:
          type: string
          description: Information about the activation status.
          nullable: true
          example: TSE successfully activated
        descriptionLong:
          type: string
          description: Detailed description of the activation or event.
          nullable: true
          example: The TSE has been successfully activated and is ready for use
        initialTimestamp:
          type: string
          description: The timestamp when the notification was initially created.
          format: date-time
          example: '2024-01-15T10:30:00Z'
        companyId:
          type: integer
          description: The ID of the company associated with this notification.
          format: int32
          example: 1545
        companyName:
          type: string
          description: The name of the company associated with this notification.
          nullable: true
          example: ACME Store Berlin
      additionalProperties: false
      description: Represents a public notification from the efsta system.
    PublicOrganization:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the company object.
          format: int32
          example: 12345
        parentEntityId:
          type: integer
          description: >-
            The ID of the object owning the current object (e.g. the company a
            location is located under).
          format: int32
          example: 1545
        name:
          type: string
          description: The name of the company.
          nullable: true
          example: Acme Corporation
        address:
          type: string
          description: The Address the object is located in (street and street number).
          nullable: true
          example: 123 Main Street
        city:
          type: string
          description: The name of the city the object is located in.
          nullable: true
          example: Berlin
        zip:
          type: string
          description: The zip / postal code the object is located in.
          nullable: true
          example: '10115'
        countryCode:
          type: string
          description: >-
            The ISO-2 country code of the address of the object (e.g. DE, FR or
            AT)
          nullable: true
          example: DE
        invoiceEmailAddress:
          type: string
          description: >-
            The invoice email address relevant for all nodes that receive
            invoice-emails (primarily company entries)
          nullable: true
          example: invoices@acmecorp.com
        userComment:
          type: string
          description: A custom comment set by users to further decribe the current node.
          nullable: true
          example: Main headquarters, established 1985
        state:
          type: string
          description: The State of the Object [Productive|Deactivated|Test]
          nullable: true
          example: Productive
        badge:
          type: string
          description: >-
            Unique badge identifier for the organization used for external
            references and integrations.
          nullable: true
          example: XVTGBLZVUG
      additionalProperties: false
      description: >-
        Public data model representing organization information exposed through
        the API.
    PublicOrganizationResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        organization:
          $ref: '#/components/schemas/PublicOrganization'
      additionalProperties: false
      description: >-
        Result wrapper for organization operations containing the organization
        data and operation status.
    PublicOrganizationSearchPublicCompanyObjectsResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        currentCount:
          type: integer
          description: The number of items in the current page.
          format: int32
          example: 1
        totalCount:
          type: integer
          description: >-
            The total number of available company objects for the dedicated
            method and query options.
          format: int32
          example: 1
        foundItems:
          type: array
          items:
            $ref: '#/components/schemas/PublicOrganization'
          nullable: true
      additionalProperties: false
      description: >-
        The result object used when querying the company tree with certain
        criteria.
    PublicProduct:
      type: object
      properties:
        id:
          type: integer
          description: >-
            The internal ID that uniquely identifies the product entry in the
            efsta Cloud.
          format: int32
          example: 42
        name:
          type: string
          description: The name of the product.
          nullable: true
          example: fiskaly Cloud TSE
        descriptionShort:
          type: string
          description: A short description of the product.
          nullable: true
          example: Cloud-based Technical Security Equipment
        descriptionLong:
          type: string
          description: A more detailed description of the product.
          nullable: true
          example: >-
            A cloud-based TSE solution for German fiscal requirements, providing
            secure transaction recording and digital signature capabilities.
        warningText:
          type: string
          description: "A warning text used for showing warnings and information during the purchase process (e.g. about environmental requirements / protection, etc.).\r\nThese warnings need to be followed and taken care of to properly use some products (e.g. cloud TSEs in Germany)"
          nullable: true
          example: >-
            This product requires a stable internet connection and compliance
            with German fiscal regulations.
        countryCode:
          type: string
          description: "The country code the product is valid for. If product is not available in a certain country it might not make sense to actually purchase them\r\nfor a company in the country as it might not function properly."
          nullable: true
          example: DE
        priceOnce:
          type: number
          description: >-
            The one time price of the product (e.g. for hardware or one time
            fees like activation).
          format: double
          nullable: true
          example: 29.99
        priceReoccurring:
          type: number
          description: >-
            The reoccurring price of the product in case it has to be charged as
            a subscription or similar.
          format: double
          nullable: true
          example: 9.99
        imageLink:
          type: string
          description: A link to the image of the product.
          nullable: true
          example: https://cdn.efsta.com/products/fiskaly-tse.jpg
        supplier:
          type: string
          description: >-
            The supplier of the product (that is used to determine the correct
            handling of the product).
          nullable: true
          example: fiskaly
        amountLimit:
          type: integer
          description: "The limit of the amount that can be ordered of that item (if applicable). This can be used to prevent an invalid number\r\nof items to be ordered at once (e.g. when ordering Deutsche Fiskal Cloud TSE on company-level)."
          format: int32
          nullable: true
          example: 50
        amountSelectionType:
          type: integer
          description: "The type of selection allowed for the item amount. 1 = no amount assignment needed, 2 = location required (ID), 3 = TL/TT required (text), 4 = TL required (text).\r\nExample 1 - Deutsche Fiskal Cloud TSE (type 2): The AmountAssignment of the PurchaseItem with that product needs to have a valid location ID and the amount of TSEs for that location.\r\nExample 2 - efsta offline licenses per location (type 4): The AmountAssignment of the PurchaseItem with that product needs to have a valid location TL of the cash register that will use the license (e.g. 001)"
          format: int32
          example: 2
      additionalProperties: false
      description: >-
        A single product with all necessary details to plan and place a proper
        purchase request.
    PublicPurchaseOverview:
      type: object
      properties:
        purchaseId:
          type: integer
          description: The unique ID of the purchase as internally created.
          format: int32
          example: 12345
        purchaseKey:
          type: string
          description: >-
            The generated key that is more human readable and without any gaps
            in between all purchases.
          nullable: true
          example: PUR-2024-001
        purchaseReference:
          type: string
          description: >-
            The manually set purchase reference that has been set during
            purchase process.
          nullable: true
          example: ORDER-2024-001
        companyId:
          type: integer
          description: The ID of the company the purchase has been placed for.
          format: int32
          nullable: true
          example: 1545
        companyName:
          type: string
          description: The name of the purchase company.
          nullable: true
          example: ACME Store Berlin
        purchaserName:
          type: string
          description: >-
            The name of the purchaser or the company it has been purchased for
            if no name can be resolved (e.g. due to missing permissions).
          nullable: true
          example: John Doe
        shippingCompanyId:
          type: integer
          description: >-
            The company ID of the shipping location. This can be empty if the
            shipping information has been passed manually.
          format: int32
          nullable: true
          example: 1546
        shippingName:
          type: string
          description: The name of the shipping company.
          nullable: true
          example: ACME Store Berlin - Shipping
        invoiceCompanyId:
          type: integer
          description: >-
            The company ID of the company that should receive the invoice for
            the purchase.
          format: int32
          example: 1545
        currentInvoiceCompanyId:
          type: integer
          description: "The current company ID of the company that should receive the invoice for the purchase. This is different from the other invoice company ID\r\nin case the invoice receiver has been changed (via efsta support / partner management)."
          format: int32
          example: 1545
        invoiceName:
          type: string
          description: The name of the invoice company.
          nullable: true
          example: ACME Store Berlin
        creationUserId:
          type: integer
          description: The internal ID of the user that created and places the purchase.
          format: int32
          nullable: true
          example: 123
        creationUserName:
          type: string
          description: The name of the user that created and places the purchase.
          nullable: true
          example: John Doe
        purchaseDate:
          type: string
          description: The date and time the purchase has been created and placed on.
          format: date-time
          nullable: true
          example: '2024-01-15T10:30:00'
        supplier:
          type: string
          description: 'Product detail: The supplier of the current product.'
          nullable: true
          example: fiskaly
        productCode:
          type: string
          description: 'Product detail: The code of the current product'
          nullable: true
          example: FISK-TSE-CLOUD-001
        productName:
          type: string
          description: 'Product detail: The name of the current product'
          nullable: true
          example: fiskaly Cloud TSE
        quantity:
          type: integer
          description: 'Product detail: The quantity of the product for the current line.'
          format: int32
          example: 3
        priceOnce:
          type: number
          description: >-
            Product detail: The one-time price of the product (e.g. hardware or
            activation fees)
          format: double
          nullable: true
          example: 29.99
        priceReoccurring:
          type: number
          description: >-
            Product detail: The price of services that are reoccurring (e.g.
            SAAS products / subscriptions).
          format: double
          nullable: true
          example: 9.99
        state:
          type: string
          description: The state of the complete purchase.
          nullable: true
          example: COMPLETED
        stateInfo:
          type: string
          description: >-
            An additional information text for the state of the complete
            purchase.
          nullable: true
          example: Purchase successfully processed
        companyState:
          type: integer
          description: >-
            The current state of the company this purchase has been placed for
            (10 = production, 9 = test).
          format: int32
          nullable: true
          example: 10
        testOrder:
          type: boolean
          description: Defines whether this was a test purchase or not.
          example: false
        purchaserInfo:
          type: string
          description: Additional information about the purchaser if available.
          nullable: true
          example: Purchase made via API
        productNameTranslated:
          type: string
          description: The translated name of the product if available.
          nullable: true
          example: fiskaly Cloud TSE
      additionalProperties: false
      description: Overview information for a purchase transaction in the efsta system.
    PublicRegister:
      type: object
      properties:
        registerNumber:
          type: string
          description: >-
            The register number that uniquely identifies the cash register
            and/or EFR in the efsta Cloud.
          nullable: true
          example: 00000004ZP6
        parentEntityId:
          type: integer
          description: "The ID of the company object within the company tree the register is directly assigned to (e.g. the location , company\r\nor the organization for Multi-Company EFRs)"
          format: int32
          example: 1545
        countryCode:
          type: string
          description: "The ISO-2 country code used to identify the country-specific version of the underlying EFR. This is not\r\nnecessarily the same as the country of the company it is assigned to."
          nullable: true
          example: DE
        lastTL:
          type: string
          description: "Represents the TL (terminal location) identification that was last transmitted to the cloud (typically via\r\nthe last transaction data from the cash register software). In general, this is an internal identification\r\nof the location the EFR is operated in."
          nullable: true
          example: '001'
        lastTT:
          type: string
          description: "Represents the TT (transaction terminal) identification that was last transmitted to the cloud (typically via\r\nthe last transaction data from the cash register software). In general this is the internal identification of that\r\nspecific terminal within the current location."
          nullable: true
          example: '001'
        userComment:
          type: string
          description: "The user-defined comment used to better identify the register or describe the history, state or other important\r\nproperties of the cash register and its data."
          nullable: true
          example: Main cash register - Store entrance
        firstTransaction:
          type: integer
          description: >-
            An integer describing the date of the first transaction of that
            register (if applicable). Format: YYMMDDHH
          format: int32
          nullable: true
          example: 24011508
        lastTransaction:
          type: integer
          description: >-
            Public data model representing register information exposed through
            the API.
          format: int32
          nullable: true
          example: 24032315
        versionNumber:
          type: string
          description: Software Version of the Register
          nullable: true
          example: 2.5.2
        state:
          $ref: '#/components/schemas/ObjectState'
        isCloudEFR:
          type: boolean
          description: >-
            Defines whether the current EFR instance is a Cloud EFR or a
            sub-client / sub-register on one.
          example: true
        creationTimestamp:
          type: string
          description: Represents the timestamp the register has been created on.
          format: date-time
          nullable: true
          example: '2024-01-15T08:00:00Z'
      additionalProperties: false
      description: Represents a single entry from the pool of all available registers.
    PublicRegisterSearchPublicCompanyObjectsResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        currentCount:
          type: integer
          description: The number of items in the current page.
          format: int32
          example: 1
        totalCount:
          type: integer
          description: >-
            The total number of available company objects for the dedicated
            method and query options.
          format: int32
          example: 1
        foundItems:
          type: array
          items:
            $ref: '#/components/schemas/PublicRegister'
          nullable: true
      additionalProperties: false
      description: >-
        The result object used when querying the company tree with certain
        criteria.
    PublicRegisterUpdateSoftwareResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        registerNumber:
          type: string
          description: The number of the updated register.
          nullable: true
          example: 00000006ZP6
      additionalProperties: false
    PublicReportingDEState:
      type: object
      properties:
        guid:
          type: string
          description: The identifier of the ReportingState.
          nullable: true
        companyId:
          type: integer
          description: Gets or sets the CompanyId.
          format: int32
        creationTimestamp:
          type: string
          description: Gets or sets the CreationTimestamp.
          format: date-time
          nullable: true
        isNewest:
          type: boolean
          description: Flag if the current report is the newest.
        state:
          type: string
          description: Gets or sets the State.
          nullable: true
        sentTimestamp:
          type: string
          description: Gets or sets the SentTimestamp.
          format: date-time
          nullable: true
        sentEmail:
          type: string
          description: Gets or sets the SentEmail.
          nullable: true
        downloaded:
          type: boolean
          description: Flag hat shows whether the file was downloaded once.
        activeDevices:
          type: integer
          description: Gets or sets the number of ActiveDevices.
          format: int32
          nullable: true
        deactivatedDevices:
          type: integer
          description: Gets or sets the number of DeactivatedDevices.
          format: int32
          nullable: true
      additionalProperties: false
    PublicTicket:
      type: object
      properties:
        id:
          type: integer
          description: The unique identifier of the ticket.
          format: int32
          example: 12345
        companyId:
          type: integer
          description: The ID of the company this ticket belongs to.
          format: int32
          example: 1001
        creatorUserId:
          type: integer
          description: The ID of the user who created this ticket.
          format: int32
          example: 42
        receiverUserId:
          type: integer
          description: The ID of the user who received this ticket.
          format: int32
          example: 43
        dataRangeFrom:
          type: string
          description: Start date of the data range for the export.
          format: date-time
          example: '2024-01-01T00:00:00'
        dataRangeTo:
          type: string
          description: End date of the data range for the export.
          format: date-time
          example: '2024-01-31T23:59:59'
        validFrom:
          type: string
          description: Timestamp from when the ticket is valid.
          format: date-time
          example: '2024-01-15T10:30:00Z'
        validTo:
          type: string
          description: Timestamp until when the ticket is valid/available for download.
          format: date-time
          nullable: true
          example: '2024-02-15T10:30:00Z'
        created:
          type: string
          description: Timestamp when the ticket was created.
          format: date-time
          example: '2024-01-15T10:30:00Z'
        ticketNr:
          type: string
          description: The ticket number that uniquely identifies the export request.
          nullable: true
          example: EXP-2024-001234
        finished:
          type: string
          description: Timestamp when the export was finished (if applicable).
          format: date-time
          nullable: true
          example: '2024-01-15T10:35:00Z'
        userInfo:
          type: string
          description: Additional user information or comments about this ticket.
          nullable: true
          example: Monthly transaction export
        deleted:
          type: boolean
          description: Indicates whether this ticket has been deleted/expired.
          example: false
        exportType:
          type: string
          description: The type of export (e.g., "PDF", "CSV", "XML").
          nullable: true
          example: PDF
        status:
          type: string
          description: The status of the ticket.
          nullable: true
          example: Success
      additionalProperties: false
    PublicUserProfile:
      type: object
      properties:
        userId:
          type: integer
          description: The unique ID of the user.
          format: int32
          example: 123
        realname:
          type: string
          description: >-
            The real name of the user profile, typically containing a human
            readable text describing the user (i.e. the actual name of a person
            or the purpose of the API key)
          nullable: true
          example: John Doe
        emailAddress:
          type: string
          description: >-
            The registered email address of the user profile, e.g. for needed
            communication.
          nullable: true
          example: john.doe@partner-company.com
        preferredLanguage:
          type: string
          description: >-
            The language code used for communication and translation (whenever
            translation is available).
          nullable: true
          example: en
      additionalProperties: false
      description: >-
        A single user profile describing an existing user in the efsta cloud
        system.
    PurchaseItem:
      type: object
      properties:
        id:
          type: integer
          description: "The efsta ID of the product that should be purchases. This ID can be found in the GetProducts route of the public controller where all available options for a specific\r\ncompany are listed with all details."
          format: int32
          example: 42
        amount:
          type: integer
          description: >-
            The number of times this item has to be purchased for the current
            purchase process.
          format: int32
          example: 3
        amountAssignment:
          type: object
          additionalProperties:
            type: integer
            format: int32
          description: >-
            A mapping sometimes required for some items and allows the precise
            assignment of a certain amount of the ordered products to be
            assigned e.g. to a location.
          nullable: true
          example:
            LOC-001: 2
            LOC-002: 1
      additionalProperties: false
      description: A single item used in the purchase process.
    ReportingDE:
      type: object
      properties:
        registerNumber:
          type: string
          nullable: true
        supportLevel:
          type: integer
          format: int32
        type:
          type: integer
          format: int32
        software:
          type: string
          nullable: true
        serial:
          type: string
          nullable: true
        manufacturer:
          type: string
          nullable: true
        model:
          type: string
          nullable: true
        purchaseDate:
          type: string
          format: date-time
        activationDate:
          type: string
          format: date-time
          nullable: true
        deactivationDate:
          type: string
          format: date-time
          nullable: true
        fiscalUnitSerial:
          type: string
          nullable: true
        fiscalUnitType:
          type: integer
          format: int32
        fiscalUnitManufacturer:
          type: string
          nullable: true
        fiscalUnitActivationDate:
          type: string
          format: date-time
          nullable: true
        bsiid:
          type: string
          nullable: true
        isExternalRegister:
          type: boolean
      additionalProperties: false
    ReportingDEContact:
      type: object
      properties:
        companyId:
          type: integer
          format: int32
        tin:
          type: string
          nullable: true
        idNr:
          type: string
          nullable: true
        salutation:
          type: integer
          format: int32
          nullable: true
        lastName:
          type: string
          nullable: true
        firstName:
          type: string
          nullable: true
        dateOfBirth:
          type: string
          format: date-time
          nullable: true
        addressType:
          type: integer
          format: int32
          nullable: true
        contactType:
          type: integer
          format: int32
          nullable: true
        street:
          type: string
          nullable: true
        streetNumber:
          type: string
          nullable: true
        postalCode:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        country:
          type: string
          nullable: true
        wIdNr:
          type: string
          nullable: true
        companyName:
          type: string
          nullable: true
        legalForm:
          type: integer
          format: int32
          nullable: true
        streetNumberSuffix:
          type: string
          nullable: true
        addressSuffix:
          type: string
          nullable: true
      additionalProperties: false
    ResultBase:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
      additionalProperties: false
      description: >-
        Represents the base result object of any request response and contains a
        set of general error and success handling properties.
    SearchPublicCompaniesRequest:
      type: object
      properties:
        parentEntityId:
          type: integer
          description: >-
            Optional company ID to get all entries for. If set, all direct
            children of that specified company will be filtered.
          format: int32
          nullable: true
          example: 1545
        createdAfter:
          type: string
          description: >-
            Optional filter that allows filtering for companies that have been
            created after a certain threshold (format: ISO-8601)
          format: date-time
          nullable: true
          example: '2023-01-01T00:00:00Z'
        hasUserComment:
          type: boolean
          description: >-
            Filter to get company objects that either have or do not have a
            valid comment set by the user. If not provided (or with null) the
            filter will entirely be ignored.
          nullable: true
          example: true
        hasDeactivateAfterTimestamp:
          type: boolean
          description: >-
            Filter to get company objects that either have or do not have a
            predefined deactivation date set. If not provided (or with null) the
            filter will entirely be ignored.
          nullable: true
          example: false
        searchText:
          type: string
          description: "A search text that will be used\tto search for companies containing that text ion relevant fields (name, comment, etc.)."
          nullable: true
          example: Berlin
        orderByField:
          type: string
          description: >-
            Defines field name by which to order. Can be left empty to apply
            default ordering by name. See company results for possible fields to
            order by.
          nullable: true
          example: Name
        orderDescending:
          type: boolean
          description: >-
            Defines whether the order by criteria is used for descending or
            ascending order by process.
          example: false
        state:
          type: string
          description: The State of the Object [Productive|Deactivated|Test]
          nullable: true
          example: Productive
        offset:
          type: integer
          description: >-
            Defines the number of items to skip when loading transactions. This
            can be used for paging requests.
          format: int32
          nullable: true
          example: 0
        limit:
          type: integer
          description: >-
            Defines the number of items to load. This can be used for paging
            requests. Can be between 0 (disabled) and 250. If no info is passed,
            100 will be used as the default behavior.
          format: int32
          nullable: true
          example: 50
        countryCode:
          type: string
          description: >-
            Optional filter for ISO-2 country code (e.g. DE, FR, AT) of the
            company objects to filter.
          nullable: true
          example: AT
      additionalProperties: false
      description: >-
        A request used to search company objects in the company tree of the
        efsta Portal.
    SearchPublicLocationsRequest:
      type: object
      properties:
        parentEntityId:
          type: integer
          description: >-
            Optional company ID to get all entries for. If set, all direct
            children of that specified company will be filtered.
          format: int32
          nullable: true
          example: 1545
        createdAfter:
          type: string
          description: >-
            Optional filter that allows filtering for companies that have been
            created after a certain threshold (format: ISO-8601)
          format: date-time
          nullable: true
          example: '2023-01-01T00:00:00Z'
        hasUserComment:
          type: boolean
          description: >-
            Filter to get company objects that either have or do not have a
            valid comment set by the user. If not provided (or with null) the
            filter will entirely be ignored.
          nullable: true
          example: true
        hasDeactivateAfterTimestamp:
          type: boolean
          description: >-
            Filter to get company objects that either have or do not have a
            predefined deactivation date set. If not provided (or with null) the
            filter will entirely be ignored.
          nullable: true
          example: false
        searchText:
          type: string
          description: "A search text that will be used\tto search for companies containing that text ion relevant fields (name, comment, etc.)."
          nullable: true
          example: Berlin
        orderByField:
          type: string
          description: >-
            Defines field name by which to order. Can be left empty to apply
            default ordering by name. See company results for possible fields to
            order by.
          nullable: true
          example: Name
        orderDescending:
          type: boolean
          description: >-
            Defines whether the order by criteria is used for descending or
            ascending order by process.
          example: false
        state:
          type: string
          description: The State of the Object [Productive|Deactivated|Test]
          nullable: true
          example: Productive
        offset:
          type: integer
          description: >-
            Defines the number of items to skip when loading transactions. This
            can be used for paging requests.
          format: int32
          nullable: true
          example: 0
        limit:
          type: integer
          description: >-
            Defines the number of items to load. This can be used for paging
            requests. Can be between 0 (disabled) and 250. If no info is passed,
            100 will be used as the default behavior.
          format: int32
          nullable: true
          example: 50
        countryCode:
          type: string
          description: >-
            Optional filter for ISO-2 country code (e.g. DE, FR, AT) of the
            company objects to filter.
          nullable: true
          example: DE
      additionalProperties: false
      description: >-
        A request used to search locations objects in the company tree of the
        efsta Portal.
    SearchPublicOrganizationsRequest:
      type: object
      properties:
        parentEntityId:
          type: integer
          description: >-
            Optional company ID to get all entries for. If set, all direct
            children of that specified company will be filtered.
          format: int32
          nullable: true
          example: 1545
        createdAfter:
          type: string
          description: >-
            Optional filter that allows filtering for companies that have been
            created after a certain threshold (format: ISO-8601)
          format: date-time
          nullable: true
          example: '2023-01-01T00:00:00Z'
        hasUserComment:
          type: boolean
          description: >-
            Filter to get company objects that either have or do not have a
            valid comment set by the user. If not provided (or with null) the
            filter will entirely be ignored.
          nullable: true
          example: true
        hasDeactivateAfterTimestamp:
          type: boolean
          description: >-
            Filter to get company objects that either have or do not have a
            predefined deactivation date set. If not provided (or with null) the
            filter will entirely be ignored.
          nullable: true
          example: false
        searchText:
          type: string
          description: "A search text that will be used\tto search for companies containing that text ion relevant fields (name, comment, etc.)."
          nullable: true
          example: Berlin
        orderByField:
          type: string
          description: >-
            Defines field name by which to order. Can be left empty to apply
            default ordering by name. See company results for possible fields to
            order by.
          nullable: true
          example: Name
        orderDescending:
          type: boolean
          description: >-
            Defines whether the order by criteria is used for descending or
            ascending order by process.
          example: false
        state:
          type: string
          description: The State of the Object [Productive|Deactivated|Test]
          nullable: true
          example: Productive
        offset:
          type: integer
          description: >-
            Defines the number of items to skip when loading transactions. This
            can be used for paging requests.
          format: int32
          nullable: true
          example: 0
        limit:
          type: integer
          description: >-
            Defines the number of items to load. This can be used for paging
            requests. Can be between 0 (disabled) and 250. If no info is passed,
            100 will be used as the default behavior.
          format: int32
          nullable: true
          example: 50
      additionalProperties: false
      description: >-
        A request used to search organizations in the company tree of the efsta
        Portal.
    SearchPublicRegistersRequest:
      type: object
      properties:
        parentEntityId:
          type: integer
          description: >-
            Optional company ID to get all entries for. If set, all direct
            children of that specified company will be filtered.
          format: int32
          nullable: true
          example: 1545
        createdAfter:
          type: string
          description: >-
            Optional filter that allows filtering for companies that have been
            created after a certain threshold (format: ISO-8601)
          format: date-time
          nullable: true
          example: '2023-01-01T00:00:00Z'
        hasUserComment:
          type: boolean
          description: >-
            Filter to get company objects that either have or do not have a
            valid comment set by the user. If not provided (or with null) the
            filter will entirely be ignored.
          nullable: true
          example: true
        hasDeactivateAfterTimestamp:
          type: boolean
          description: >-
            Filter to get company objects that either have or do not have a
            predefined deactivation date set. If not provided (or with null) the
            filter will entirely be ignored.
          nullable: true
          example: false
        searchText:
          type: string
          description: "A search text that will be used\tto search for companies containing that text ion relevant fields (name, comment, etc.)."
          nullable: true
          example: Berlin
        orderByField:
          type: string
          description: >-
            Defines field name by which to order. Can be left empty to apply
            default ordering by name. See company results for possible fields to
            order by.
          nullable: true
          example: Name
        orderDescending:
          type: boolean
          description: >-
            Defines whether the order by criteria is used for descending or
            ascending order by process.
          example: false
        state:
          type: string
          description: The State of the Object [Productive|Deactivated|Test]
          nullable: true
          example: Productive
        offset:
          type: integer
          description: >-
            Defines the number of items to skip when loading transactions. This
            can be used for paging requests.
          format: int32
          nullable: true
          example: 0
        limit:
          type: integer
          description: >-
            Defines the number of items to load. This can be used for paging
            requests. Can be between 0 (disabled) and 250. If no info is passed,
            100 will be used as the default behavior.
          format: int32
          nullable: true
          example: 50
        countryCode:
          type: string
          description: >-
            Optional filter for ISO-2 country code (e.g. DE, FR, AT) of the
            registers to filter. (e.g. to get a list of registers of a specific
            country).
          nullable: true
        tl:
          type: string
          description: "Optional filter for specific TL (location identification) values. If provided, the content of LastTL (the last known location identification of that register)\r\nhas to match. This is case insensitive."
          nullable: true
        tt:
          type: string
          description: "Optional filter for specific Tt (terminal / cash register identification) values. If provided, the content of LastTT (the last known terminal / cash register \r\nidentification of that register) has to match. This is case insensitive."
          nullable: true
        firstTransactionAfter:
          type: string
          description: >-
            Optional filter to limit the list to registers that have made the
            first transaction after the given timestamp (format: ISO-8601).
          format: date-time
          nullable: true
        firstTransactionBefore:
          type: string
          description: >-
            Optional filter to limit the list to registers that have made the
            first transaction before the given timestamp (format: ISO-8601).
          format: date-time
          nullable: true
        lastTransactionAfter:
          type: string
          description: >-
            Optional filter to limit the list to registers that have made the
            last transaction after the given timestamp (format: ISO-8601).
          format: date-time
          nullable: true
        lastTransactionBefore:
          type: string
          description: >-
            Optional filter to limit the list to registers that have made the
            last transaction before the given timestamp (format: ISO-8601).
          format: date-time
          nullable: true
      additionalProperties: false
      description: >-
        A request object used to execute specific search operations for the
        register list.
    StartPublicExportRequest:
      required:
        - exportType
        - from
        - till
      type: object
      properties:
        registerNumber:
          type: string
          description: The register number to start the export for.
          nullable: true
          example: 000000011Z3
        from:
          type: string
          description: >-
            timestamp used to limit the export for (starting with data from that
            timestamp onwards). Only full dates are supported, not any day of
            time.
          format: date-time
          example: '2024-01-01T00:00:00'
        till:
          type: string
          description: >-
            timestamp used to limit the export for (stopping with data until
            that timestamp). Only full dates are supported, not any day of time.
          format: date-time
          example: '2024-12-31T23:59:59'
        exportType:
          $ref: '#/components/schemas/ExportTypes'
        externalRecipientEmail:
          type: string
          description: Email address of the External recipient of the export.
          nullable: true
          example: external@example.com
      additionalProperties: false
      description: >-
        The request object used to start a public export for a specific
        register.
    StartPublicExportResult:
      type: object
      properties:
        success:
          type: boolean
          description: >-
            Defines whether the request has been processed successfully or not.
            If ```true```, the other error properties will typically not be
            provided.
          example: true
        errorCode:
          type: string
          description: >-
            Specifies the type of error that happened during execution of the
            actual request.
          nullable: true
          example: null
        errorMessage:
          type: string
          description: >-
            Contains a brief description about what happened in the request
            handling process that resulted in the given
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
          nullable: true
          example: null
        errorMessageTranslated:
          type: string
          description: >-
            Contains a translated version of the error message that has been
            defined for the
            Portal.API.Models.PublicModels.V2.Base.ResultBase.ErrorCode
            property.
          nullable: true
          example: null
        validationErrors:
          type: object
          additionalProperties: false
          description: Validation Errors for each Property.
          nullable: true
        ticketNr:
          type: string
          description: The ticket number representing the export created.
          nullable: true
          example: ACCB35183AEF9544B225CF78BBF4399A
        password:
          type: string
          description: "The randomly generated password (30 characters) used to authenticate access to the export.\r\nThis password, combined with the ticket number, allows anonymous download of the export file."
          nullable: true
          example: Kj8mP2qR5wL9xN3vB7zT4yC6hF1
      additionalProperties: false
      description: >-
        The result object describing the result and possibly error during the
        current operation.
    UpdatePublicCompanyRequest:
      type: object
      properties:
        name:
          type: string
          description: Represents the name of the object.
          nullable: true
        address:
          type: string
          description: The Address the object is located in (street and street number).
          nullable: true
          example: 123 Main Street
        city:
          type: string
          description: The name of the city the object is located in.
          nullable: true
          example: Berlin
        zip:
          type: string
          description: The zip / postal code the object is located in.
          nullable: true
          example: '10115'
        countryCode:
          type: string
          description: >-
            The ISO-2 country code of the address of the object (e.g. DE, FR or
            AT)
          nullable: true
          example: DE
        invoiceEmailAddress:
          type: string
          description: >-
            The invoice email address relevant for all nodes that receive
            invoice-emails (primarily company entries)
          nullable: true
          example: invoices@acmecorp.com
        userComment:
          type: string
          description: A custom comment set by users to further decribe the current node.
          nullable: true
          example: Main headquarters, established 1985
        state:
          type: string
          description: "Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE!\r\nValid values: \"Productive\", \"Deactivated\", \"Test\""
          nullable: true
          example: Productive
        countryProperties:
          $ref: '#/components/schemas/PublicCompanyCountryProperties'
        taxId:
          type: string
          description: "The tax ID (also known as the ECI / external company identification) that is typically the EU tax ID (USt-ID, UID, etc.) of that company.\r\nThis can only be changed if the company's IgnoreEci flag is set to true in the database."
          nullable: true
          example: DE999999999
      additionalProperties: false
      description: The request object used to update a company via the public controller.
    UpdatePublicLocationRequest:
      type: object
      properties:
        name:
          type: string
          description: Represents the name of the object.
          nullable: true
        address:
          type: string
          description: The Address the object is located in (street and street number).
          nullable: true
          example: 123 Main Street
        city:
          type: string
          description: The name of the city the object is located in.
          nullable: true
          example: Berlin
        zip:
          type: string
          description: The zip / postal code the object is located in.
          nullable: true
          example: '10115'
        countryCode:
          type: string
          description: >-
            The ISO-2 country code of the address of the object (e.g. DE, FR or
            AT)
          nullable: true
          example: DE
        invoiceEmailAddress:
          type: string
          description: >-
            The invoice email address relevant for all nodes that receive
            invoice-emails (primarily company entries)
          nullable: true
          example: invoices@acmecorp.com
        userComment:
          type: string
          description: A custom comment set by users to further decribe the current node.
          nullable: true
          example: Main headquarters, established 1985
        state:
          type: string
          description: "Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE!\r\nValid values: \"Productive\", \"Deactivated\", \"Test\""
          nullable: true
          example: Productive
        locationIdentification:
          type: string
          description: "The identification of the location within the company (e.g. the location number, a unique identifier) Can contain upper and lower case characters as\r\nwell as numbers and special characters -+<>#.,=."
          nullable: true
          example: LOC-001
      additionalProperties: false
      description: The request object used to update a location via the public controller.
    UpdatePublicOrganizationRequest:
      type: object
      properties:
        name:
          type: string
          description: Represents the name of the object.
          nullable: true
        invoiceEmailAddress:
          type: string
          description: >-
            The invoice email address relevant for all nodes that receive
            invoice-emails (primarily company entries)
          nullable: true
          example: invoices@acmecorp.com
        userComment:
          type: string
          description: A custom comment set by users to further decribe the current node.
          nullable: true
          example: Main headquarters, established 1985
        state:
          type: string
          description: "Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE!\r\nValid values: \"Productive\", \"Deactivated\", \"Test\""
          nullable: true
          example: Productive
        countryProperties:
          $ref: '#/components/schemas/PublicCompanyCountryProperties'
        address:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        zip:
          type: string
          nullable: true
        countryCode:
          type: string
          nullable: true
      additionalProperties: false
      description: >-
        The request object used to update an organization via the public
        controller.
  securitySchemes:
    api_key:
      type: apiKey
      description: Authorization via API key
      name: api_key
      in: header
security:
  - api_key: []
tags:
  - name: 1.Organization
    description: >-
      Endpoints for managing organizational structures and organization of the
      entire company structure
  - name: 2.Company
    description: >-
      Endpoints for managing companies and their specific information such as
      tax numbers and address data
  - name: 3.Location
    description: >-
      Endpoints for managing locations within a company where cash registers are
      operated
  - name: 4.Register
    description: Endpoints for managing cash registers and fiscal units within locations
  - name: 5.Purchase
    description: Endpoints for managing orders and purchasing products and licenses
  - name: 6.Export
    description: Endpoints for managing export operations and retrieving exported data
  - name: 7.Fiscal
    description: >-
      Endpoints for managing fiscal units and tax data in the context of
      fiscalization
  - name: 8.User
    description: Endpoints for managing users and their permissions
  - name: 9.Tools
    description: Utility endpoints and tools for various administration tasks and utilities
