API v1

Briefversand-API Dokumentation (REST, v1)

Unsere RESTful JSON API ermöglicht es Ihnen, Briefe direkt aus Ihrer Anwendung zu versenden. Nutzen Sie die Test-Umgebung mit kostenlosen Sandbox-Keys, bevor Sie in die Produktion gehen. Die vollständige OpenAPI/Swagger-Dokumentation finden Sie am Ende dieser Seite.

Getting Started

In drei Schritten zum ersten API-Brief

1

Konto erstellen

Registrieren Sie sich kostenlos auf briefsenden.com und bestätigen Sie Ihre E-Mail-Adresse. Mit einem Test-Key werden Briefe danach weder gedruckt noch berechnet.

2

API-Key erstellen

Navigieren Sie im Dashboard zu Einstellungen → Entwickler und erstellen Sie einen API-Key. Für die Entwicklung nutzen Sie einen Test-Key (bv_test_*), für den Produktivbetrieb einen Live-Key (bv_live_*).

3

Ersten Brief versenden

Senden Sie ein PDF zusammen mit der Empfängeradresse per POST an /api/v1/letters/simple. Mit einem Test-Key wird kein physischer Brief versendet und es entstehen keine Kosten.

Authentifizierung

API-Keys und der Header X-Api-Key

Die briefsenden-API authentifiziert jeden Request über einen API-Key. Senden Sie ihn im Header X-Api-Key an die Basis-URL https://www.briefsenden.com/api/v1. Alle Anfragen müssen über HTTPS erfolgen – HTTP-Anfragen werden abgelehnt.

HTTP Header
X-Api-Key: bv_live_IhrApiKeyHier

Test-Keys bv_test_*

Für die Entwicklung und zum Testen. Briefe werden simuliert, aber nicht physisch versendet. Keine Kosten, keine Coin-Abbuchung – ideal für die Integration in Ihre Entwicklungsumgebung.

Live-Keys bv_live_*

Für den Produktivbetrieb. Briefe werden gedruckt, kuvertiert und über die Deutsche Post versendet. Die Kosten werden von Ihrem Coin-Guthaben abgezogen.

API-Keys können jederzeit im Dashboard unter Einstellungen → Entwickler erstellt, angezeigt und widerrufen werden. Bewahren Sie Ihre Live-Keys sicher auf und teilen Sie sie nicht öffentlich.

Code-Beispiele

Brief versenden in Ihrer bevorzugten Sprache

curl -X POST https://www.briefsenden.com/api/v1/letters/simple \
  -H "X-Api-Key: bv_test_xxx" \
  -F "file=@rechnung.pdf" \
  -F "recipientLine1=Max Mustermann" \
  -F "recipientLine2=Musterstraße 1" \
  -F "recipientZip=12345" \
  -F "recipientCity=Berlin" \
  -F "color=bw" \
  -F "duplex=simplex"

Alle Beispiele senden einen Brief per POST /api/v1/letters/simple als multipart/form-data. Ersetzen Sie bv_test_xxx durch Ihren API-Key – mit einem Test-Key entstehen keine Kosten.

Endpoint-Übersicht

Die wichtigsten API-Endpunkte im Überblick

MethodeEndpointBeschreibung
POST/api/v1/letters/simpleBrief versenden (PDF-Datei oder PDF-URL)
POST/api/v1/lettersBrief versenden (JSON, PDF als Base64)
POST/api/v1/letters/bulkBis zu 50 Briefe in einem Request
GET/api/v1/lettersBriefe auflisten
GET/api/v1/letters/:idStatus eines Briefs abrufen (bei Einschreiben mit Sendungsnummer)
POST/api/v1/estimateKosten eines Briefs berechnen
POST/api/v1/serial/estimateKosten eines Serienbriefs berechnen
GET/api/v1/balanceGuthaben abfragen
GET/api/v1/serialSerienbriefe auflisten
GET/api/v1/serial/:idSerienbrief-Status abrufen
GET/api/v1/serial/:id/lettersBriefe eines Serienbriefs auflisten
DELETE/api/v1/serial/:idSerienbrief abbrechen, solange er verarbeitet wird
GET/api/v1/sender-profilesAbsenderprofile auflisten (auch POST, PUT, DELETE, set-default)
GET/api/v1/addressesAdressbuch auflisten (auch POST, PUT, DELETE)
POST/api/v1/webhooksWebhook registrieren
GET/api/v1/webhooksWebhooks auflisten
DELETE/api/v1/webhooks/:idWebhook löschen

Die vollständige Dokumentation aller Endpoints mit Request- und Response-Schemas finden Sie in der interaktiven Swagger-UI weiter unten.

Sie binden briefsenden für viele Geschäftskunden an? Mehr für Software-Partner.

