Zum Hauptinhalt springen

API-Integrationsleitfaden — Rechnungsstellung, CRM & Buchhaltung automatisieren

docs101 stellt seine gesamte Funktionalität als REST API bereit und ermöglicht Entwicklern, Rechnungserstellung, Kundenverwaltung und Buchhaltungsexporte aus jeder Sprache oder Plattform heraus zu automatisieren. Jede über die API erstellte Rechnung ist automatisch EU-konform — ZUGFeRD- und XRechnung-XML wird in die PDF eingebettet, ohne dass Sie sich um XML-Schemata oder PDF/A-Konvertierung kümmern müssen. Ob Sie eine SaaS-Abrechnungspipeline aufbauen, Ihr CRM synchronisieren oder DATEV-Exporte an Ihren Steuerberater liefern — die API deckt alles ab. Dieser Leitfaden beschreibt, was die API kann. Eine praktische Schritt-für-Schritt-Anleitung finden Sie im Tutorial.

Pro-Abo erforderlich

Der API-Zugang erfordert ein aktives Pro-Abonnement. Unter Schnellstart erfahren Sie, wie Sie Ihren ersten API-Schlüssel erstellen.

Was Sie damit bauen können

Die docs101 API ist für Entwickler konzipiert, die Rechnungsstellung in bestehende Systeme integrieren möchten. Hier einige typische Anwendungsfälle:

  • SaaS-Abrechnungsautomatisierung — Rechnungserstellung aus Ihrem Abosystem anstoßen, wenn ein Abrechnungszyklus abgeschlossen ist
  • ERP-/CRM-Synchronisation — Kunden und Rechnungen aus Ihrem CRM anlegen und beide Systeme synchron halten
  • Agentur-Rechnungsstellung — Zeiterfassungsdaten (z. B. aus Clockify) importieren und automatisch Kundenrechnungen erstellen
  • Buchhaltungspipeline — Nächtliche DATEV-Exporte planen, um den Workflow Ihres Steuerberaters zu bedienen
  • White-Label-Rechnungsstellung — docs101 als Rechnungsengine hinter Ihrem eigenen Produkt nutzen

So funktioniert es

Alle API-Anfragen werden über einen X-API-Key-Header authentifiziert und liefern JSON-Antworten. PDF-Generierung und Buchhaltungsexporte laufen asynchron — Sie starten einen Job und fragen dessen Status ab, bis er abgeschlossen ist. Die Basis-URL für alle Endpunkte ist https://docs101.com/api/v1.

Rechnungsstellung — EU-konforme Rechnungen erstellen

Der Rechnungslebenszyklus folgt einem klaren Ablauf: Entwurf erstellen, Positionen hinzufügen, Rechnung über einen asynchronen Job finalisieren und die fertige PDF herunterladen. Die generierte PDF ist ZUGFeRD/XRechnung-konform mit eingebettetem XML — keine zusätzlichen Schritte nötig. Sie können Rechnungen auch direkt über die API per E-Mail versenden.

AktionMethodeEndpunktHinweise
Rechnungen auflistenGET/invoice/Paginiert, filterbar
Rechnung erstellenPOST/invoice/Gibt { "invoice_id": ... } zurück
Rechnung abrufenGET/invoice/{id}Vollständiges Rechnungsobjekt
Rechnung aktualisierenPUT/invoice/{id}Nur im Status Draft
Position hinzufügenPOST/invoice/{id}/positionsPositionen mit Menge, Preis, Steuer
Positionen umsortierenPUT/invoice/{id}/positions/reorderArray von Positions-IDs
ValidierenGET/invoice/{id}/validateVorabprüfung mit USt-IdNr.-Validierung
Finalisieren (async)POST/invoice/{id}/jobPDF-Generierungsjob einreihen
Job-Status abfragenGET/invoice/{id}/job/{job_id}Gibt queued / started / finished / failed zurück
PDF herunterladenGET/invoice/{id}/pdf-linkPresigned S3-URL
XML herunterladenGET/invoice/{id}/xml-linkZUGFeRD/XRechnung-XML
E-Mail sendenPOST/invoice/{id}/send_emailMit optionalem BCC und Anhängen
Als versendet markierenPUT/invoice/{id}/status{ "status": "SENT" }
Als bezahlt markierenPUT/invoice/{id}/status{ "status": "PAID", "paid_date": "...", "payment_method": "..." }
Rechnung stornierenPOST/invoice/{id}/cancelIrreversibel
Gutschrift erstellenPOST/invoice/{id}/credit-noteAus bestehender Rechnung
Anhänge verwaltenGET / POST/invoice/{id}/attachmentsPDF, DOCX, XLSX, Bilder (5 MB Limit)
PDF-VorschauGET/invoice/{id}/previewEntwurfsvorschau ohne Finalisierung
# Create an invoice
invoice = requests.post(f"{BASE_URL}/invoice/", headers=HEADERS, json={
"customer_id": 42,
"ftl_template_id": 1,
"invoice_date": "2025-03-15",
"tax_treatment_id": "standard",
}).json()

