Skip to main content

Management API v2 (Current) (2.0)

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.

1.Organization

Endpoints for managing organizational structures and organization of the entire company structure

Creates a new organization object in the Organization tree under the given ownerOrganization.

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:

  • Valid states: "Productive", "Test"
  • Organization will be created with "Productive" state by default
  • If created under a Test organization, it will automatically be set to "Test" state
  • State changes from "Productive" to "Test" are irreversible
  • Address fields are primarily used for billing and invoicing purposes
  • The organization will be assigned a unique ID and creation timestamp
Authorizations:
api_key
Request Body schema:

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

Responses

Request samples

Content type
{
  • "parentEntityId": 3434,
  • "name": "string",
  • "invoiceEmailAddress": "invoices@acmecorp.com",
  • "userComment": "Main headquarters, established 1985",
  • "state": "Productive",
  • "address": "string",
  • "city": "string",
  • "zip": "string",
  • "countryCode": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "organization": {
    }
}

Updates an existing organization with the provided data.

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:

  • All properties should be included in the request as missing properties may cause validation errors
  • Address fields are primarily used for billing and invoicing purposes
  • Some properties may be restricted based on the organization's current state
  • State changes from "Productive" to "Test" are irreversible and cannot be undone
  • State changes from "Test" to "Productive" are not allowed
  • The organization's change timestamp will be updated automatically
Authorizations:
api_key
path Parameters
organizationId
required
integer <int32>

The unique identifier of the organization to update (minimum value: 2).

Request Body schema:

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

Responses

Request samples

Content type
{
  • "name": "string",
  • "invoiceEmailAddress": "invoices@acmecorp.com",
  • "userComment": "Main headquarters, established 1985",
  • "state": "Productive",
  • "countryProperties": {
    },
  • "address": "string",
  • "city": "string",
  • "zip": "string",
  • "countryCode": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "organization": {
    }
}

Gets the organization by the specified ID.

Retrieves a single organization by its unique identifier. 🔒 Permissions: ReadCompany permission on the organization identified via the given ID.

📝 Important Notes:

  • If the organization is not found, a 404 error will be returned
  • The response includes the organization's current state and all associated metadata
Authorizations:
api_key
path Parameters
organizationId
required
integer <int32>

The unique identifier of the organization to retrieve (minimum value: 2).

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "organization": {
    }
}

Searches for organizations based on given parameters in the request body.

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:

  • Maximum 250 results per request, default limit is 100 if not specified
  • If parentEntityId is provided, only direct children of that Organization are returned
  • State filtering supports: "Productive", "Test", "Deactivated"
  • Search is case-insensitive for text fields
  • Results include pagination metadata (total count, offset, limit)
  • Empty search criteria will return all accessible organizations (up to limit)
Authorizations:
api_key
Request Body schema:

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.

Responses

Request samples

Content type
{
  • "parentEntityId": 1545,
  • "createdAfter": "2023-01-01T00:00:00Z",
  • "hasUserComment": true,
  • "hasDeactivateAfterTimestamp": false,
  • "searchText": "Berlin",
  • "orderByField": "Name",
  • "orderDescending": false,
  • "state": "Productive",
  • "offset": 0,
  • "limit": 50
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "currentCount": 1,
  • "totalCount": 1,
  • "foundItems": [
    ]
}

2.Company

Endpoints for managing companies and their specific information such as tax numbers and address data

Creates a new company within the organizational hierarchy.

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:

  • Valid states: "Productive", "Test"
  • Company will be created with "Productive" state by default
  • If created under a Test organization, it will automatically be set to "Test" state
  • State changes from "Productive" to "Test" are irreversible
  • Address fields are primarily used for billing and invoicing purposes
  • The company will be assigned a unique ID and creation timestamp
  • the field DE_WIdNr in the countryProperties is mandatory for DE companies as of 01.01.2027 until then it is optional
Authorizations:
api_key
Request Body schema:

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.

Responses

Request samples

Content type
{
  • "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": {
    },
  • "taxId": "DE999999999",
  • "ignoreTaxId": false
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "company": {
    },
  • "companyCountryProperties": {
    }
}

