Embedded tax filing

Overview

Automate tax filing with real-time estimations, deductible tips, and tax declaration pre-filling. Norman API will help your users maximize their tax deductions and easily generate all their tax declarations.

🇩🇪 Norman supports all required taxes for freelancers, self-employed, and individuals in Germany. It is the official software provider of the German online tax office Elster and has a built-in proprietary integration library to ELSTER Rich Client (ERiC).


What is ERiC?

ELSTER Rich Client (ERiC) is a C library developed by the German tax authorities to facilitate the secure and standardized electronic transmission of tax-related data to the German tax offices (Finanzamt). More you can read here under the section ELSTER - the technical concept


List of tax reports supported by Norman


Embedding the Tax Filing into Your Application

There are two primary ways to embed tax filing functionality into your application:

1. Full-Cycle Embedding of Norman’s Products 💪

To use the full power of Norman automation tax filing, including tax report line calculations, AI-driven estimations, categorization, tips, pre-accounting based on company transactions, and more, you need to fully integrate Norman’s products into your application.

The full integration looks in the way as demonstrated in the following scheme:

To quickly get started with the full integration, refer to our Quickstart Guide.
For relevant API endpoints for tax submission, visit this link: Embedded tax filing endpoints

2. Direct Tax Filing Using Norman’s Proprietary ELSTER Integration 📝

Suppose your application already handles accounting and tax calculation, but you need a way to file reports through Germany’s ELSTER system. In that case, Norman offers a proprietary integration to ELSTER Rich Client (ERiC) through REST API endpoints.

This integration allows you to submit your pre-calculated tax report lines directly to ELSTER, as shown in the following flow:


The Tax API helps you get from unknown XML random codes to just basic JSON payload requests to file taxes:


How to Use Norman’s Proprietary ELSTER Integration

2.1. Prepare Your JSON Payload

After performing accounting within your application and calculating the necessary values, format your data into a JSON payload, as documented.

Example JSON Payload for Regular VAT Submission (Umsatzsteuer-Voranmeldung):

{
  "payload": {
    "form_data": {
      "steuernummer": "18181508155",
      "submission_without_tax_nr": false,
      "bufa_nr": "1096",
      "bundesland": "BY",
      "vat_year": 2024,
      "vat_month": 3,
      "vat_tax_due": -80.9,
      "vat_percent_19_sum_total": 1680,
      "vat_percent_7_sum_total": 93,
      "vat_expenses_sum_total": 406.77,
      "vat_other_rates_net_amount": 0,
      "vat_other_rates_tax_amount": 0,
      "vat_intra_community_supplies": 0,
      "vat_other_tax_exempt": 0,
      "vat_sales_subject_grestg_net_amount": 0,
      "vat_sales_subject_grestg_tax_amount": 0,
      "vat_intra_eu_purchases_19_percent": 0,
      "vat_intra_eu_purchases_7_percent": 0,
      "vat_intra_eu_purchases_other_percents_net": 0,
      "vat_intra_eu_purchases_other_percents_tax": 0,
      "vat_sales_local_reverse_charge": 0,
      "vat_sales_non_taxable_goods_eu": 0,
      "vat_sales_non_taxable_goods_out_eu": 0,
      "vat_purchase_reverse_charge_in_eu_net": 0,
      "vat_purchase_reverse_charge_in_eu_tax": 0,
      "vat_tax_exempt_trans_without_tax_deduction": 0,
      "vat_other_services_net": 0,
      "vat_other_services_tax": 0,
      "vat_paid_intra_goods_eu_tax": 0,
      "vat_paid_import_goods_outside_eu": 0,
      "vat_paid_import_services_eu": 0,
      "person_a_idnr": "",
      "person_a_last_name": "Horst",
      "person_a_first_name": "Mustermann",
      "person_a_street": "Hermann-Geib-Str.",
      "person_a_street_number": "3",
      "person_a_plz": "93047",
      "person_a_town": "Regensburg",
      "person_a_email": "[email protected]",
      "person_a_telephone_number": "0815/99999999"
    },
    "meta_data": {
      "year": 2024
    }
  },
  "client_identifier": "",
  "is_test": true
}

2.2. Send the JSON Payload

Submit your JSON payload directly to Norman’s API endpoint using the following endpoint: Tax API: Create a tax report

📌 Ensure you include your credentials in the custom authorization header: Institution.

2.3. Receive the Official PDF Report

After submission, you’ll receive an official PDF tax report generated by ELSTER. This PDF serves as proof of submission and can be provided to your customers. You can request either a test (preview) submission or a production submission by toggling the is_test field in the payload.

Example of generated official preview PDF:


📌 All reports sent with the is_test=false field in the payload will not actually be transmitted to ELSTER but will generate a test PDF report instead.

Norman stores all submitted report data in the database, allowing you to retrieve a list of all your reports and their corresponding PDF files through the API, if needed. In the Sandbox environment, only test report generation is available, whether for preview or simulated production submission.

For additional JSON payload examples and API endpoints for different tax reports, check Norman’s Tax API endpoint documentation.


If you have any questions or need assistance with implementation, feel free to reach out to our support team at [email protected].