# Per E-Mail senden (https://developer.bimetrics.de/reference/document-mail/send-document-mail)

`POST https://app.bimetrics.de/api/document-mail/send`

operationId: `sendDocumentMail` · Berechtigung (Scope): `mail:send` · Bereich: Versand per E-Mail

Sendet ein ausgestelltes Dokument an die genannten Empfänger, wie „Per E-Mail senden“ in der App: Absender ist bimetrics, Antworten gehen an die Antwortadresse der Firma, unter dem Text stehen Signatur und Pflichtangaben. Betreff und Text gehen genau so raus, wie du sie schickst. Platzhalter wie `{Betrag}` füllt nur die Vorschau. Unumkehrbar. Je Firma gehen höchstens 20 Empfänger am Tag raus, in der Testphase 3, für App, API und MCP zusammen (`429 DocumentMailLimitExceeded`). Ohne eingerichteten E-Mail-Versand antwortet die Route mit `409 DocumentMailNotConfigured`, in der Testphase vor der Bestätigung der E-Mail-Adresse mit `403 MailNotConfirmed`. Eine Wiederholung mit gleichem Idempotency-Key sendet nichts doppelt.

Benötigt einen Schlüssel mit der Berechtigung `mail:send`.

> **Achtung:** Ändert Daten der Firma; wird atomar mit Idempotenzbeleg und Herkunft protokolliert.
>
> KI-Agenten fragen vor diesem Aufruf beim Nutzer nach.

### Authentifizierung

`Authorization: Bearer bm_…` (alternativ `X-API-KEY: bm_…`, nie beide zugleich).

### Parameter

| Name | Ort | Pflicht | Typ | Beschreibung |
| --- | --- | --- | --- | --- |
| `Idempotency-Key` | header | ja | string | Stabiler Schlüssel für genau diese Änderung: 1–128 druckbare ASCII-Zeichen ohne Leerzeichen. Bei Wiederholungen denselben Schlüssel und unveränderten Inhalt senden; das Ergebnis wird nicht nochmals erzeugt. |

### Request-Body (`application/json`)

 

Schema `MailSendRequest`.

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `attachments` | Array<MailAttachmentRef> | Weitere Dateien nach PDF und XML, in dieser Reihenfolge, höchstens 10. Alle Anhänge zusammen, PDF und XML eingerechnet, dürfen höchstens 10 MiB groß sein (`400 DocumentMailAttachmentsTooLarge`). Zu einer XRechnung gehen keine weiteren Dateien (`400 DocumentMailAttachmentsNotAllowed`). Eine Datei, die es nicht mehr gibt: `409 DocumentMailAttachmentUnavailable` mit ihrer Position in `context.index`. |
| `body` | string | Text ohne Signatur, höchstens 6000 Zeichen. |
| `cc` | Array<string>, kann null sein | Empfänger in Kopie. |
| `includePdf` | boolean | Nur bei einer XRechnung: hängt zusätzlich das PDF an. Andere Dokumente haben ihr PDF immer dabei. |
| `includeXml` | boolean | Hängt zusätzlich das XML der E-Rechnung an, wo `xmlAvailable` gilt. Eine XRechnung hat es immer dabei. |
| `subject` | string | Betreff, höchstens 300 Zeichen. |
| `target` | MailTarget | Das ausgestellte Dokument. |
| `to` | Array<string>, kann null sein | Empfänger, mindestens einer; zusammen mit `cc` höchstens 50 und höchstens so viele, wie die Tagesgrenze noch erlaubt. |

### Beispiel

```sh
curl --fail-with-body "https://app.bimetrics.de/api/document-mail/send" \
  -H "Authorization: Bearer $BIMETRICS_API_KEY" \
  -H "Idempotency-Key: rechnung-2026-001" \
  -H "Content-Type: application/json" \
  -d '{"kind":"and","children":[],"limit":50,"offset":0}'
```

### Antworten