Updates existing company information and settings.

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:

  • All company fields should be provided as the update replaces the entire entity
  • Changes are automatically synchronized to all locations and registers
  • State changes from "Productive" to "Test" are irreversible and cannot be undone
  • State changes from "Test" to "Productive" are not allowed
  • The company's change timestamp will be updated automatically
  • the field DE_WIdNr in the countryProperties is mandatory for DE companies as of 01.01.2027 until then it is optional
  • 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.
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to update (minimum value: 2).

Request Body schema:

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.

Responses

Request samples

Content type
{
  • "name": "string",
  • "address": "123 Main Street",
  • "city": "Berlin",
  • "zip": "10115",
  • "countryCode": "DE",
  • "invoiceEmailAddress": "invoices@acmecorp.com",
  • "userComment": "Main headquarters, established 1985",
  • "state": "Productive",
  • "countryProperties": {
    },
  • "taxId": "DE999999999"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "company": {
    },
  • "companyCountryProperties": {
    }
}

Gets the company by the specified ID.

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:

  • If the company is not found, a 404 error will be returned
  • The response includes the company's current state and all associated metadata
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to retrieve (minimum value: 2).

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "company": {
    },
  • "companyCountryProperties": {
    }
}

Deactivates a company and all its subordinate entities.

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:

  • Process is irreversible once completed
  • All subordinate entities will be deactivated
  • Scheduled deactivation year must be current year or later
  • Fiscal Units will be terminated after notice period (unless forced)
  • Force sub-deactivation bypasses normal notice periods
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to deactivate (minimum value: 2).

query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { }
}

Searches for companies using flexible criteria and filters.

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:

  • Maximum 250 results per request, default limit is 100 if not specified
  • If ParentEntityId is provided, only direct children of that organization are returned
  • State filtering supports: "Productive" (10), "Test" (9), "Deactivated" (8)
  • Search is case-insensitive for text fields
  • Results include pagination metadata (total count, offset, limit)
  • Empty search criteria will return all accessible companies (up to limit)
Authorizations:
api_key
Request Body schema:

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.

Responses

Request samples

Content type
{
  • "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"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "currentCount": 1,
  • "totalCount": 1,
  • "foundItems": [
    ]
}

Retrieves system notifications relevant to a company.

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:

  • Language code defaults to "en-US" if not provided
  • Only Works on Productive Companies
  • Only active notifications are returned
  • Notifications are localized based on the provided language code
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to retrieve notifications for (minimum value: 2).

query Parameters
languageCode
string

ISO 639-1 language code for localized notifications (e.g., "de", "en"). Defaults to "en-US" if not provided.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "notifications": [
    ]
}

Creates a new contact person for a company.

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:

  • Email addresses must be unique within the company
  • Contact information is used for automated notifications
  • Multiple contacts of the same type are allowed
  • The contact will be assigned a unique ID upon creation
Authorizations:
api_key
Request Body schema:

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

Responses

Request samples

Content type
{
  • "companyId": 0,
  • "contactName": "string",
  • "emailAddress": "string",
  • "contactType": "string",
  • "languageCode": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "companyContact": {
    }
}

Retrieves all contact persons associated with a company.

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:

  • Only contacts for the specified company are returned
  • If the company is not found, a 404 error will be returned
  • Contact information includes all available metadata
  • Verification status is particularly relevant for German fiscal contacts
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to retrieve contacts for (minimum value: 2).

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "contacts": [
    ]
}

3.Location

Endpoints for managing locations within a company where cash registers are operated

Creates a new location object in the company tree under the specified owner company.

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:

  • Valid states: "Productive", "Test"
  • Location will be created with "Productive" state by default
  • If created under a Test company, it will automatically be set to "Test" state
  • State changes from "Productive" to "Test" are irreversible
  • Address fields are primarily used for billing and invoicing purposes
  • The location will be assigned a unique ID and creation timestamp
  • Location name should be unique within the parent company for better organization
