Skip to Content
🔐 Closed Beta – Jetzt auf die Warteliste eintragen! Limitierte Plätze für Early Adopters →

Kunden API

💬

Hallo, ich bin Sophie! 👋 Mit der Kunden-API kannst Sie Ihre Kundenstammdaten verwalten - von der Anlage bis zur DSGVO-konformen Archivierung. Ich zeige Ihnen, wie es geht!

Die Kunden-API ermöglicht Ihnen die Verwaltung Ihrer Kundenstammdaten. Alle Kundendaten werden DSGVO-konform gespeichert und verarbeitet. UID-Nummern werden automatisch gegen das VIES-System validiert.


Endpunkte

MethodeEndpunktBeschreibung
GET/v1/customersAlle Kunden auflisten
GET/v1/customers/:idEinzelnen Kunden abrufen
POST/v1/customersNeuen Kunden anlegen
PATCH/v1/customers/:idKunden aktualisieren
DELETE/v1/customers/:idKunden archivieren
GET/v1/customers/:id/invoicesRechnungen eines Kunden

Kunde - JSON Schema

{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Customer", "type": "object", "properties": { "id": { "type": "string", "description": "Eindeutige Kunden-ID", "example": "cus_xyz789" }, "type": { "type": "string", "enum": ["business", "private"], "description": "Kundentyp" }, "name": { "type": "string", "description": "Firmenname (bei Geschäftskunden)" }, "first_name": { "type": "string", "description": "Vorname (bei Privatkunden)" }, "last_name": { "type": "string", "description": "Nachname (bei Privatkunden)" }, "email": { "type": "string", "format": "email" }, "phone": { "type": "string" }, "uid_number": { "type": "string", "pattern": "^[A-Z]\\{2\\}[A-Z0-9]\\{2,12\\}$", "description": "EU UID-Nummer" }, "address": { "type": "object", "properties": { "street": { "type": "string" }, "city": { "type": "string" }, "postal_code": { "type": "string" }, "country": { "type": "string", "pattern": "^[A-Z]\\{2\\}$" } } }, "payment_terms": { "type": "integer", "description": "Standard-Zahlungsziel in Tagen" }, "default_vat_rate": { "type": "number", "enum": [20, 13, 10, 0] }, "notes": { "type": "string", "description": "Interne Notizen" }, "active": { "type": "boolean", "default": true }, "uid_validation": { "type": "object", "properties": { "valid": { "type": "boolean" }, "company_name": { "type": "string" }, "address": { "type": "string" }, "validated_at": { "type": "string", "format": "date-time" } } }, "created_at": { "type": "string", "format": "date-time" }, "updated_at": { "type": "string", "format": "date-time" } } }

Kunden auflisten

GET /v1/customers

Ruft eine paginierte Liste aller Kunden ab.

Query-Parameter

ParameterTypBeschreibung
searchstringSuche in Name, E-Mail, UID
typestringbusiness oder private
countrystringISO-Ländercode (z.B. AT, DE)
activebooleanNur aktive Kunden
pagenumberSeitennummer
per_pagenumberEinträge pro Seite (Max: 100)

Beispiel

curl -X GET "https://buchhaltgenie.at/api/v1/customers?search=Muster&country=AT" \ -H "Authorization: Bearer sk_live_xxxx" \ -H "Content-Type: application/json"

Antwort

{ "data": [ { "id": "cus_xyz789", "type": "business", "name": "Musterfirma GmbH", "email": "office@musterfirma.at", "phone": "+43 1 234 5678", "uid_number": "ATU12345678", "address": { "street": "Musterstraße 1", "city": "Wien", "postal_code": "1010", "country": "AT" }, "payment_terms": 14, "default_vat_rate": 20, "notes": "Stammkunde seit 2020", "active": true, "uid_validation": { "valid": true, "company_name": "Musterfirma GmbH", "address": "Musterstraße 1, 1010 Wien", "validated_at": "2026-01-09T10:00:00Z" }, "created_at": "2024-03-15T10:00:00Z", "updated_at": "2026-01-05T09:30:00Z" } ], "pagination": { "page": 1, "per_page": 20, "total_pages": 3, "total_count": 54 } }

Einzelnen Kunden abrufen

GET /v1/customers/:id

Ruft die vollständigen Details eines einzelnen Kunden ab.

Beispiel

curl -X GET "https://buchhaltgenie.at/api/v1/customers/cus_xyz789" \ -H "Authorization: Bearer sk_live_xxxx"

Kunden anlegen

POST /v1/customers

Legt einen neuen Kunden an. Die UID-Nummer wird automatisch gegen VIES validiert.

Request Body Schema (Geschäftskunde)

FeldTypPflichtBeschreibung
typestringJabusiness
namestringJaFirmenname
emailstringNeinE-Mail-Adresse
phonestringNeinTelefonnummer
uid_numberstringNeinUID-Nummer (wird validiert)
addressobjectNeinAdressdaten
payment_termsnumberNeinZahlungsziel in Tagen
default_vat_ratenumberNeinStandard-MwSt (20, 13, 10, 0)
notesstringNeinInterne Notizen

Request Body Schema (Privatkunde)

FeldTypPflichtBeschreibung
typestringJaprivate
first_namestringJaVorname
last_namestringJaNachname
emailstringNeinE-Mail-Adresse
phonestringNeinTelefonnummer
addressobjectNeinAdressdaten

Beispiel (Geschäftskunde)

curl -X POST "https://buchhaltgenie.at/api/v1/customers" \ -H "Authorization: Bearer sk_live_xxxx" \ -H "Content-Type: application/json" \ -d '{ "type": "business", "name": "Neue Firma GmbH", "email": "kontakt@neuefirma.at", "phone": "+43 1 987 6543", "uid_number": "ATU87654321", "address": { "street": "Beispielgasse 10", "city": "Graz", "postal_code": "8010", "country": "AT" }, "payment_terms": 30, "notes": "Erstkontakt über Messe" }'

Beispiel (Privatkunde)

curl -X POST "https://buchhaltgenie.at/api/v1/customers" \ -H "Authorization: Bearer sk_live_xxxx" \ -H "Content-Type: application/json" \ -d '{ "type": "private", "first_name": "Maria", "last_name": "Musterfrau", "email": "maria.musterfrau@email.at", "phone": "+43 664 123 4567", "address": { "street": "Privatweg 5", "city": "Salzburg", "postal_code": "5020", "country": "AT" } }'

Antwort (201 Created)

{ "data": { "id": "cus_new123", "type": "business", "name": "Neue Firma GmbH", "email": "kontakt@neuefirma.at", "phone": "+43 1 987 6543", "uid_number": "ATU87654321", "address": { "street": "Beispielgasse 10", "city": "Graz", "postal_code": "8010", "country": "AT" }, "payment_terms": 30, "notes": "Erstkontakt über Messe", "active": true, "uid_validation": { "valid": true, "company_name": "Neue Firma GmbH", "address": "Beispielgasse 10, 8010 Graz", "validated_at": "2026-01-09T14:30:00Z" }, "created_at": "2026-01-09T14:30:00Z" } }

UID-Nummer Validierung

Bei österreichischen und EU-Geschäftskunden wird die UID-Nummer automatisch gegen das VIES-System validiert.

Validierungsstatus

StatusBeschreibung
validUID ist gültig und verifiziert
invalidUID-Format ungültig
not_foundUID existiert nicht im VIES
pendingValidierung läuft (VIES-Abfrage)
unavailableVIES-System nicht erreichbar

Beispiel-Antwort mit UID-Validierung

{ "uid_number": "ATU12345678", "uid_validation": { "valid": true, "status": "valid", "company_name": "Musterfirma GmbH", "address": "Musterstraße 1, 1010 Wien", "validated_at": "2026-01-09T10:00:00Z", "request_id": "vies_abc123" } }
💡

Sophie’s Tipp: Die UID-Validierung erfolgt asynchron. Bei der Erstellung ist der Status oft pending. Sie können den Kunden später erneut abrufen oder einen Webhook für customer.uid_validated einrichten.


Kunden aktualisieren

PATCH /v1/customers/:id

Aktualisiert einen bestehenden Kunden. Nur die übermittelten Felder werden aktualisiert.

Beispiel

curl -X PATCH "https://buchhaltgenie.at/api/v1/customers/cus_xyz789" \ -H "Authorization: Bearer sk_live_xxxx" \ -H "Content-Type: application/json" \ -d '{ "email": "neue-email@musterfirma.at", "payment_terms": 21 }'

Kunden archivieren

DELETE /v1/customers/:id

Archiviert einen Kunden (Soft Delete). Der Kunde wird nicht gelöscht, sondern deaktiviert - DSGVO-konform und BAO §132 konform.

Beispiel

curl -X DELETE "https://buchhaltgenie.at/api/v1/customers/cus_xyz789" \ -H "Authorization: Bearer sk_live_xxxx"

Antwort

{ "data": { "id": "cus_xyz789", "name": "Musterfirma GmbH", "active": false, "archived_at": "2026-01-09T15:00:00Z" } }
⚠️

Achtung: Kunden mit offenen Rechnungen können nicht archiviert werden. Schließe erst alle offenen Rechnungen ab.


Rechnungen eines Kunden abrufen

GET /v1/customers/:id/invoices

Ruft alle Rechnungen eines bestimmten Kunden ab.

Query-Parameter

ParameterTypBeschreibung
statusstringFilter nach Status
from_datestringAb Datum (ISO 8601)
to_datestringBis Datum (ISO 8601)
pagenumberSeitennummer
per_pagenumberEinträge pro Seite

Beispiel

curl -X GET "https://buchhaltgenie.at/api/v1/customers/cus_xyz789/invoices?status=paid" \ -H "Authorization: Bearer sk_live_xxxx"

Fehler-Codes

CodeHTTP StatusBeschreibung
CUSTOMER_NOT_FOUND404Kunde wurde nicht gefunden
INVALID_UID400UID-Nummer ist ungültig
DUPLICATE_EMAIL400E-Mail-Adresse bereits vorhanden
DUPLICATE_UID400UID-Nummer bereits vorhanden
INVALID_COUNTRY_CODE400Ungültiger ISO-Ländercode
CUSTOMER_HAS_INVOICES400Kunde hat offene Rechnungen
INVALID_CUSTOMER_TYPE400Ungültiger Kundentyp
MISSING_REQUIRED_FIELD400Pflichtfeld fehlt

DSGVO-Hinweise

🔐

DSGVO Art. 17: Gemäß DSGVO haben Ihre Kunden das Recht auf Löschung. Aufgrund der BAO §132 Aufbewahrungspflicht (7 Jahre) werden Kundendaten archiviert, nicht gelöscht. Nach Ablauf der Frist erfolgt automatische Löschung.

Rechte Ihrer Kunden

RechtUmsetzung
AuskunftsrechtExport aller Kundendaten über API oder Dashboard
BerichtigungPATCH-Endpunkt für Korrekturen
LöschungArchivierung nach Ablauf der Aufbewahrungspflicht
DatenportabilitätJSON-Export aller Daten

Für DSGVO-Anfragen kontaktiere: dsgvo@buchhaltgenie.at


Nächste Schritte