# Go live in Germany

Work through this checklist before you send German e-invoices in production. You need German documents that already pass in sandbox and the company's registered details.

> **Before you start**
>
> - Every German document type you will send passes in sandbox. See [Test in sandbox](https://docs.complyance.io/get-started/sandbox/#united-arab-emirates-belgium-and-germany).
> - The company’s legal name and tax identifiers, and its Peppol participant ID if it has one.
> - For each buyer: its registered Peppol participant ID and scheme, and for a public-sector buyer its Leitweg-ID.

## Step 1: Onboard the company in production

A company onboarded in sandbox is not registered in production.

1. In the Invoice Portal, select **Germany** and **Production**.
2. Follow [Onboard a company in Germany](https://docs.complyance.io/countries/de/onboarding/) with the company’s real details.
3. If the form offers Peppol setup, enter the company’s own participant details.

Open **Onboard** and wait for a completed registration status. A `Pending` registration is not ready to send invoices.

## Step 2: Move your integration to production

- Create a key under **Production API keys** with **Write** access. See [Create an API key](https://docs.complyance.io/one-platform/developer-portal/api-keys/).
- With **Production** selected, link the source you added during onboarding to your mapping and the company’s branch. See [Manage sources and their links](https://docs.complyance.io/one-platform/developer-portal/source-management/).
- Send `"environment": "production"` and the production source’s `name:version` in every Unify request. If you use an SDK, change its environment setting; each [SDK guide](https://docs.complyance.io/sdks/) shows where.
- Check the production credit balance in **Credits**. To receive purchase invoices from your suppliers through webhooks, create a separate production webhook. See [Credits](https://docs.complyance.io/one-platform/invoice-portal/credits/) and [Set up a webhook](https://docs.complyance.io/one-platform/developer-portal/webhooks/setup/).

## Step 3: Check the required test cases

If your workspace uses the **Default GETS Mapping**, the test cases for Germany must show **Passed** in [Test your mapping](https://docs.complyance.io/one-platform/developer-portal/integration-engine/test/). Until they do, Unify refuses invoices with `412` and `failed_precondition`, in sandbox and in production.

## Step 4: Send the first production invoice

Send one real invoice to a buyer and follow it with its `documentId`. See [Submit and retrieve](https://docs.complyance.io/api-reference/unify/submit-and-retrieve/#follow-the-document). For Germany, Complyance’s last step is delivering the invoice to the buyer’s Peppol access point: the Invoice Portal then shows it as **Submitted**, with delivery **Delivered**. The API does not report `final_valid` for a German invoice, and `isTerminal` stays `false` after delivery. Stop checking when `state` is `delivery_success` or `delivery_failed`. `rejected` means it failed validation: read `errors` for the reason. Confirm with the buyer that the invoice arrived.

## German checks

- Replace every sample participant, tax and bank identifier from your tests with real values. Use the scheme actually assigned to each party, such as `9930` for a German VAT identifier.
- Supply a buyer accounting reference on B2B invoices. For a public-sector buyer, add the `b2g` modifier, send its Leitweg-ID in `extensions.de_leitwegId` without a buyer accounting reference, and ask the authority which format and channel it accepts.
- Check each document type against the [Germany field reference](https://docs.complyance.io/countries/de/fields/) and the [validation rules](https://docs.complyance.io/countries/de/validation-rules/).

## If something goes wrong

**The company stays `Pending`:** use **Refresh status** if it is offered, and check again later.

**`403` with `permission_denied`:** the key is a sandbox key. Use a production key with `"environment": "production"`.

**`412` with `failed_precondition`:** the required test cases for Germany have not all passed. Run them, then send the document again. [Unify errors](https://docs.complyance.io/api-reference/unify/errors/) lists each reason.

**The buyer does not receive the invoice:** check the buyer’s participant ID and scheme with them, then check the document’s status.

> **You are live**
>
> The company is registered in production, and your first production invoice reached its buyer. Keep following each document to its final status.

Last updated 16 October 2026

Source: https://docs.complyance.io/countries/de/go-live/
