---
title: "Erzeugt eine Rechnung aus Empfänger und Positionen"
method: POST
path: "/api/v1/rechnungen"
---

# Erzeugt eine Rechnung aus Empfänger und Positionen

`POST /api/v1/rechnungen`

## Request

- Base URL: `https://rechnungslotse.de`
- URL: `https://rechnungslotse.de/api/v1/rechnungen`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://rechnungslotse.de/authorize`, token URL `https://rechnungslotse.de/api/oauth/token`, scopes: `schreiben`)

Erzeugt eine Rechnung aus Empfänger und Positionen. Absenderangaben, Nummer und Zahlungsziel kommen aus dem Betrieb – der Aufruf liefert sie nicht mit. Pflicht ist `lines`; `buyer`, `buyerReference`, `note`, `paymentTerms` und `issueDate` (Vorgabe heute) sind optional. Idempotent über `Idempotency-Key`. Eine Anlage dauert rund sechs Sekunden (Prüfung, PDF, ZUGFeRD); der Prüfdienst nimmt drei gleichzeitig, weitere warten bis 20 s und bekommen sonst 503 mit `Retry-After` – dann später wiederholen, mit demselben Key.

## Headers

- `Idempotency-Key` string

## Request body

- RechnungAnlegen
  - `buyer` object: Empfänger; Felder wie `GET /api/v1/kunden` sie liefert.
  - `buyerReference` string: Leitweg-ID bei öffentlichen Auftraggebern (BT-10).
  - `lines` Position[], required
    - `name` string, required: Bezeichnung der Leistung, wie sie auf der Rechnung steht.
    - `quantityMilli` integer, required: Menge in TAUSENDSTELN. 2 Stück sind 2000, eine halbe Stunde ist 500. Ganzzahlig, damit nichts gerundet wird.
    - `unitCode` string, required: Einheit nach UN/ECE Rec. 20: C62 (Stück), HUR (Stunde), DAY (Tag), MTR (Meter), MTK (m²), KGM (kg), LTR (Liter), KMT (km), H87 (Stück, alternativ).
    - `unitPriceCents` integer, required: Einzelpreis NETTO in Cent. Ganzzahlig, nie negativ – eine Gutschrift läuft über eine negative Menge.
    - `taxCategory` string, required: Steuerkategorie: S (Regelsatz), Z (Nullsatz), E (befreit), AE (Reverse Charge), K (innergemeinschaftlich), G (Ausfuhr), O (nicht steuerbar).
    - `taxRatePercentMilli` integer, required: Steuersatz in Tausendstel Prozent: 19 % sind 19000, 7 % sind 7000.
    - `description` string: Zusatztext unter der Bezeichnung.
    - `allowanceCents` integer: Nachlass auf diese Position, in Cent.
    - `chargeCents` integer: Zuschlag auf diese Position, in Cent.
  - `note` string
  - `paymentTerms` string
  - `issueDate` string, date: Vorgabe: heute (Europe/Berlin).

## Response `201`

201 mit Nummer, Beträgen und den Abhol-Adressen der drei Dateien.

- object

## Other responses

- `400`: Eingabe unbrauchbar: invalid_input
- `401`: Kein oder ungültiger Zugangsschlüssel: api_schluessel_ungueltig, api_schluessel_abgelaufen
- `403`: Recht „schreiben“ fehlt am Schlüssel.
- `422`: Die Rechnung erfüllt EN 16931 nicht – `checks` nennt die Regeln.
- `429`: Ratengrenze oder Kontingent: quota_exhausted, rate_limited. Retry-After sagt, wann.
- `503`: Prüfdienst nicht erreichbar – später wiederholen.

---

[API](https://skmtc.dev/rechnungslotse/apis/rechnungslotse-schnittstelle-v1.md) · [All operations](https://skmtc.dev/rechnungslotse/apis/rechnungslotse-schnittstelle-v1/llms.txt) · [OpenAPI document](https://skmtc.dev/rechnungslotse/apis/rechnungslotse-schnittstelle-v1/revisions/0997b13254c2?raw)