# Add a line item
requests.post(f"{BASE_URL}/invoice/{invoice['invoice_id']}/positions", headers=HEADERS, json={
"description": "Consulting — March 2025",
"quantity": 10,
"unit_price": 150.00,
"tax_rate": 0.19,
"unit_id": 5,
})
Asynchrone PDF-Generierung

Die Finalisierung läuft asynchron. Nach POST /invoice/{id}/job fragen Sie die zurückgegebene job_id ab, bis der Status finished ist. Das Schritt-für-Schritt-Tutorial zeigt das vollständige Polling-Muster.

CRM — Kunden, Adressen & USt-IdNr. verwalten

docs101 unterstützt sowohl B2B- als auch B2C-Kunden. Bei B2B-Kunden kann die EU-USt-IdNr. automatisch gegen die VIES-Datenbank validiert werden. Jeder Kunde kann mehrere Adressen haben (Rechnungs- und Lieferadresse), und Sie können Kontoauszüge als PDF generieren.

AktionMethodeEndpunktHinweise
Kunden auflistenGET/customer/Paginiert, Suche, E-Mail-Lookup
Kunde erstellenPOST/customer/Gibt { "id": ... } zurück
Kunde abrufenGET/customer/{id}Vollständiges Kundenobjekt
Kunde aktualisierenPUT/customer/{id}
Adressen verwaltenGET / POST/customer/{id}/addressesRechnungs-, Lieferadresse
USt-IdNr. validierenGET/customer/{id}/vat-checkAsynchrone VIES-Validierung
FinanzübersichtGET/customer/{id}/financial-overviewOffene/bezahlte Summen
KontoauszugGET/customer/{id}/statementJSON-Daten mit Zeitraumfilter
Kontoauszug-PDFGET/customer/{id}/statement/pdfPresigned Download-URL
# Create a B2B customer
customer = requests.post(f"{BASE_URL}/customer/", headers=HEADERS, json={
"organization_name": "Acme GmbH",
"email": "billing@acme.de",
"vat_id": "DE123456789",
"contact_type": "B2B",
}).json()

# Add a billing address
requests.post(
f"{BASE_URL}/customer/{customer['id']}/addresses",
headers=HEADERS,
json={
"address_line_1": "Musterstraße 1",
"postal_code": "10115",
"city": "Berlin",
"country_code": "DE",
"type": "billing",
},
)
Automatische USt-IdNr.-Validierung

Wenn Sie einen B2B-Kunden mit einer vat_id anlegen, validiert docs101 diese automatisch gegen die EU-VIES-Datenbank. Falls die Nummer nicht bestätigt werden kann, fordert der Finalisierungsschritt eine explizite Bestätigung mit vat_override_confirmed: true.

Buchhaltung — DATEV-Export & Download-Verwaltung

docs101 kann Rechnungen im DATEV-Format für deutsche Steuerberater exportieren. Der Export ist konfigurierbar — Sie definieren Sachkontozuordnungen für Ihre Erlöskonten — und läuft asynchron. Exporte, die mehrere Kalenderjahre umfassen, werden automatisch in separate Dateien aufgeteilt. Alle Exportdateien stehen als ZIP-Downloads über Presigned URLs zur Verfügung.