| Status | Beschreibung | Inhalt |
| --- | --- | --- |
| 200 | Erfolg. | `application/json`: DocumentMail |
| 400 | Ungültige Anfrage, z. B. ein Parameter mit ungültigem Wert wie eine ID, die keine UUID ist; korrigieren statt wiederholen. Mehr unter [Fehler](https://developer.bimetrics.de/errors). | `application/json`: Error |
| 401 | Kein gültiger Schlüssel: fehlt (`Unauthorized`), ist unbekannt, abgelaufen oder widerrufen oder wurde nicht in genau einem Header gesendet (`InvalidAPIKey`). Schlüssel prüfen, nicht wiederholen. Auch eine ID, die zu einer anderen Firma gehört, ergibt `401 Unauthorized`. | `application/json`: Error |
| 403 | Dem Schlüssel fehlt die Berechtigung für diese Route (`APIKeyPermissionDenied`), oder die Firma hat keinen API-Zugang (mehr), etwa nach Ende der Testphase oder des Abos (`APIUnavailable`). | `application/json`: Error |
| 404 | Nicht gefunden (`NotFound`). | `application/json`: Error |
| 409 | Versionskonflikt (`VersionConflict`), abweichender Inhalt für denselben Idempotency-Key (`IdempotencyConflict`), Dublette (`ContactDuplicate`) oder fachlich gesperrte Änderung. Aktuellen Zustand laden und prüfen; keinen anderen Schlüssel verwenden, um einen Konflikt zu umgehen. | `application/json`: Error |
| 413 | Die Anfrage ist zu groß (`APIRequestTooLarge`), siehe `x-bimetrics-limits`. | `application/json`: Error |
| 429 | Zu viele Anfragen; nach `Retry-After` Sekunden erneut senden. Mehr unter [Fehler](https://developer.bimetrics.de/errors). (Header: Retry-After) | `application/json`: Error |
| 500 | Serverfehler; die Anfrage später wiederholen. Mehr unter [Fehler](https://developer.bimetrics.de/errors). | `application/json`: Error |

#### Felder der Antwort 200 (`DocumentMail`)

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `attachments` | Array<DocumentMailAttachment>, kann null sein | Anhänge. |
| `body` | string | Text mit Signatur und Pflichtangaben, wie versendet. |
| `bouncedAt` | string (date-time) | Unzustellbar seit. |
| `cc` | Array<string>, kann null sein | Empfänger in Kopie. |
| `companyId` | string (uuid) | ID der Firma. |
| `createdAt` | string (date-time) | Anlage in bimetrics. |
| `createdByUserCompanyId` | string (uuid) | Mitgliedschaft, die gesendet hat; bei der API die des Schlüsselinhabers. |
| `customerName` | string | Name des Kunden. |
| `deliveredAt` | string (date-time) | Zustellung. |
| `documentKind` | string | Art des Dokuments wie in `MailDocument.kind`. |
| `failureCode` | string | Grund, wenn die Mail nicht rausging. |
| `html` | string | Die Mail als HTML, wie versendet. |
| `id` | string (uuid) | ID der Mail. |
| `number` | string | Nummer des Dokuments. |
| `recipientCount` | integer | Empfänger samt Kopie; zählt zur Tagesgrenze. |
| `recipients` | Array<DocumentMailRecipient>, kann null sein | Zustellstand je Empfänger. |
| `replyTo` | string | Antwortadresse. |
| `senderAddress` | string | Absenderadresse von bimetrics. |
| `senderName` | string | Absendername. |
| `sentAt` | string (date-time) | Übergabe an den Maildienst. |
| `status` | string | `queued`, `sent`, `delivered`, `bounced`, `complained` oder `failed`. |
| `subject` | string | Betreff. |
| `targetId` | string (uuid) | ID des Entwurfs bzw. der Mahnung. |
| `targetKind` | string | `draft` oder `reminder`. |
| `to` | Array<string>, kann null sein | Empfänger. |
| `updatedAt` | string (date-time) | Letzte Änderung. |

Verschachtelte Schemas stehen vollständig in der OpenAPI-Beschreibung: https://app.bimetrics.de/api/openapi.json