Authorizations:
api_key
Request Body schema:

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 -+<>#.,=.

Responses

Request samples

Content type
{
  • "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"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "location": {
    }
}

Updates existing location information and settings.

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:

  • All properties should be included in the request to avoid validation errors
  • Missing properties may be cleared or cause validation failures
  • State changes from "Productive" to "Test" are irreversible and cannot be undone
  • State changes from "Test" to "Productive" are not allowed
  • The location's change timestamp will be updated automatically
Authorizations:
api_key
path Parameters
locationId
required
integer <int32>

The unique identifier of the location to update (minimum value: 2).

Request Body schema:

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 -+<>#.,=.

Responses

Request samples

Content type
{
  • "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"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "location": {
    }
}

Gets the location by the specified ID.

Retrieves a single location by its unique identifier.

🔒 Permissions: ReadCompany permission on the location identified via the given ID.

Authorizations:
api_key
path Parameters
locationId
required
integer <int32>

The unique identifier of the location to retrieve (minimum value: 2).

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "location": {
    }
}

Deactivates a location and all its subordinate entities.

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:

  • Process is irreversible once completed
  • All subordinate entities will be deactivated
  • Scheduled deactivation year must be current year or later
  • Fiscal Units will be terminated after notice period (unless forced)
  • Force sub-deactivation bypasses normal notice periods
Authorizations:
api_key
path Parameters
locationId
required
integer <int32>

The unique identifier of the location to deactivate (minimum value: 2).

query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { }
}

Searches for locations based on given parameters in the request body.

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:

  • Maximum 250 results per request, default limit is 100 if not specified
  • If parentEntityId is provided, only direct children of that company are returned
  • State filtering supports: "Productive", "Test", "Deactivated"
  • Search is case-insensitive for text fields
  • Results include pagination metadata (total count, offset, limit)
  • Empty search criteria will return all accessible locations (up to limit)
Authorizations:
api_key
Request Body schema:

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.

Responses

Request samples

Content type
{
  • "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"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "currentCount": 1,
  • "totalCount": 1,
  • "foundItems": [
    ]
}

4.Register

Endpoints for managing cash registers and fiscal units within locations

Gets the register by the specified register number.

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:

  • Register numbers are typically 11 digits long
Authorizations:
api_key
path Parameters
registerNumber
required
string

The unique register number to retrieve (e.g., "12345678901").

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "register": {
    }
}

Searches for registers based on given parameters in the request body.

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:

  • Maximum 250 results per request, default limit is 100 if not specified
  • If pFarentEntityId is provided, only registers of that company are returned
  • Search text filtering is applied across register properties
  • Results include pagination metadata (total count, offset, limit)
  • Empty search criteria will return all accessible registers (up to limit)
Authorizations:
api_key
Request Body schema:

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).

Responses

Request samples

Content type
{
  • "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"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "currentCount": 1,
  • "totalCount": 1,
  • "foundItems": [
    ]
}

Deactivates a register or schedules deactivation for a future date.

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:

  • Register must not be in "DATA_PENDING" state to be deactivated
  • Registers with active subregisters cannot be deactivated
  • Registers still active with fiscal authorities cannot be deactivated
  • Already deactivated registers cannot be reanimated
  • Scheduled deactivation year must be current year or later
Authorizations:
api_key
path Parameters
registerNumber
required
string

The unique register number to deactivate (e.g., "12345678901").

query Parameters
deactivateAfterYear
integer <int32>

Optional year for scheduled deactivation (executed on December 31st at 23:59:59). Must be current year or later.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { }
}

Assigns a specific software release version to a register for update purposes.

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:

  • Register must exist and be accessible to the user
  • Target release must be compatible with the register's platform and architecture
  • Cross-platform updates have restrictions (e.g., Windows-only for major version changes)
  • Downgrade to version 1.x is not supported
  • EFR version 1.x is only available for ia32 architecture on Linux
  • Multiple target releases for the same parameters are not allowed
  • Update process runs in the background and may take time to complete

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

