UG / GmbH
Create a tax registration for a UG or GmbH. Generates the ELSTER Kapitalgesellschaft form.
POST https://api.beglaubigt.de/v1/tax-registration
Authorization
Include an Authorization header with a Bearer token:
Authorization: Bearer <token>
Example: Bearer sk-123e4567-e89b-12d3-a456-426614174000
Environment
The environment comes from the company your API key belongs to, not from the request. A sandbox company's key creates sandbox registrations, filed against the ELSTER test environment; a production company's key creates live ones. To test, use the API key of your sandbox company.
The example tax ID 09481663279 is ELSTER's test IdNr: the sandbox accepts it, and production rejects it with
400 VALIDATION_ERROR. A production registration needs each person's real tax ID.
Idempotency
To retry a request safely after a timeout or a 5xx, send an Idempotency-Key header and reuse the same key
on every retry. A retry then gets the first response back instead of creating a second case. See
Idempotency.
Idempotency-Key: 5b0c8e8a-7d2f-4d0e-9a51-1f0b6a4c2e11
Request
Core
company_idstringThe UUID of the client company the tax registration belongs to. A company holds at most one tax
registration and one trade registration, so use the same company_id on both endpoints to keep a client's
registrations together, in parallel or in any order.
- A UUID that does not exist yet: the company is created under that id. You can choose the id yourself.
- An existing company of yours: the registration is added to it. If it already has a tax
registration, the request returns
409 COMPANY_ALREADY_REGISTERED. If it is in another environment than your API key's company (see Environment), it returns409 ENVIRONMENT_MISMATCH. - A company created by another account:
404 COMPANY_NOT_FOUND. - Omitted: a new company is created and its id returned as
company_id.
Example: 9b2e4c7a-1d3f-4a8b-9c6e-2f5a7b8c1d0e
business_addressobjectBilling address of the client company created for you. Only applies when company_id is omitted; it is
rejected if sent together with company_id.
streetstringrequiredStreet and house number.
Example: Torstraße 1
zipstringrequiredPostal code.
Example: 10119
citystringrequiredCity.
Example: Berlin
countrystringrequiredCountry as an ISO 3166-1 alpha-2 code.
Example: de
street_second_linestringA second address line (c/o, suite, …).
Example: c/o Muster
statestringState or region.
Example: Berlin
legal_formstringrequiredThe legal form of the company.
Possible values: ug or gmbh
packagestringrequiredThe service package.
Possible values: self or assisted (guided is still accepted as a deprecated alias of assisted)
signature_pathstringrequiredThe client's signature as an SVG path string.
Example: M 10 10 L 90 90 M 90 10 L 10 90
client_referencestringA custom reference string for your own tracking.
Example: REF-2025-001
Company & Founding
namestringrequiredRegistered company name including the legal-form suffix. Max 120 characters.
Example: Muster Handels GmbH
purposestringrequiredDescription of the business activity. Max 200 characters.
Example: Softwareentwicklung und IT-Beratung.
notarization_datestringrequiredDate of the notarial formation deed (Gründungsurkunde).
Example: 2025-01-15
operational_activity_start_datestringrequiredThe date the business begins operating. Must not be before notarization_date. Format: YYYY-MM-DD.
Example: 2025-02-01
fiscal_year_deviates_from_calendarbooleanrequiredWhether the fiscal year differs from the calendar year.
Possible values: true or false
fiscal_year_deviating_start_datestringStart of the deviating fiscal year. Required when fiscal_year_deviates_from_calendar = true. Must not
be before notarization_date, and cannot be 1 January: a fiscal year starting then is the calendar year,
so send fiscal_year_deviates_from_calendar = false instead. Format: YYYY-MM-DD.
Example: 2025-04-01
capitalnumberrequiredShare capital in euros, a whole number. A UG must be between 1 and 24999; a GmbH
must be at least 25000.
Example: 25000
paid_in_capitalnumberrequiredAmount of the share capital already paid in. Cannot exceed capital.
Example: 25000
formation_typestringrequiredHow the company was founded: cash for a cash contribution (Bargründung), in-kind for a
contribution in kind (Sachgründung), or conversion when it results from converting an existing
business (Umwandlung).
Possible values: cash, in-kind or conversion
conversion_typestringThe kind of conversion. Required when formation_type = conversion, and only allowed then: merger
for a merger (Verschmelzung), division for a split (Spaltung), form-change for a change of legal
form (Formwechsel), or asset-transfer for a transfer of assets (Vermögensübertragung).
Possible values: merger, division, form-change or asset-transfer
is_holdingbooleanWhether the company only manages its own assets.
Possible values: true or false
addressobjectrequiredRegistered business address (see the Address object).
Directors & Shareholders
directorsarrayrequiredManaging directors. 1–9 entries.
first_namestringrequiredFirst name. Max 72 characters.
Example: Max
middle_namestringMiddle name. Appended to the first name in the ELSTER filing. Max 72 characters.
Example: Karl
last_namestringrequiredLast name. Max 72 characters.
Example: Mustermann
emailstringContact email, kept for follow-up, not part of the ELSTER filing.
Example: max.mustermann@example.com
phonestringContact phone, kept for follow-up, not part of the ELSTER filing.
Example: +491701234567
dobstringrequiredDate of birth. Format: YYYY-MM-DD.
Example: 1985-07-10
tax_identification_numberstringGerman tax ID (Steuer-Identifikationsnummer): 11 digits, validated with the ISO 7064 (Mod 11,10) checksum.
Example: 09481663279
addressobjectrequiredThe director's address (see the Address object).
shareholdersobjectrequiredShareholders, split into two arrays: individuals (natural persons) and entities (legal entities).
At least 1 and at most 99 across both, and the share_percentage values must sum to exactly 100.
individualsarrayNatural-person shareholders.
first_namestringrequiredFirst name. Max 72 characters.
Example: Max
last_namestringrequiredLast name. Max 72 characters.
Example: Mustermann
dobstringrequiredDate of birth. Format: YYYY-MM-DD.
Example: 1985-07-10
tax_identification_numberstringGerman tax ID (Steuer-Identifikationsnummer): 11 digits, validated with the ISO 7064 (Mod 11,10) checksum.
Example: 09481663279
addressobjectrequiredAddress (see the Address object).
share_percentagenumberrequiredOwnership share in percent, up to 100 (2 to 4 decimal places allowed).
Example: 50
entitiesarrayLegal-entity shareholders.
namestringrequiredCompany name. Max 120 characters.
Example: Beispiel Holding GmbH
addressobjectrequiredAddress (see the Address object).
share_percentagenumberrequiredOwnership share in percent, up to 100 (2 to 4 decimal places allowed).
Example: 50
notaryobjectThe founding notary (Gründungsnotar). Optional; when present, all sub-fields are required.
first_namestringFirst name. Max 72 characters.
Example: Julia
last_namestringLast name. Max 72 characters.
Example: Notarin
addressobjectThe notary's office address (see the Address object).
Commercial Register
The company's Handelsregister state, grouped under commercial_register. status says where the
company stands, and drives which of the other fields are required.
commercial_registerobjectThe register state. Omit it entirely for a company that has not applied yet (same as status: not-applied).
statusstringrequiredWhere the company stands in the register.
not-applied: no register application yet. Carries no other fields.application-filed: the application is filed but the entry is still pending. Requiresregistration_application_date.registered: the company is entered. Requiresregistration_number,registration_dateandregistration_court.
Possible values: not-applied, application-filed or registered
registration_numberstringThe Handelsregister number, once the company has been entered. Send the number only; a leading HRB
is optional and dropped (a GmbH/UG is always Abteilung B). A suffix is kept with its space removed
(12345 B becomes 12345B). Required when status is registered.
Example: 12345
registration_datestringDate the company was entered in the register. Required when status is registered. Format: YYYY-MM-DD.
Example: 2025-01-20
registration_application_datestringDate the registration application was filed. Required when status is application-filed. Format: YYYY-MM-DD.
Example: 2025-01-10
registration_courtstringRegistering court. Required when status is registered. ELSTER also needs it when status is
application-filed: without it ELSTER refuses the registration, and the request fails with 422 ELSTER_PLAUSIBILITY_ERROR.
Example: Charlottenburg
Bank Account
ibanstringThe company's bank account IBAN.
Example: DE89370400440532013000
bicstringThe bank identifier (BIC/SWIFT), 8 to 11 characters. Required when iban is a non-German IBAN.
Example: COBADEFFXXX
Revenue & Profit Estimates
financial_estimatesobjectrequiredEstimated revenue and taxable profit for the formation year and the following year. All amounts are whole euros.
formation_yearobjectrequiredEstimates for the formation year (the year the business starts operating).
revenue_amountnumberrequiredEstimated revenue. Cannot be lower than profit_amount.
Example: 60000
profit_amountnumberrequiredEstimated taxable profit.
Example: 20000
following_yearobjectrequiredEstimates for the year after the formation year.
revenue_amountnumberrequiredEstimated revenue. Cannot be lower than profit_amount.
Example: 90000
profit_amountnumberrequiredEstimated taxable profit.
Example: 40000
VAT
What is considered a small business (Kleinunternehmer)?
It uses the VAT exemption under § 19 UStG: it does not charge VAT on its invoices and files no VAT returns.
- Founding year: qualifies when founding-year revenue is ≤ €25,000.
- Later years: stays a Kleinunternehmer while the previous year was ≤ €25,000 and the current year does not exceed €100,000.
To use it, set vat.regime to small-business. The VAT-calculation fields (vat.accounting_method,
vat.estimated_balance_type, vat.estimated_balance_amount and vat.return_frequency) then do not
apply and are rejected if sent.
Setting vat.regime to standard opts the client out of the small-business regime, so they charge
VAT on invoices and file VAT returns.
vatobjectrequiredThe company's VAT setup.
regimestringThe VAT regime the company elects. small-business elects the small-business exemption (Kleinunternehmer,
§ 19 UStG); standard is the regular VAT regime (Regelbesteuerung). Required when the election is available
(founding-year revenue ≤ €25,000; the following-year estimate does not affect it). Above €25,000 the company
is on the regular VAT regime regardless: omit the field or send standard, as small-business is rejected
with 400.
Possible values: small-business or standard
accounting_methodstringWhen you owe the VAT you've charged:
accrual(Sollversteuerung): the VAT is due as soon as you issue the invoice, even if the customer hasn't paid yet.cash(Istversteuerung): the VAT is due only once the customer actually pays.
A KapG can choose cash only when founding-year revenue is ≤ €800,000; above that, accrual is required.
Required unless the company is a small business (Kleinunternehmer), where it does not apply.
Possible values: accrual or cash
estimated_balance_typestringWhether you expect to owe VAT to the tax office (payable, Zahllast) or receive a refund (refundable, Überschuss).
Required unless the company is a small business (Kleinunternehmer): that is, when vat.regime is standard, or founding-year revenue is more than €25,000.
Possible values: payable or refundable
estimated_balance_amountnumberEstimated net VAT amount for the year, either payable or refunded. Required unless the company is a small business (Kleinunternehmer)
(see estimated_balance_type).
Example: 4000
return_frequencystringHow often VAT returns are filed. quarterly is the default. You can choose monthly (for faster
input-VAT refunds) only when you expect a refund (estimated_balance_type = refundable) of more than €9,000,
and the field is required in that case.
Possible values: monthly or quarterly
request_vat_idbooleanWhether to request an EU VAT identification number (USt-IdNr), used for cross-border B2B trade.
Possible values: true or false
sells_via_online_marketplacesbooleanWhether the company sells through online marketplaces such as Amazon or Etsy (§ 25e UStG record-keeping).
Possible values: true or false
request_reverse_charge_certificatebooleanWhether to apply for the reverse-charge certificate for construction and building-cleaning services
(USt 1 TG, § 13b UStG). When true, reverse_charge_service_type is required.
Possible values: true or false
reverse_charge_service_typestringThe type of service the reverse-charge certificate covers. Required when request_reverse_charge_certificate is true.
Possible values: construction, building-cleaning or both
Employees & Payroll
has_employeesbooleanWhether there are employees. Enables the payroll block. When true, the nested fields are all required.
Possible values: true or false
employee_countnumberrequiredNumber of employees.
Example: 4
shareholder_employee_countnumberrequiredNumber of employees who are also shareholders.
Example: 1
payroll_start_datestringrequiredStart of wage payments. Must not be before operational_activity_start_date. Format: YYYY-MM-DD.
Example: 2025-05-01
estimated_annual_wage_taxnumberrequiredEstimated annual wage tax.
Example: 20000
Shared Objects
AddressobjectstreetstringrequiredStreet including the house number, which must be present, e.g. Hauptstraße 12 or Hauptstraße 12a. Max 72 characters.
Example: Torstraße 1
street_second_linestringAdditional address line (floor, c/o, …), kept as supplementary information.
Example: 2. Etage
zipstringrequiredPostal code. A German address must be a 5-digit code.
Example: 60311
citystringrequiredCity. Max 72 characters, no digits.
Example: Frankfurt am Main
statestringFederal state (Bundesland).
Example: Hessen
countrystringrequiredISO 3166-1 alpha-2 country code. de is domestic; any other value marks the address as abroad.
Example: de
Response
A self registration is filed with ELSTER within the request. A request that fails validation, or that
ELSTER refuses, is an error and creates nothing. An assisted one is reviewed by a lawyer before it is
filed.
resultstringOutcome of the request.
Possible values: success or error
messagestringHuman-readable outcome message.
Example: Tax registration filed with ELSTER.
company_idstringUUID of the client company the case belongs to: the company_id you sent, or the one created for you when
you omitted it. Pass it as company_id to the trade registration endpoint to register the same company there.
Example: 9b2e4c7a-1d3f-4a8b-9c6e-2f5a7b8c1d0e
tax_registration_idstringUUID of the tax registration case. Use it with the GET endpoint.
Example: 450506c1-d1a7-46e2-aca6-41a816805595
statusstringHow far the registration got.
Possible values:
submitted: filed with ELSTER.transfer_ticketanddocumentsare set.validated: anassistedregistration, waiting for the lawyer's review before it is filed.blocked: rare. The filing failed in a way that may have reached ELSTER, so the case is kept and our team checks it with ELSTER and finishes it; thetax-registration.completedwebhook and the GET endpoint report the result. Nothing to resend.
tax_officeobjectThe tax office (Finanzamt) the registration is filed with, resolved from the address.
numberstringThe tax office's four-digit number.
Example: 2614
namestringThe tax office's name.
Example: Frankfurt am Main
transfer_ticketstringELSTER's receipt for the filing, present when status is submitted.
Example: et1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d
documentsobjectDownload links for the filing's PDFs, present when status is submitted. Each link is valid for
24 hours; the GET endpoint returns fresh ones.
questionnaire_urlstringThe tax registration questionnaire as filed. null if it could not be generated; GET returns it
once it is.
confirmation_urlstringELSTER's confirmation of the filing, with the transfer ticket. null if it could not be generated;
GET returns it once it is.
timestampstringISO 8601 timestamp of the response.
Example: 2025-02-01T07:19:30.443Z
Errors
| Status | error_code | When | Created |
|---|---|---|---|
400 | VALIDATION_ERROR | A field is missing or invalid. details lists each field with its problem. | Nothing |
401 | (none) | The API key is missing or invalid. The body is { "error": "Unauthorized: Missing or invalid token" }. | Nothing |
404 | COMPANY_NOT_FOUND | The company_id you passed belongs to another account. | Nothing |
409 | COMPANY_ALREADY_REGISTERED | The company_id you passed already has a tax registration. | Nothing |
409 | ENVIRONMENT_MISMATCH | The company_id you passed belongs to a different environment than your API key. | Nothing |
422 | FINANZAMT_NOT_FOUND / VALIDATION_ERROR | No tax office matches the address, or the dates are out of order. | Nothing |
409 | IDEMPOTENCY_REQUEST_IN_PROGRESS | A request with the same Idempotency-Key is still running. Retry with the same key. | Nothing |
422 | IDEMPOTENCY_KEY_REUSED | The Idempotency-Key was already used with a different request body. | Nothing |
422 | ELSTER_PLAUSIBILITY_ERROR | ELSTER refuses the registration. details names each field to fix and what ELSTER needs. | Nothing |
500 | PROCESSING_ERROR | An error on our side. Contact support with the timestamp. | Nothing |
Example
{
"legal_form": "gmbh",
"name": "Muster Handels GmbH",
"purpose": "Handel mit Elektronikwaren",
"package": "self",
"signature_path": "M 10 10 L 90 90 M 90 10 L 10 90",
"notarization_date": "2025-01-15",
"operational_activity_start_date": "2025-02-01",
"fiscal_year_deviates_from_calendar": false,
"capital": 25000,
"paid_in_capital": 25000,
"formation_type": "cash",
"address": {
"street": "Hauptstrasse 12",
"street_second_line": "2. Etage",
"zip": "60311",
"city": "Frankfurt am Main",
"country": "de"
},
"directors": [
{
"first_name": "Max",
"middle_name": "Karl",
"last_name": "Mustermann",
"email": "max.mustermann@example.com",
"phone": "+491701234567",
"dob": "1985-07-10",
"tax_identification_number": "09481663279",
"address": {
"street": "Hauptstrasse 12",
"zip": "60311",
"city": "Frankfurt am Main",
"country": "de"
}
}
],
"shareholders": {
"individuals": [
{
"first_name": "Max",
"last_name": "Mustermann",
"dob": "1985-07-10",
"tax_identification_number": "09481663279",
"address": {
"street": "Hauptstrasse 12",
"zip": "60311",
"city": "Frankfurt am Main",
"country": "de"
},
"share_percentage": 100
}
],
"entities": []
},
"financial_estimates": {
"formation_year": {
"revenue_amount": 60000,
"profit_amount": 20000
},
"following_year": {
"revenue_amount": 90000,
"profit_amount": 40000
}
},
"vat": {
"accounting_method": "accrual",
"estimated_balance_type": "payable",
"estimated_balance_amount": 8000
},
"commercial_register": {
"status": "registered",
"registration_number": "12345",
"registration_date": "2025-01-20",
"registration_court": "Frankfurt am Main"
},
"client_reference": "REF-2025-001"
}{
"response": {
"result": "success",
"message": "Tax registration filed with ELSTER.",
"company_id": "9b2e4c7a-1d3f-4a8b-9c6e-2f5a7b8c1d0e",
"tax_registration_id": "450506c1-d1a7-46e2-aca6-41a816805595",
"status": "submitted",
"tax_office": { "number": "2614", "name": "Frankfurt am Main" },
"transfer_ticket": "et1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d",
"documents": {
"questionnaire_url": "https://app.beglaubigt.de/download?bucket=company-documents&id=3f1c2b9e-7d4a-4c1e-9b2f-5a8d6e7f9c0b&token=a1H...To5",
"confirmation_url": "https://app.beglaubigt.de/download?bucket=company-documents&id=8a2d4e6f-1b3c-4d5e-8f9a-0b1c2d3e4f5a&token=b2J...Up6"
},
"timestamp": "2025-02-01T07:19:30.443Z"
}
}POSTOverview
Submit a company's details to register it for tax. A self registration is filed with ELSTER within the request, and the response carries ELSTER's transfer ticket and the filing's documents. If the filing does not go through, one of our managers resolves it and files it.
GbR / eGbR
Create a tax registration for a GbR or eGbR (Personengesellschaft). Generates the ELSTER FsE_PersG form.