Download OpenAPI specification:Download
✅ 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.
Endpoints for managing organizational structures and organization of the entire company structure
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.
🔒 Permissions: ManageCompany permission on the Organization identified via ownerOrganizationId in the request body.
🔴 Required Fields:
parentEntityId: ID of the parent Organization (minimum value: 2)
name: Organization name (2-1000 characters)
🔵 Optional Fields:
address: Street address (max 1000 characters)
city: City name (max 1000 characters)
zip: Postal code (max 50 characters)
countryCode: ISO-2 country code (exactly 2 characters, e.g., "DE", "AT", "FR")
invoiceEmailAddress: Email for invoice notifications (valid email format, max 100 characters)
userComment: Custom description (max 2000 characters)
state: Organization state - "Productive" (default) or "Test"
📝 Important Notes:
The request body containing all properties required for organization creation. Must include ownerOrganizationId, name, and optional address information.
| parentEntityId | integer <int32> Represents the unique identifier of the company that owns the object. |
| name | string or null Represents the name of the object. |
| invoiceEmailAddress | string or null The invoice email address relevant for all nodes that receive invoice-emails (primarily company entries) |
| userComment | string or null A custom comment set by users to further decribe the current node. |
| state | string or null Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE! Valid values: "Productive", "Test" |
| address | string or null |
| city | string or null |
| zip | string or null |
| countryCode | string or null |
{- "parentEntityId": 3434,
- "name": "string",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "address": "string",
- "city": "string",
- "zip": "string",
- "countryCode": "string"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "organization": {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "badge": "XVTGBLZVUG"
}
}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.
🔒 Permissions: ManageCompany on the organization to update.
🔴 Required Fields:
name: Organization name (2-1000 characters)🔵 Optional Fields:
address: Street address (max 1000 characters)
city: City name (max 1000 characters)
zip: Postal code (max 50 characters)
countryCode: ISO-2 country code (exactly 2 characters, e.g., "DE", "AT", "FR")
invoiceEmailAddress: Email for invoice notifications (valid email format, max 100 characters)
userComment: Custom description (max 2000 characters)
state: Organization state - "Productive", "Test", or "Deactivated"
📝 Important Notes:
| organizationId required | integer <int32> The unique identifier of the organization to update (minimum value: 2). |
The request body containing all properties to update. All properties will be updated, so include all current values.
| name | string or null Represents the name of the object. |
| invoiceEmailAddress | string or null The invoice email address relevant for all nodes that receive invoice-emails (primarily company entries) |
| userComment | string or null A custom comment set by users to further decribe the current node. |
| state | string or null Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE! Valid values: "Productive", "Deactivated", "Test" |
object (PublicCompanyCountryProperties) | |
| address | string or null |
| city | string or null |
| zip | string or null |
| countryCode | string or null |
{- "name": "string",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "countryProperties": {
- "dE_WIdNr": "DE123456789-00001"
}, - "address": "string",
- "city": "string",
- "zip": "string",
- "countryCode": "string"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "organization": {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "badge": "XVTGBLZVUG"
}
}Retrieves a single organization by its unique identifier. 🔒 Permissions: ReadCompany permission on the organization identified via the given ID.
📝 Important Notes:
| organizationId required | integer <int32> The unique identifier of the organization to retrieve (minimum value: 2). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "organization": {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "badge": "XVTGBLZVUG"
}
}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.
🔒 Permissions: ReadCompany permission is required for each organization to appear in the search results.
📝 Search Parameters:
parentEntityId: Filter by parent Organization (optional, minimum value: 2)
createdAfter: Filter by creation date (optional, ISO-8601 format)
hasUserComment: Filter by presence of user comments (optional, boolean)
hasDeactivateAfterTimestamp: Filter by deactivation date presence (optional, boolean)
searchText: Text search across name, comment, and other fields (optional, max 1000 characters)
state: Filter by organization state - "Productive", "Test", or "Deactivated" (optional)
orderByField: Sort field name (optional, default: "name")
orderDescending: Sort direction (optional, default: false for ascending)
offset: Number of items to skip for pagination (optional, minimum: 0)
limit: Number of items to return (optional, range: 0-250, default: 100)
📝 Important Notes:
The search request object containing filter criteria, pagination settings, and sorting options for querying organizations.
| parentEntityId | integer or null <int32> Optional company ID to get all entries for. If set, all direct children of that specified company will be filtered. |
| createdAfter | string or null <date-time> Optional filter that allows filtering for companies that have been created after a certain threshold (format: ISO-8601) |
| hasUserComment | boolean or null 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. |
| hasDeactivateAfterTimestamp | boolean or null 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. |
| searchText | string or null A search text that will be used to search for companies containing that text ion relevant fields (name, comment, etc.). |
| orderByField | string or null 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. |
| orderDescending | boolean Defines whether the order by criteria is used for descending or ascending order by process. |
| state | string or null The State of the Object [Productive|Deactivated|Test] |
| offset | integer or null <int32> Defines the number of items to skip when loading transactions. This can be used for paging requests. |
| limit | integer or null <int32> 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. |
{- "parentEntityId": 1545,
- "createdAfter": "2023-01-01T00:00:00Z",
- "hasUserComment": true,
- "hasDeactivateAfterTimestamp": false,
- "searchText": "Berlin",
- "orderByField": "Name",
- "orderDescending": false,
- "state": "Productive",
- "offset": 0,
- "limit": 50
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "currentCount": 1,
- "totalCount": 1,
- "foundItems": [
- {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "badge": "XVTGBLZVUG"
}
]
}Endpoints for managing companies and their specific information such as tax numbers and address data
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.
🔒 Permissions: ManageCompany permission on the organization identified via parentEntityId in the request body.
🔴 Required Fields:
parentEntityId: ID of the parent organization (minimum value: 2)
name: Company name (2-1000 characters)
taxId: EU tax ID/ECI (4-40 characters, e.g., "DE999999999")
address: Street address (max 1000 characters)
city: City name (max 1000 characters)
zip: Postal code (max 50 characters)
countryCode: ISO-2 country code (exactly 2 characters, e.g., "DE", "AT", "FR")
🔵 Optional Fields:
invoiceEmailAddress: Email for invoice notifications (valid email format, max 100 characters)
userComment: Custom description (max 2000 characters)
state: Company state - "Productive" (default) or "Test"
ignoreTaxId: If set to true, the validation of the TaxId will be skipped. The TaxId will still be saved.
countryProperties: Additional country-specific company data (e.g. DE_WIdNr for the German Wirtschafts-Identifikationsnummer). See "PublicCompanyCountryProperties" for available fields.
📝 Important Notes:
The request body containing all properties required for company creation. Must include parentEntityId, name, taxId, and optional address information.
| parentEntityId | integer <int32> Represents the unique identifier of the company that owns the object. |
| name | string or null Represents the name of the object. |
| address | string or null The Address the object is located in (street and street number). |
| city | string or null The name of the city the object is located in. |
| zip | string or null The zip / postal code the object is located in. |
| countryCode | string or null The ISO-2 country code of the address of the object (e.g. DE, FR or AT) |
| invoiceEmailAddress | string or null The invoice email address relevant for all nodes that receive invoice-emails (primarily company entries) |
| userComment | string or null A custom comment set by users to further decribe the current node. |
| state | string or null Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE! Valid values: "Productive", "Test" |
object (PublicCompanyCountryProperties) | |
| taxId | string or null 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. This is legally required and will be validated whenever possible / needed by efsta. |
| ignoreTaxId | boolean If set to true, the validation of the TaxId will be skipped. The TaxId will still be saved. |
{- "parentEntityId": 3434,
- "name": "string",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "countryProperties": {
- "dE_WIdNr": "DE123456789-00001"
}, - "taxId": "DE999999999",
- "ignoreTaxId": false
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "company": {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "badge": "XVTGBLZVUG",
- "taxId": "string",
- "ignoreTaxId": true
}, - "companyCountryProperties": {
- "dE_WIdNr": "DE123456789-00001"
}
}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.
🔒 Permissions: ManageCompany permission on the company to update.
🔴 Required Fields:
name: Company name (2-1000 characters)
address: Street address (max 1000 characters)
city: City name (max 1000 characters)
zip: Postal code (max 50 characters)
countryCode: ISO-2 country code (exactly 2 characters)
🔵 Optional Fields:
invoiceEmailAddress: Email for invoice notifications (valid email format, max 100 characters)
userComment: Custom description (max 2000 characters)
state: Company state - "Productive", "Test", or "Deactivated"
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
countryProperties: Additional country-specific company data (e.g. DE_WIdNr for the German Wirtschafts-Identifikationsnummer). See "PublicCompanyCountryProperties" for available fields.
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to update (minimum value: 2). |
The request body containing all properties to update. All properties will be updated, so include all current values.
| name | string or null Represents the name of the object. |
| address | string or null The Address the object is located in (street and street number). |
| city | string or null The name of the city the object is located in. |
| zip | string or null The zip / postal code the object is located in. |
| countryCode | string or null The ISO-2 country code of the address of the object (e.g. DE, FR or AT) |
| invoiceEmailAddress | string or null The invoice email address relevant for all nodes that receive invoice-emails (primarily company entries) |
| userComment | string or null A custom comment set by users to further decribe the current node. |
| state | string or null Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE! Valid values: "Productive", "Deactivated", "Test" |
object (PublicCompanyCountryProperties) | |
| taxId | string or null 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. This can only be changed if the company's IgnoreEci flag is set to true in the database. |
{- "name": "string",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "countryProperties": {
- "dE_WIdNr": "DE123456789-00001"
}, - "taxId": "DE999999999"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "company": {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "badge": "XVTGBLZVUG",
- "taxId": "string",
- "ignoreTaxId": true
}, - "companyCountryProperties": {
- "dE_WIdNr": "DE123456789-00001"
}
}Retrieves a single company by its unique identifier. Returns complete company information
🔒 Permissions: ReadCompany permission on the company identified via the given ID.
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to retrieve (minimum value: 2). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "company": {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "badge": "XVTGBLZVUG",
- "taxId": "string",
- "ignoreTaxId": true
}, - "companyCountryProperties": {
- "dE_WIdNr": "DE123456789-00001"
}
}Deactivates a company and all its subordinate entities including registers, locations, and fiscal units. The process executes in a specific order to ensure proper shutdown of all connected systems.
🔒 Permissions: ManageCompany permission required for the specified company.
📝 Deactivation Process:
Immediate deactivation: If no year specified, company is deactivated immediately
Scheduled deactivation: If year specified, deactivation occurs on December 31st at 23:59:59
Subordinate entities: All locations, registers, and fiscal units are deactivated
Fiscal units: Terminated after notice period (unless forceSubDeactivation is true)
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to deactivate (minimum value: 2). |
| deactivateAfterYear | integer <int32> Optional year for scheduled deactivation (executed on December 31st at 23:59:59). Must be current year or later. |
| forceSubDeactivation | boolean Optional flag to force immediate deactivation of all subordinate entities without waiting for notice periods. |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { }
}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.
🔒 Permissions: ReadCompany permission is required for each company to appear in the search results.
📝 Search Parameters:
ParentEntityId: Filter by parent organization (optional, minimum value: 2)
createdAfter: Filter by creation date (optional, ISO-8601 format)
hasUserComment: Filter by presence of user comments (optional, boolean)
hasDeactivateAfterTimestamp: Filter by deactivation date presence (optional, boolean)
searchText: Text search across name, comment, and other fields (optional, max 1000 characters)
state: Filter by company state - "Productive", "Test", or "Deactivated" (optional)
countryCode: Filter by ISO-2 country code (optional, exactly 2 characters, e.g., "DE", "AT", "FR")
orderByField: Sort field name (optional, default: "name")
orderDescending: Sort direction (optional, default: false for ascending)
offset: Number of items to skip for pagination (optional, minimum: 0)
limit: Number of items to return (optional, range: 0-250, default: 100)
📝 Important Notes:
The search request object containing filter criteria, pagination settings, and sorting options for querying companies.
| parentEntityId | integer or null <int32> Optional company ID to get all entries for. If set, all direct children of that specified company will be filtered. |
| createdAfter | string or null <date-time> Optional filter that allows filtering for companies that have been created after a certain threshold (format: ISO-8601) |
| hasUserComment | boolean or null 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. |
| hasDeactivateAfterTimestamp | boolean or null 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. |
| searchText | string or null A search text that will be used to search for companies containing that text ion relevant fields (name, comment, etc.). |
| orderByField | string or null 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. |
| orderDescending | boolean Defines whether the order by criteria is used for descending or ascending order by process. |
| state | string or null The State of the Object [Productive|Deactivated|Test] |
| offset | integer or null <int32> Defines the number of items to skip when loading transactions. This can be used for paging requests. |
| limit | integer or null <int32> 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. |
| countryCode | string or null Optional filter for ISO-2 country code (e.g. DE, FR, AT) of the company objects to filter. |
{- "parentEntityId": 1545,
- "createdAfter": "2023-01-01T00:00:00Z",
- "hasUserComment": true,
- "hasDeactivateAfterTimestamp": false,
- "searchText": "Berlin",
- "orderByField": "Name",
- "orderDescending": false,
- "state": "Productive",
- "offset": 0,
- "limit": 50,
- "countryCode": "AT"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "currentCount": 1,
- "totalCount": 1,
- "foundItems": [
- {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "badge": "XVTGBLZVUG",
- "taxId": "string",
- "ignoreTaxId": true
}
]
}Loads all available notifications for registers of a company and all related locations. These notifications contain warnings from the efsta Portal escalation system and describe issues and potential problems with registers.
🔒 Permissions: ReadCompany permission required for the specified company.
📝 Returned Data:
Register information: RegisterNumber, EventCode, DescriptionShort
Event details: DescriptionLong, CurrentLevel, InitialTimestamp
Company context: parentEntityId, CompanyName, CompanyType
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to retrieve notifications for (minimum value: 2). |
| languageCode | string ISO 639-1 language code for localized notifications (e.g., "de", "en"). Defaults to "en-US" if not provided. |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "notifications": [
- {
- "registerNumber": "00000004ZP6",
- "eventCode": "TSE_ACTIVATED",
- "descriptionShort": "TSE successfully activated",
- "descriptionLong": "The TSE has been successfully activated and is ready for use",
- "initialTimestamp": "2024-01-15T10:30:00Z",
- "companyId": 1545,
- "companyName": "ACME Store Berlin"
}
]
}Creates a new contact person for a company. Contact persons are used for automated notifications and communication purposes.
🔒 Permissions: ManageCompany permission required for the company specified in the request.
🔴 Required Fields:
companyId: ID of the company to add the contact to (minimum value: 2)
contactName: Contact person's full name (2-500 characters)
emailAddress: Contact person's email address (valid email format, max 500 characters)
contactType: Type of contact role (see Contact Types below)
👤 Contact Types:
InvoiceContact: Responsible for invoice-related communications
TechnicalContact: Responsible for technical support and system issues
CommercialContact: Responsible for commercial and business matters
ElsterContact: Responsible for fiscal authority communications (Germany)
📝 Important Notes:
The request body containing complete contact person information including name, email, and role assignment.
| companyId | integer <int32> |
| contactName | string or null |
| emailAddress | string or null |
| contactType | string or null |
| languageCode | string or null |
{- "companyId": 0,
- "contactName": "string",
- "emailAddress": "string",
- "contactType": "string",
- "languageCode": "string"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "companyContact": {
- "companyId": 0,
- "contactName": "string",
- "emailAddress": "string",
- "languageCode": "string",
- "contactType": "Unknown",
- "emailAddressVerification": "Created"
}
}Gets a list of all the different contacts added to the Company. Returns complete contact information including roles, verification status, and communication preferences.
🔒 Permissions: ReadCompany permission required for the specified company.
📝 Returned Information:
Contact person details: Name, Email,
Role and responsibility assignments: ContactType
Company context: CompanyId
👤 Contact Types:
InvoiceContact: Responsible for invoice-related communications
TechnicalContact: Responsible for technical support and system issues
CommercialContact: Responsible for commercial and business matters
ElsterContact: Responsible for fiscal authority communications (Germany)
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to retrieve contacts for (minimum value: 2). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "contacts": [
- {
- "companyId": 0,
- "contactName": "string",
- "emailAddress": "string",
- "languageCode": "string",
- "contactType": "Unknown",
- "emailAddressVerification": "Created"
}
]
}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.
🔒 Permissions: ManageCompany permission on the company identified via parentEntityId in the request body.
🔴 Required Fields:
parentEntityId: ID of the parent company (minimum value: 2)
name: Location name (2-1000 characters)
address: Street address (max 1000 characters)
city: City name (max 1000 characters)
zip: Postal code (max 50 characters)
countryCode: ISO-2 country code (exactly 2 characters, e.g., "DE", "AT", "FR")
locationIdentification: Unique identifier within the company (1-1000 characters, alphanumeric and special characters )
🔵 Optional Fields
invoiceEmailAddress: Email for invoice notifications (valid email format, max 100 characters)
userComment: Custom description (max 2000 characters)
state: Location state - "Productive" (default) or "Test"
📝 Important Notes:
The request body containing all properties required for location creation. Must include parentEntityId, name, and optional address information.
| parentEntityId | integer <int32> Represents the unique identifier of the company that owns the object. |
| name | string or null Represents the name of the object. |
| address | string or null The Address the object is located in (street and street number). |
| city | string or null The name of the city the object is located in. |
| zip | string or null The zip / postal code the object is located in. |
| countryCode | string or null The ISO-2 country code of the address of the object (e.g. DE, FR or AT) |
| invoiceEmailAddress | string or null The invoice email address relevant for all nodes that receive invoice-emails (primarily company entries) |
| userComment | string or null A custom comment set by users to further decribe the current node. |
| state | string or null Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE! Valid values: "Productive", "Test" |
| locationIdentification | string or null The identification of the location within the company (e.g. the location number, a unique identifier) Can contain upper and lower case characters as well as numbers and special characters -+<>#.,=. |
{- "parentEntityId": 3434,
- "name": "string",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "locationIdentification": "LOC-001"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "location": {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "locationIdentification": "string"
}
}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.
🔒 Permissions: ManageCompany permission on the location to update.
🔴 Required Fields:
parentEntityId: ID of the parent company (minimum value: 2)
name: Location name (2-1000 characters)
address: Street address (max 1000 characters)
city: City name (max 1000 characters)
zip: Postal code (max 50 characters)
countryCode: ISO-2 country code (exactly 2 characters)
locationIdentification: Unique identifier within the company (1-1000 characters, alphanumeric and special characters )
🔵 Optional Fields:
invoiceEmailAddress: Email for invoice notifications (valid email format, max 100 characters)
userComment: Custom description (max 2000 characters)
state: Location state - "Productive", "Test", or "Deactivated"
📝 Important Notes:
| locationId required | integer <int32> The unique identifier of the location to update (minimum value: 2). |
The request body containing all properties to update. All properties will be updated, so include all current values.
| name | string or null Represents the name of the object. |
| address | string or null The Address the object is located in (street and street number). |
| city | string or null The name of the city the object is located in. |
| zip | string or null The zip / postal code the object is located in. |
| countryCode | string or null The ISO-2 country code of the address of the object (e.g. DE, FR or AT) |
| invoiceEmailAddress | string or null The invoice email address relevant for all nodes that receive invoice-emails (primarily company entries) |
| userComment | string or null A custom comment set by users to further decribe the current node. |
| state | string or null Changes existing or creates new company objects as test company objects. THIS CANNOT BE UNDONE! Valid values: "Productive", "Deactivated", "Test" |
| locationIdentification | string or null The identification of the location within the company (e.g. the location number, a unique identifier) Can contain upper and lower case characters as well as numbers and special characters -+<>#.,=. |
{- "name": "string",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "locationIdentification": "LOC-001"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "location": {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "locationIdentification": "string"
}
}Retrieves a single location by its unique identifier.
🔒 Permissions: ReadCompany permission on the location identified via the given ID.
| locationId required | integer <int32> The unique identifier of the location to retrieve (minimum value: 2). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "location": {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "locationIdentification": "string"
}
}Deactivates a location and all its subordinate entities including registers and fiscal units. The process executes in a specific order to ensure proper shutdown of all connected systems.
🔒 Permissions: ManageCompany permission required for the specified location.
📝 Deactivation Process:
Immediate deactivation: If no year specified, location is deactivated immediately
Scheduled deactivation: If year specified, deactivation occurs on December 31st at 23:59:59
Subordinate entities: All registers and fiscal units are deactivated
Fiscal units: Terminated after notice period (unless forceSubDeactivation is true)
📝 Important Notes:
| locationId required | integer <int32> The unique identifier of the location to deactivate (minimum value: 2). |
| deactivateAfterYear | integer <int32> Optional year for scheduled deactivation (executed on December 31st at 23:59:59). Must be current year or later. |
| forceSubDeactivation | boolean Optional flag to force immediate deactivation of all subordinate entities without waiting for notice periods. |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { }
}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.
🔒 Permissions: ReadCompany permission is required for each location to appear in the search results.
📝 Search Parameters:
parentEntityId: Filter by parent company (optional, minimum value: 2)
createdAfter: Filter by creation date (optional, ISO-8601 format)
hasUserComment: Filter by presence of user comments (optional, boolean)
hasDeactivateAfterTimestamp: Filter by deactivation date presence (optional, boolean)
searchText: Text search across name, comment, and other fields (optional, max 1000 characters)
state: Filter by location state - "Productive", "Test", or "Deactivated" (optional)
countryCode: Filter by ISO-2 country code (optional, exactly 2 characters, e.g., "DE", "AT", "FR")
orderByField: Sort field name (optional, default: "name")
orderDescending: Sort direction (optional, default: false for ascending)
offset: Number of items to skip for pagination (optional, minimum: 0)
limit: Number of items to return (optional, range: 0-250, default: 100)
📝 Important Notes:
The search request object containing filter criteria, pagination settings, and sorting options for querying locations.
| parentEntityId | integer or null <int32> Optional company ID to get all entries for. If set, all direct children of that specified company will be filtered. |
| createdAfter | string or null <date-time> Optional filter that allows filtering for companies that have been created after a certain threshold (format: ISO-8601) |
| hasUserComment | boolean or null 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. |
| hasDeactivateAfterTimestamp | boolean or null 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. |
| searchText | string or null A search text that will be used to search for companies containing that text ion relevant fields (name, comment, etc.). |
| orderByField | string or null 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. |
| orderDescending | boolean Defines whether the order by criteria is used for descending or ascending order by process. |
| state | string or null The State of the Object [Productive|Deactivated|Test] |
| offset | integer or null <int32> Defines the number of items to skip when loading transactions. This can be used for paging requests. |
| limit | integer or null <int32> 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. |
| countryCode | string or null Optional filter for ISO-2 country code (e.g. DE, FR, AT) of the company objects to filter. |
{- "parentEntityId": 1545,
- "createdAfter": "2023-01-01T00:00:00Z",
- "hasUserComment": true,
- "hasDeactivateAfterTimestamp": false,
- "searchText": "Berlin",
- "orderByField": "Name",
- "orderDescending": false,
- "state": "Productive",
- "offset": 0,
- "limit": 50,
- "countryCode": "DE"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "currentCount": 1,
- "totalCount": 1,
- "foundItems": [
- {
- "id": 12345,
- "parentEntityId": 1545,
- "name": "Acme Corporation",
- "address": "123 Main Street",
- "city": "Berlin",
- "zip": "10115",
- "countryCode": "DE",
- "invoiceEmailAddress": "invoices@acmecorp.com",
- "userComment": "Main headquarters, established 1985",
- "state": "Productive",
- "locationIdentification": "string"
}
]
}Retrieves a single register by its unique register number. Returns complete register information.
🔒 Permissions: ReadRegister permission on the company that owns the register.
📝 Important Notes:
| registerNumber required | string The unique register number to retrieve (e.g., "12345678901"). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "register": {
- "registerNumber": "00000004ZP6",
- "parentEntityId": 1545,
- "countryCode": "DE",
- "lastTL": "001",
- "lastTT": "001",
- "userComment": "Main cash register - Store entrance",
- "firstTransaction": 24011508,
- "lastTransaction": 24032315,
- "versionNumber": "2.5.2",
- "state": "Deactivated",
- "isCloudEFR": true,
- "creationTimestamp": "2024-01-15T08:00:00Z"
}
}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.
🔒 Permissions: ReadRegister permission is required for each register to appear in the search results.
📝 Search Parameters:
parentEntityId: Filter by parent company (optional, minimum value: 2)
createdAfter: Filter by creation date (optional, ISO-8601 format)
hasUserComment: Filter by presence of user comments (optional, boolean)
hasDeactivateAfterTimestamp: Filter by deactivation date presence (optional, boolean)
state: Filter by RegisterState (optional, Productive|Test|Deactivated)
searchText: Text search across register properties (optional, max 1000 characters)
orderByField: Sort field name (optional, default: "registerNumber")
orderDescending: Sort direction (optional, default: false for ascending)
offset: Number of items to skip for pagination (optional, minimum: 0)
limit: Number of items to return (optional, range: 0-250, default: 100)
📝 Important Notes:
The search request object containing filter criteria, pagination settings, and sorting options for querying registers.
| parentEntityId | integer or null <int32> Optional company ID to get all entries for. If set, all direct children of that specified company will be filtered. |
| createdAfter | string or null <date-time> Optional filter that allows filtering for companies that have been created after a certain threshold (format: ISO-8601) |
| hasUserComment | boolean or null 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. |
| hasDeactivateAfterTimestamp | boolean or null 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. |
| searchText | string or null A search text that will be used to search for companies containing that text ion relevant fields (name, comment, etc.). |
| orderByField | string or null 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. |
| orderDescending | boolean Defines whether the order by criteria is used for descending or ascending order by process. |
| state | string or null The State of the Object [Productive|Deactivated|Test] |
| offset | integer or null <int32> Defines the number of items to skip when loading transactions. This can be used for paging requests. |
| limit | integer or null <int32> 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. |
| countryCode | string or null 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). |
| tl | string or null Optional filter for specific TL (location identification) values. If provided, the content of LastTL (the last known location identification of that register) has to match. This is case insensitive. |
| tt | string or null Optional filter for specific Tt (terminal / cash register identification) values. If provided, the content of LastTT (the last known terminal / cash register identification of that register) has to match. This is case insensitive. |
| firstTransactionAfter | string or null <date-time> Optional filter to limit the list to registers that have made the first transaction after the given timestamp (format: ISO-8601). |
| firstTransactionBefore | string or null <date-time> Optional filter to limit the list to registers that have made the first transaction before the given timestamp (format: ISO-8601). |
| lastTransactionAfter | string or null <date-time> Optional filter to limit the list to registers that have made the last transaction after the given timestamp (format: ISO-8601). |
| lastTransactionBefore | string or null <date-time> Optional filter to limit the list to registers that have made the last transaction before the given timestamp (format: ISO-8601). |
{- "parentEntityId": 1545,
- "createdAfter": "2023-01-01T00:00:00Z",
- "hasUserComment": true,
- "hasDeactivateAfterTimestamp": false,
- "searchText": "Berlin",
- "orderByField": "Name",
- "orderDescending": false,
- "state": "Productive",
- "offset": 0,
- "limit": 50,
- "countryCode": "string",
- "tl": "string",
- "tt": "string",
- "firstTransactionAfter": "2019-08-24T14:15:22Z",
- "firstTransactionBefore": "2019-08-24T14:15:22Z",
- "lastTransactionAfter": "2019-08-24T14:15:22Z",
- "lastTransactionBefore": "2019-08-24T14:15:22Z"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "currentCount": 1,
- "totalCount": 1,
- "foundItems": [
- {
- "registerNumber": "00000004ZP6",
- "parentEntityId": 1545,
- "countryCode": "DE",
- "lastTL": "001",
- "lastTT": "001",
- "userComment": "Main cash register - Store entrance",
- "firstTransaction": 24011508,
- "lastTransaction": 24032315,
- "versionNumber": "2.5.2",
- "state": "Deactivated",
- "isCloudEFR": true,
- "creationTimestamp": "2024-01-15T08:00:00Z"
}
]
}Deactivates a register by changing state to "Discharged". This operation can be immediate or scheduled for a future date.
🔒 Permissions: ManageRegister permission required for the company that owns the register.
📝 Important Notes:
| registerNumber required | string The unique register number to deactivate (e.g., "12345678901"). |
| deactivateAfterYear | integer <int32> Optional year for scheduled deactivation (executed on December 31st at 23:59:59). Must be current year or later. |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { }
}Updates the software release version assigned to a register. The operation is performed asynchronously in the background.
🔒 Permissions: ManageRegister permission required for the company that owns the register.
📝 Update Process:
Compatibility check: Target release must be compatible with register's platform and architecture
Background processing: Update is initiated asynchronously via messaging system
Version validation: Software version compatibility is verified
Platform restrictions: Cross-platform updates have specific limitations
📝 Important Notes:
⚡ Error Codes:
01: No register found to update
02: No assignment found to update
03: Multiple target releases found
04: No target release found
06: Main releases different - downgrade not possible or cross update only available for Windows
| RegisterNumber required | string The unique register number to update (e.g., "12345678901"). |
| Release required | string The software release version to assign (e.g., "2.0.1"). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "registerNumber": "00000006ZP6"
}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.
🔒 Permissions: Purchase permission on the specified company.
📝 Returned Data:
Product information: ID, Name, DescriptionShort, DescriptionLong
Pricing details: PriceOnce, PriceReoccurring (may be hidden based on purchase mode)
Product details: WarningText, ImageLink, Supplier, AmountLimit
Localization: CountryCode, AmountSelectionType
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to retrieve products for (minimum value: 1). |
| languageCode | string The language code for product descriptions and details (e.g., "en", "de", "fr"). Defaults to "en" if not provided. |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "products": [
- {
- "id": 42,
- "name": "fiskaly Cloud TSE",
- "descriptionShort": "Cloud-based Technical Security Equipment",
- "descriptionLong": "A cloud-based TSE solution for German fiscal requirements, providing secure transaction recording and digital signature capabilities.",
- "warningText": "This product requires a stable internet connection and compliance with German fiscal regulations.",
- "countryCode": "DE",
- "priceOnce": 29.99,
- "priceReoccurring": 9.99,
- "supplier": "fiskaly",
- "amountLimit": 50,
- "amountSelectionType": 2
}
]
}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.
🔒 Permissions: Purchase permission on the specified company.
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to retrieve purchase overview for (minimum value: 1). |
| fromDate | string <date-time> The start date for the purchase overview in DateTimeOffset (e.g., "2024-10-23T16:45:00Z"). |
| tillDate | string <date-time> The end date for the purchase overview in DateTimeOffset (e.g., "2025-10-23T16:45:00Z"). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "purchaseEntries": [
- {
- "purchaseId": 12345,
- "purchaseKey": "PUR-2024-001",
- "purchaseReference": "ORDER-2024-001",
- "companyId": 1545,
- "companyName": "ACME Store Berlin",
- "purchaserName": "John Doe",
- "shippingCompanyId": 1546,
- "shippingName": "ACME Store Berlin - Shipping",
- "invoiceCompanyId": 1545,
- "currentInvoiceCompanyId": 1545,
- "invoiceName": "ACME Store Berlin",
- "creationUserId": 123,
- "creationUserName": "John Doe",
- "purchaseDate": "2024-01-15T10:30:00",
- "supplier": "fiskaly",
- "productCode": "FISK-TSE-CLOUD-001",
- "productName": "fiskaly Cloud TSE",
- "quantity": 3,
- "priceOnce": 29.99,
- "priceReoccurring": 9.99,
- "state": "COMPLETED",
- "stateInfo": "Purchase successfully processed",
- "companyState": 10,
- "testOrder": false,
- "purchaserInfo": "Purchase made via API",
- "productNameTranslated": "fiskaly Cloud TSE"
}
]
}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.
🔒 Permissions: Purchase permission required for all companies involved in the purchase (companyId, invoiceCompanyId, shippingCompanyId if provided).
🔴 Required Fields:
companyId: ID of the company making the purchase (minimum value: 1)
invoiceCompanyId: ID of the company to invoice (minimum value: 1)
items: List of products to purchase with amounts and assignments
recipientEmailAddress: Email address for order notifications (valid email format)
🔵 Optional Fields:
shippingCompanyId: ID of the company for shipping (if different from companyId)
shippingName: Name for shipping address (max 200 characters)
shippingStreet: Street address for shipping (max 200 characters)
shippingCity: City for shipping address (max 200 characters)
shippingZip: Postal code for shipping (max 20 characters)
shippingCountryCode: ISO-2 country code for shipping (exactly 2 characters)
recipientEmailRealName: Real name of the recipient (max 200 characters)
customerReference: Customer reference information (max 200 characters)
📝 Important Notes:
The request body containing all necessary information for the purchase order including company details, products, and shipping information.
| companyId | integer <int32> The ID of the actual company the purchase is made for (i.e. the beneficiary) |
| customerReference | string or null A custom reference value that can be used to find and identify a specific purchase in the efsta system. |
| invoiceCompanyId | integer <int32> 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) |
| shippingCompanyId | integer or null <int32> 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 receive physical items (like USB TSEs or signature devices). |
| shippingName | string or null The legal name of the receiving address object (e.g. a person or the shop name). |
| shippingStreet | string or null The street name of the receiving address. |
| shippingZip | string or null The zip / postal code of the receiving address. |
| shippingCity | string or null The city name of the receiving address. |
| shippingCountryCode | string or null The ISO-2 code of the country of the receiving address. |
| recipientEmailAddress | string or null In case an item will be sent via email (e.g. old PrimeSign online certificates) they will be sent to this email address. |
| recipientEmailRealName | string or null In case an item will be sent via email (e.g. old PrimeSign online certificates) this name will be used as the recipient. |
Array of objects or null (PurchaseItem) 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 reduce risk of one of the different (remote) systems to fail. |
{- "companyId": 1545,
- "customerReference": "P-35333-94911-U",
- "invoiceCompanyId": 1545,
- "shippingCompanyId": 1546,
- "shippingName": "ACME Store Berlin",
- "shippingStreet": "Friedrichstraße 101",
- "shippingZip": "10117",
- "shippingCity": "Berlin",
- "shippingCountryCode": "DE",
- "recipientEmailAddress": "admin@acme-store.com",
- "recipientEmailRealName": "John Doe",
- "items": [
- {
- "id": 42,
- "amount": 3,
- "amountAssignment": {
- "LOC-001": 2,
- "LOC-002": 1
}
}
]
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { }
}Starts an export process for company data. The export will be processed in the background and can be monitored using the returned ticket number.
🔒 Permissions: ExportData permission on the specified company.
🔴 Required Fields:
from: Start date for the export data range (ISO-8601 format)
till: End date for the export data range (ISO-8601 format)
exportType: Type of export to perform (see Export Types below)
🔵 Optional Fields:
registerNumber: Specific register number to export (if not provided, all registers for the company are included)
externalRecipientEmail: Email address of the External recipient of the export.
📑 Export Types:
Journal_Archive_Json: Journal archive export in JSON formatTransactions_CSV: Transactions export in CSV formatAT_DEP_7_RKSV: Austrian data collection protocol §7 RKSVAT_DEP_131_BAO: Austrian data collection protocol §131 BAODE_DSFinVK: German DSFinVK export formatDE_TSE_Export_Journal: German TSE export (journal)DE_GoBD: German GoBD export formatFR_Fiscal: French fiscal export formatFR_Grand_Totals: French grand totals export formatPT_SAFT: Portuguese SAF-T export formatSI_Export: Slovenian export format📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to export data for (minimum value: 1). |
The request body containing all parameters and settings for the export operation including date range, export type, and register selection.
| registerNumber | string or null The register number to start the export for. |
| from required | string <date-time> timestamp used to limit the export for (starting with data from that timestamp onwards). Only full dates are supported, not any day of time. |
| till required | string <date-time> timestamp used to limit the export for (stopping with data until that timestamp). Only full dates are supported, not any day of time. |
| exportType required | 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" Defines the type of export to execute. This will determine the overall download result. |
| externalRecipientEmail | string or null Email address of the External recipient of the export. |
{- "registerNumber": "000000011Z3",
- "from": "2024-01-01T00:00:00",
- "till": "2024-12-31T23:59:59",
- "exportType": "Journal_Archive_Json",
- "externalRecipientEmail": "external@example.com"
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "ticketNr": "ACCB35183AEF9544B225CF78BBF4399A",
- "password": "Kj8mP2qR5wL9xN3vB7zT4yC6hF1"
}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.
🔒 Permissions: ExportData permission on the specified company.
📝 Returned Data:
Export information: TicketNr, ExportType, Creation timestamp
Status details: Current status, Progress information
Date range: From date, Till date for the export
File information: File size, Download availability
Error details: Error messages for failed exports
📤 Export Status Information:
Pending: Export is queued and waiting to be processed
In Progress: Export is currently being generated
Completed: Export is ready for download
Failed: Export failed due to an error
Expired: Export file has been automatically deleted
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to retrieve exports for (minimum value: 1). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "tickets": [
- {
- "id": 12345,
- "companyId": 1001,
- "creatorUserId": 42,
- "receiverUserId": 43,
- "dataRangeFrom": "2024-01-01T00:00:00",
- "dataRangeTo": "2024-01-31T23:59:59",
- "validFrom": "2024-01-15T10:30:00Z",
- "validTo": "2024-02-15T10:30:00Z",
- "created": "2024-01-15T10:30:00Z",
- "ticketNr": "EXP-2024-001234",
- "finished": "2024-01-15T10:35:00Z",
- "userInfo": "Monthly transaction export",
- "deleted": false,
- "exportType": "PDF",
- "status": "Success"
}
]
}Downloads the completed export file as a ZIP archive. The file contains all exported data in the requested format.
🔒 Permissions: ExportData permission on the company associated with the export ticket.
📝 Download Process:
File retrieval: Export files are retrieved from secure cloud storage
Encryption: Files are stored encrypted
ZIP creation: Multiple files are packaged into a single ZIP archive
Stream delivery: File is streamed directly to the client
📝 Important Notes:
| ticketNr required | string The unique ticket number identifying the export to download (e.g., "TKT-123456789"). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { }
}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.
🔒 Permissions: ReadCompany permission on the specified company.
📝 Returned Data:
Reporting period information: GUID, CompanyId, Period details
Status information: Current state, Processing status
Date information: Reporting period dates, Creation timestamps
Company context: Company type, Support level, Location details
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the German company to retrieve fiscal reporting periods for (minimum value: 1). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "reportingList": [
- {
- "guid": "string",
- "companyId": 0,
- "creationTimestamp": "2019-08-24T14:15:22Z",
- "isNewest": true,
- "state": "string",
- "sentTimestamp": "2019-08-24T14:15:22Z",
- "sentEmail": "string",
- "downloaded": true,
- "activeDevices": 0,
- "deactivatedDevices": 0
}
]
}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.
🔒 Permissions: ReadCompany permission on the company associated with the reporting period.
📝 Returned Data:
Reporting contact information: Contact details, Company association
Company data: Location name, Support level, Address details
Recording systems: System information, Deactivation status, Count
Previous reporting: Previous GUID reference for continuity
State information: Current processing state
📝 Important Notes:
| guid required | string The unique identifier of the reporting period to retrieve data for (e.g., "12345678-1234-1234-1234-123456789012"). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "reportingContact": {
- "companyId": 0,
- "tin": "string",
- "idNr": "string",
- "salutation": 0,
- "lastName": "string",
- "firstName": "string",
- "dateOfBirth": "2019-08-24T14:15:22Z",
- "addressType": 0,
- "contactType": 0,
- "street": "string",
- "streetNumber": "string",
- "postalCode": "string",
- "city": "string",
- "country": "string",
- "wIdNr": "string",
- "companyName": "string",
- "legalForm": 0,
- "streetNumberSuffix": "string",
- "addressSuffix": "string"
}, - "wIdNr": "string",
- "useLocationContact": false,
- "companyData": {
- "id": 1545,
- "locationName": "ACME Store Berlin",
- "recordingSystemsCount": 3,
- "supportLevel": 10,
- "dateOfDecomissioning": "2024-12-31T23:59:59Z",
- "street": "Hauptstraße",
- "streetNumber": "123",
- "streetNumberSuffix": "a",
- "postalCode": "10115",
- "city": "Berlin"
}, - "recordingSystems": [
- {
- "registerNumber": "string",
- "supportLevel": 0,
- "type": 0,
- "software": "string",
- "serial": "string",
- "manufacturer": "string",
- "model": "string",
- "purchaseDate": "2019-08-24T14:15:22Z",
- "activationDate": "2019-08-24T14:15:22Z",
- "deactivationDate": "2019-08-24T14:15:22Z",
- "fiscalUnitSerial": "string",
- "fiscalUnitType": 0,
- "fiscalUnitManufacturer": "string",
- "fiscalUnitActivationDate": "2019-08-24T14:15:22Z",
- "bsiid": "string",
- "isExternalRegister": true
}
], - "previousGuid": "550e8400-e29b-41d4-a716-446655440000",
- "state": "Ready"
}Creates an official fiscal report.
🔒 Permissions: ManageCompany permission on the company associated with the reporting period.
📝 Submission Process:
Disclaimer validation: Legal disclaimer must be accepted
State update: Reporting state is set to "CREATING"
Background processing: Report generation is initiated asynchronously
📝 Important Notes:
| guid required | string The unique identifier of the reporting period to create and submit the report for (e.g., "12345678-1234-1234-1234-123456789012"). |
| acceptDisclaimer | boolean Boolean flag indicating acceptance of legal disclaimer and submission terms. Must be true for submission to proceed. |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { }
}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.
🔒 Permissions: ReadCompany permission on the company associated with the reporting period.
📝 Download Process:
Disclaimer validation: Legal disclaimer must be accepted
State verification: Report must be in "CREATED" or "SENT" state
File retrieval: Report file is retrieved from secure storage
Download tracking: Report access is logged for audit purposes
📄 Document Contents:
Official Report: Complete fiscal report as submitted to authorities
Submission Confirmation: Official receipt and reference numbers
Data Summary: Aggregated financial information and calculations
Compliance Verification: Validation results and quality indicators
Supporting Documents: Related attachments and supplementary data
📝 Important Notes:
| guid required | string The unique identifier of the reporting period to retrieve the report for (e.g., "12345678-1234-1234-1234-123456789012"). |
| acceptDisclaimer | boolean Boolean flag indicating acceptance of legal disclaimer for accessing official report. Must be true for access to proceed. |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { }
}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.
🔒 Permissions: No specific permissions required - returns information about the authenticated user.
📝 Returned Data:
User profile information: Real name, Email address, User ID
Language preferences: Preferred language code
📝 Important Notes:
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "userProfile": {
- "userId": 123,
- "realname": "John Doe",
- "emailAddress": "john.doe@partner-company.com",
- "preferredLanguage": "en"
}
}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.
🔒 Permissions: ManageUsers on the company identified via companyId of the body data.
Parameters:
companyId (integer): The ID of the company to invite a user to.emailAddress (string): The email address this invitation will be sent to.role (string): Defines the role that will be set for the invited user as soon as he accepts the invitation. Default:(VIEWER)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 contactsuggestedRealName (string): The suggested real name for the user that the real user can change when logging in for the first timeinviter: The ID of the user who is sending the invitation.📝 Important Notes:
Invitation Process:
👨💼Role Assignment:
ADMIN - Full system access (8 permissions)
EDITOR - Management capabilities without purchasing (7 permissions)
DATAFISCAL - Company and data management (4 permissions)
DATAVIEWER - Read-only with export capabilities (3 permissions)
FISCAL - Basic company management (3 permissions)
VIEWER - Read-only access (2 permissions)
The request body containing all details for the invitation request including email, company, and role information.
| companyId | integer <int32> The ID of the company to invite a user to. This can be both an ID identifying an organization or a company. |
| role | string or null Defines the role that will be set for the invited user as soon as he accepts the invitation. Allowed values are "ADMIN", "DATAFISCAL", "DATAVIEWER", "EDITOR", "FISCAL", "VIEWER" |
| emailAddress | string or null The email address this invitation will be sent to. This does not have to be the email address the user uses for the actual efsta Portal account and the email can also be forwarded. |
| customText | string or null A custom text that will be added to the default invitation text. It might contain information about why the used has been invited and what to do or who to contact. |
| suggestedRealName | string or null The suggested real name for the user that the real user can change when logging in for the first time. |
| inviter | integer <int32> The ID of the user who is creating this invitation. |
{- "companyId": 1545,
- "role": "EDITOR",
- "emailAddress": "john.doe@partner-company.com",
- "customText": "Welcome to our efsta Portal! Please contact our IT department if you need assistance with the initial setup.",
- "suggestedRealName": "John Doe",
- "inviter": 123
}{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { }
}Permanently removes all role assignments for the specified user from the target company and its entire hierarchy (child companies, locations, etc.). This operation uses the company's parent-child relationship to restore appropriate permissions from parent companies if they exist.
🔒 Permissions: ManageUsers permission required on the target company.
📝 Important Notes:
⚠️ Warning: Use with caution as this affects the entire company hierarchy, not just the specified company.
| CompanyId | integer <int32> The unique identifier of the company from which to remove user access permissions (minimum value: 1). |
| UserId | integer <int32> The unique identifier of the user whose access should be removed (minimum value: 1). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { }
}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.
🔒 Permissions: ReadCompany permission required on the target company.
📝 Returned Data:
User profile information: Real name, Email address, User ID
Language preferences: Preferred language code
Permission details: Expanded list of specific permissions granted through the role
Summary information: Total count of users, Success status
📝 Important Notes:
| companyId | integer <int32> The unique identifier of the company to retrieve user permissions for (minimum value: 1). |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "users": [
- {
- "userId": 123,
- "realname": "John Doe",
- "emailAddress": "john.doe@partner-company.com",
- "preferredLanguage": "en",
- "roleInvariantName": "EDITOR",
- "permissions": [
- "string"
]
}
], - "totalCount": 12
}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.
🔒 Permissions: No specific permissions required - tests current user's permissions.
📝 Returned Data:
Permission result: Boolean indicating whether the user has the specified permission
Success status: Operation completion status
🗝️ Permission Types:
ReadCompany: View company information and basic data
ManageCompany: Edit company settings and configuration
ReadRegister: View register information and status
ManageRegister: Configure and manage register
Purchase: Permission to place new purchases in the efsta Cloud
ExportData: Permission to export archive data from registers and companies
ManageUsers: Permission to manage users by adding new ones or remove and changing existing ones
ManageBill: Permission to manage efsta Bill and efsta Wallet configurations
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the company to test permissions for (minimum value: 1). |
| permissionType | string The type of permission to test. Select from the dropdown menu. |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "hasPermission": true
}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.
🔒 Permissions: ReadCompany permission required for the base company. Additional permissions required for subordinate entities.
📝 Filter Options:
includeRegisters: Include cash registers in the hierarchy tree📝 Returned Data:
Root node: The base company as the root of the hierarchy tree
Child nodes: All subordinate entities based on filter settings
Hierarchy structure: Parent-child relationships between entities
Entity details: Object name, ID, type, owner, State
Hierarchy Structure:
Organizations (top level)
Companies (business entities)
Locations (physical sites)
Registers (cash register systems)
📝 Important Notes:
| companyId required | integer <int32> The unique identifier of the base company for hierarchy retrieval (minimum value: 2). |
| includeRegisters | boolean |
{- "success": true,
- "errorCode": null,
- "errorMessage": null,
- "errorMessageTranslated": null,
- "validationErrors": { },
- "rootNode": {
- "objectId": "1545",
- "objectName": "ACME Store Berlin",
- "objectType": "C",
- "parentEntityId": 1000,
- "state": 10,
- "children": [
- { }
]
}
}