Authorizations:
api_key
path Parameters
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").

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "registerNumber": "00000006ZP6"
}

5.Purchase

Endpoints for managing orders and purchasing products and licenses

Retrieves all available products for purchase by the specified company.

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:

  • Products are filtered by state (Production/Test)
  • Efsta-only products are excluded from results
  • Purchase mode restrictions may hide prices or entire products
  • Results are ordered by CountryCode and Supplier
  • Language code defaults to "en" if not provided or invalid
  • Only active products are returned
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to retrieve products for (minimum value: 1).

query Parameters
languageCode
string

The language code for product descriptions and details (e.g., "en", "de", "fr"). Defaults to "en" if not provided.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "products": [
    ]
}

Retrieves a purchase overview for the specified company within the given date range.

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:

  • Results are ordered by purchase date (newest first)
  • Date format must be yyyyMMdd (e.g., "20230101" for January 1, 2023)
  • If fromDate is after tillDate, a validation error will be returned
  • Purchase mode restrictions may hide pricing information
  • Test orders are clearly marked in the results
  • Results include translated product names when available
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to retrieve purchase overview for (minimum value: 1).

query Parameters
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").

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "purchaseEntries": [
    ]
}

Creates a new purchase order for the specified company with the provided products and details.

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:

  • Request must not be empty and must pass validation
  • All specified companies must be accessible with Purchase permission
  • Products must be available and valid for the company
  • Order processing is initiated asynchronously
  • Collective invoice is automatically enabled
  • Language is set based on user's language code or defaults to "en-US"
Authorizations:
api_key
Request Body schema:

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.

Responses

Request samples

Content type
{
  • "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": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { }
}

6.Export

Endpoints for managing export operations and retrieving exported data

Initiates a new data export process for the specified company with the provided export parameters.

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 format
  • Transactions_CSV: Transactions export in CSV format
  • AT_DEP_7_RKSV: Austrian data collection protocol §7 RKSV
  • AT_DEP_131_BAO: Austrian data collection protocol §131 BAO
  • DE_DSFinVK: German DSFinVK export format
  • DE_TSE_Export_Journal: German TSE export (journal)
  • DE_GoBD: German GoBD export format
  • FR_Fiscal: French fiscal export format
  • FR_Grand_Totals: French grand totals export format
  • PT_SAFT: Portuguese SAF-T export format
  • SI_Export: Slovenian export format

📝 Important Notes:

  • Export process may take several minutes to complete
  • Export ticket number is returned immediately for tracking purposes
  • Export files are available for download for 30 days after completion
  • If no specific register is provided, all registers under the company are included
  • Export is processed asynchronously in the background
  • Use the ticket number to check export status and download completed files
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to export data for (minimum value: 1).

Request Body schema:

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.

Responses

Request samples

Content type
{
  • "registerNumber": "000000011Z3",
  • "from": "2024-01-01T00:00:00",
  • "till": "2024-12-31T23:59:59",
  • "exportType": "Journal_Archive_Json",
  • "externalRecipientEmail": "external@example.com"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "ticketNr": "ACCB35183AEF9544B225CF78BBF4399A",
  • "password": "Kj8mP2qR5wL9xN3vB7zT4yC6hF1"
}

Retrieves the list of all export operations for the specified company, including their current status and details.

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:

  • Export history is maintained for 30 days after completion
  • Export list is ordered by creation date (newest first)
  • Completed exports show file size and download expiration time
  • Failed exports include error details and failure reasons
  • Only exports with ExportType set are returned
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to retrieve exports for (minimum value: 1).

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "tickets": [
    ]
}

Downloads the completed export file using the specified ticket number.

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:

  • Export must be in "Completed" status to be downloadable
  • Export files are available for download for 30 days after completion
  • If multiple files exist, they are packaged into a single ZIP archive
  • If only one ZIP file exists, it is returned directly
  • File name follows the pattern: "{ticketNr}.zip"
  • Content-Type is set to "application/zip"
Authorizations:
api_key
path Parameters
ticketNr
required
string