Preise, Einsatzbeispiele und Schnellstart der API: Briefversand-API im Überblick.

Webhooks

Echtzeit-Benachrichtigungen bei Statusänderungen

Webhooks informieren Ihre Anwendung automatisch, wenn sich der Status eines Briefes ändert. Konfigurieren Sie Ihre Webhook-URL im Dashboard unter Einstellungen → Entwickler. Wir senden bei jedem Statuswechsel einen POST-Request an Ihre URL.

Event-Typen

  • letter.created
  • letter.uploaded
  • letter.processing
  • letter.in_print
  • letter.sent
  • letter.error
  • serial.completed
  • serial.error

Retry-Logik

Antwortet Ihr Server nicht mit einem 2xx-Statuscode, wiederholen wir die Zustellung bis zu 3 Mal nach 1, 5 und 25 Sekunden. Nach 10 aufeinanderfolgenden fehlgeschlagenen Zustellungen wird der Webhook deaktiviert; legen Sie ihn dann neu an.

Payload-Beispiel

JSON
{
  "event_type": "letter.sent",
  "timestamp": "2026-10-16T14:30:00.1234567Z",
  "data": {
    "LetterId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "Status": "SENT",
    "OldStatus": "IN_PRINT",
    "TrackingNumber": null
  }
}

TrackingNumber enthält bei Einschreiben die Sendungsnummer, sobald sie vergeben ist (ab Einlieferung ins Druckzentrum), sonst null.

Signatur prüfen

Jede Zustellung trägt drei Header. Berechnen Sie die Signatur über den rohen Body und vergleichen Sie sie in konstanter Zeit mit X-Webhook-Signature. Das Secret erhalten Sie einmalig beim Anlegen des Webhooks.

X-Webhook-Signature
sha256= gefolgt vom HMAC-SHA256 (hex, Kleinbuchstaben) über den rohen Request-Body; Schlüssel ist Ihr Webhook-Secret als UTF-8-Zeichenkette
X-Webhook-Event
Ereignistyp, z. B. letter.sent (wie event_type im Body)
X-Webhook-Timestamp
Versandzeitpunkt des Zustellversuchs (ISO 8601, UTC); nicht Teil der Signatur
Node.js
const crypto = require('crypto')

// rawBody: der unveränderte Request-Body (Buffer), nicht neu serialisiert
function isValidSignature(rawBody, signatureHeader, secret) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex')
  const a = Buffer.from(expected)
  const b = Buffer.from(signatureHeader || '')
  return a.length === b.length && crypto.timingSafeEqual(a, b)
}

Rate Limits & Fehlerbehandlung

Limits, Statuscodes und Fehlerformat

Rate Limits

Die API erlaubt maximal 100 Requests pro Minute pro API-Key. Bei Überschreitung erhalten Sie einen 429-Statuscode. Die aktuellen Limit-Informationen werden in jedem Response mitgeliefert:

  • X-RateLimit-Limit: 100
  • X-RateLimit-Remaining: 95
  • X-RateLimit-Reset: 1709042400

Idempotency-Keys

Für sichere Wiederholungen bei Netzwerkfehlern können Sie einen Idempotency-Key-Header mitsenden. Bei identischem Key wird die Aktion nicht erneut ausgeführt, sondern das Ergebnis des ersten Requests zurückgegeben.

Idempotency-Key: unique-request-id-123

Fehlerformat (RFC 7807 ProblemDetails)

Alle Fehler werden im standardisierten RFC-7807-Format (ProblemDetails) zurückgegeben. Validierungsfehler nennen das betroffene Feld unter errors, andere Fehler beschreiben das Problem in detail. Die traceId hilft unserem Support, die Anfrage zu finden.

JSON – Fehlerantwort
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "pdfUrl": ["pdfUrl muss eine gültige HTTP(S)-URL sein."]
  },
  "traceId": "de4f753c1a2f48115a926dd3081be05e"
}

HTTP-Statuscodes

CodeBedeutung
200OK – Anfrage erfolgreich
201Created – Ressource erstellt (z. B. Brief)
400Bad Request – Ungültige Parameter
401Unauthorized – Fehlender oder ungültiger API-Key
403Forbidden – Keine Berechtigung
404Not Found – Ressource nicht gefunden
429Too Many Requests – Rate Limit überschritten
500Internal Server Error – Serverfehler

Häufige Fragen zur API

Antworten auf die wichtigsten Entwickler-Fragen

Interaktive API-Dokumentation

Testen Sie Endpoints direkt in der Swagger-UI

Kostenloser Testmodus – keine Kreditkarte nötig

Jetzt integrieren

Starten Sie mit wenigen Zeilen Code und automatisieren Sie Ihren Briefversand über die REST API.

Keine Grundgebühr Keine Mindestmenge Pay-per-Letter