AktionMethodeEndpunktHinweise
DATEV-Export auslösenPOST/exports/job{ "task": "process_datev_export_job", ... }
Exportstatus abfragenGET/exports/job/{job_id}Status + result-Objekt bei Abschluss
DATEV-Konfiguration abrufenGET/datev/configUnternehmensweite Exporteinstellungen
DATEV-Konfiguration aktualisierenPUT/datev/config
Kontozuordnungen abrufenGET/datev/mappingsSachkontozuordnungen
Zuordnungen aktualisierenPUT/datev/mappingsBatch-Speicherung
Zuordnungen zurücksetzenPOST/datev/mappings/resetStandardwerte wiederherstellen
Downloads auflistenGET/downloads/Alle verfügbaren Exportdateien
Datei herunterladenGET/downloads/{id}/downloadPresigned S3-URL
Download löschenDELETE/downloads/{id}Exporteintrag entfernen
# Trigger a DATEV export
job = requests.post(f"{BASE_URL}/exports/job", headers=HEADERS, json={
"task": "process_datev_export_job",
"start_date": "2025-01-01",
"end_date": "2025-03-31",
}).json()

# Poll until finished
import time
while True:
status = requests.get(
f"{BASE_URL}/exports/job/{job['job_id']}", headers=HEADERS
).json()
if status["status"] == "finished":
break
time.sleep(2)

# Download all export files
for download_id in status["result"]["download_ids"]:
dl = requests.get(
f"{BASE_URL}/downloads/{download_id}/download", headers=HEADERS
).json()
print(f"Download: {dl['url']}")
Aufgeteilte Exporte

Wenn Ihr Exportzeitraum mehrere Kalenderjahre umfasst, teilt docs101 den Export automatisch in separate Dateien pro Jahr auf. Das result-Objekt enthält dann is_split: true und ein split_reason-Feld mit der Begründung.

Manuell vs. API — im Vergleich

AufgabeIn der Web-AppPer API
Kunde anlegenFormular ausfüllen, Speichern klickenPOST /customer/ mit JSON-Body
Rechnung erstellenKunde auswählen, Positionen ausfüllen, Erstellen klickenPOST /invoice/POST .../positions
PDF generierenFinalisieren klickenPOST .../job → abfragen → GET .../pdf-link
Per E-Mail sendenSenden klicken, Empfänger eingebenPOST .../send_email mit Empfänger im Body
Nach DATEV exportierenSeite ExporteExportieren klickenPOST /exports/job → abfragen → GET .../download
USt-IdNr. prüfenAutomatisch beim Speichern des KundenGET /customer/{id}/vat-check

Alles, was Sie in der Web-App tun können, können Sie auch per API erledigen — und automatisieren.

Über die Rechnungsstellung hinaus

Die API deckt auch weitere Bereiche von docs101 ab:

  • Vorlagen — Rechnungsvorlagen auflisten, konfigurieren und in der Vorschau anzeigen (/template/)
  • Produkte — Produktkatalog für schnelle Positionseingabe verwalten (/products/)
  • Unternehmenseinstellungen — Firmendaten, Logo, Bankverbindungen, Zahlungsbedingungen aktualisieren (/company/)
  • Rechnungsnummern — Nummerierungssequenzen mit Datumsplatzhaltern konfigurieren (/numbering/)
  • Teamverwaltung — Mitglieder einladen, Rollen verwalten (/members/)
  • Audit-Log — Alle Änderungen für Compliance nachverfolgen (/audit-log/)

Loslegen

  • Schnellstart — Erstellen Sie Ihren ersten API-Schlüssel und senden Sie eine Testanfrage in 5 Minuten
  • Schritt-für-Schritt-Tutorial — Vollständige Anleitung von der Kundenanlage bis zum DATEV-Export
  • Python SDK — Offizielle Python-Clientbibliothek für die docs101 API
  • Swagger UI — Interaktive API-Referenz mit allen Endpunkten und Schemata