The unique ticket number identifying the export to download (e.g., "TKT-123456789").

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { }
}

7.Fiscal

Endpoints for managing fiscal units and tax data in the context of fiscalization

Retrieves the list of all available fiscal reporting periods for the specified German company.

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:

  • Only available for German companies with active fiscal registration
  • Results include both company and location-level reporting periods
  • Organization companies (CompanyType "O") are not supported
  • Results are filtered by company hierarchy and user permissions
  • Empty results indicate no fiscal reporting periods are available
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the German company to retrieve fiscal reporting periods for (minimum value: 1).

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "reportingList": [
    ]
}

Retrieves the fiscal reporting data for the specified German reporting period.

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:

  • Reporting data is compiled from all registers and fiscal units within the company
  • Data format complies with German fiscal authority requirements (ELSTER format)
  • Street address is automatically parsed into components (name, number, suffix)
  • Recording systems count excludes deactivated systems
  • Previous reporting GUID is provided for data continuity
  • Data is only available for companies with valid company types (not Organization)
  • Owner company validation ensures proper hierarchy access
Authorizations:
api_key
path Parameters
guid
required
string

The unique identifier of the reporting period to retrieve data for (e.g., "12345678-1234-1234-1234-123456789012").

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "reportingContact": {
    },
  • "wIdNr": "string",
  • "useLocationContact": false,
  • "companyData": {
    },
  • "recordingSystems": [
    ],
  • "previousGuid": "550e8400-e29b-41d4-a716-446655440000",
  • "state": "Ready"
}

Creates a fiscal report.

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:

  • Report submission is legally binding and cannot be reversed
  • Disclaimer acceptance is mandatory for report submission
  • Report is automatically formatted according to ELSTER specifications
  • Submission confirmation is provided by German tax authorities
  • Failed submissions may require manual intervention or correction
  • Report data is locked after successful submission
  • Digital signature is applied automatically during submission
Authorizations:
api_key
path Parameters
guid
required
string

The unique identifier of the reporting period to create and submit the report for (e.g., "12345678-1234-1234-1234-123456789012").

query Parameters
acceptDisclaimer
boolean

Boolean flag indicating acceptance of legal disclaimer and submission terms. Must be true for submission to proceed.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { }
}

Retrieves the completed fiscal report document for the specified German reporting period.

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:

  • Report document is only available after successful submission
  • Document includes official submission confirmations and reference numbers
  • Report format matches the version submitted to tax authorities
  • Access to official reports requires disclaimer acceptance
  • Report documents are archived and available for audit purposes
  • Document includes digital signature verification information
  • File format depends on state: XML for "CREATED", PDF for "SENT"
  • File name follows pattern: "{ECI}{Criteria}{Time}_{Time}.{extension}"
Authorizations:
api_key
path Parameters
guid
required
string

The unique identifier of the reporting period to retrieve the report for (e.g., "12345678-1234-1234-1234-123456789012").

query Parameters
acceptDisclaimer
boolean

Boolean flag indicating acceptance of legal disclaimer for accessing official report. Must be true for access to proceed.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { }
}

8.User

Endpoints for managing users and their permissions

Retrieves the currently active user profile information for the authenticated session.

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:

  • User information is based on the authentication method used (API key, token, etc.)
  • This endpoint can be used to verify API key validity and user status
  • Returns null if user profile cannot be found or mapped
  • User profile is mapped from internal user profile structure
Authorizations:
api_key

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "userProfile": {
    }
}

Creates and sends an invitation for a new user to join the specified company with defined permissions.

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 contact
  • suggestedRealName (string): The suggested real name for the user that the real user can change when logging in for the first time
  • inviter: The ID of the user who is sending the invitation.

📝 Important Notes:

  • Invitation email is sent to the specified email address with registration instructions
  • Default role is "VIEWER" if no role is specified in the request
  • Invitation includes a secure token with expiration date
  • Only users with ManageUsers permission can send invitations
  • API endpoint throttling may apply to prevent spam
  • Duplicate invitations to the same email for the same company are prevented

Invitation Process:

  • Validation: Email format, company access, and role validity are checked
  • Creation: Invitation record is created with secure token
  • Email Delivery: Invitation email is sent with registration link
  • Registration: User follows link to complete registration process
  • Activation: User account is activated and linked to the company

👨‍💼Role Assignment:

  • ADMIN - Full system access (8 permissions)

    • ✅ ReadCompany, ManageCompany, ManageRegister, ManageUsers, ManageBill, Purchase, ExportData, ReadRegister
  • EDITOR - Management capabilities without purchasing (7 permissions)

    • ✅ ReadCompany, ManageCompany, ManageRegister, ManageUsers, ManageBill, ExportData, ReadRegister
    • ❌ Purchase
  • DATAFISCAL - Company and data management (4 permissions)

    • ✅ ReadCompany, ManageCompany, ReadRegister, ExportData
    • ❌ ManageRegister, ManageUsers, ManageBill, Purchase
  • DATAVIEWER - Read-only with export capabilities (3 permissions)

    • ✅ ReadCompany, ReadRegister, ExportData
    • ❌ ManageCompany, ManageRegister, ManageUsers, ManageBill, Purchase
  • FISCAL - Basic company management (3 permissions)

    • ✅ ReadCompany, ManageCompany, ReadRegister
    • ❌ ManageRegister, ManageUsers, ManageBill, Purchase, ExportData
  • VIEWER - Read-only access (2 permissions)

    • ✅ ReadCompany, ReadRegister
    • ❌ ManageCompany, ManageRegister, ManageUsers, ManageBill, Purchase, ExportData
Authorizations:
api_key
Request Body schema:

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.

Responses

Request samples

Content type
{
  • "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
}

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { }
}

Removes user access permissions for a specific company and all its child entities.

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:

  • Hierarchical Impact: Removes permissions from the target company AND all child entities
  • Parent Permission Restoration: If the user has roles in parent companies, those roles may be automatically restored for the affected hierarchy
  • No Parent Roles: If no parent company roles exist, the user will lose all access to the company hierarchy
  • Irreversible Action: This operation cannot be undone - user permissions must be manually re-assigned if needed

⚠️ Warning: Use with caution as this affects the entire company hierarchy, not just the specified company.

Authorizations:
api_key
query Parameters
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).

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { }
}

Retrieves all users with permissions for a specific company, including their roles and detailed permission lists.

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:

  • Complete Permission Overview: Shows both role names and expanded permission details for transparency
  • User Management: Essential for admin users to understand who has access to what
  • Security Auditing: Provides detailed permission breakdown for compliance reviews
  • Role-Based Access: Displays the relationship between roles and actual permissions
  • Only non-inherited roles are included in the results
  • Results are ordered by user name and role name
  • Empty results indicate no users have direct access to the company
Authorizations:
api_key
query Parameters
companyId
integer <int32>

The unique identifier of the company to retrieve user permissions for (minimum value: 1).

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "users": [
    ],
  • "totalCount": 12
}

9.Tools

Utility endpoints and tools for various administration tasks and utilities

Tests whether the authenticated user has the specified permission on the given company.

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:

  • This endpoint is useful for API clients to verify access before attempting operations
  • Returns false if the user does not have the specified permission
  • Returns true if the user has the specified permission
  • Permission check is performed using the current authenticated user's context
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the company to test permissions for (minimum value: 1).

query Parameters
permissionType
string

The type of permission to test. Select from the dropdown menu.

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "hasPermission": true
}

Retrieves the complete organizational hierarchy for a company.

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:

  • Organization, company and locations are always displayed
  • Results are ordered by PATH for proper hierarchical structure
  • Empty results indicate no accessible entities in the hierarchy
Authorizations:
api_key
path Parameters
companyId
required
integer <int32>

The unique identifier of the base company for hierarchy retrieval (minimum value: 2).

query Parameters
includeRegisters
boolean

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "errorCode": null,
  • "errorMessage": null,
  • "errorMessageTranslated": null,
  • "validationErrors": { },
  • "rootNode": {
    }
}