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
| Methode | Endpunkt | Beschreibung |
|---|---|---|
GET | /v1/customers | Alle Kunden auflisten |
GET | /v1/customers/:id | Einzelnen Kunden abrufen |
POST | /v1/customers | Neuen Kunden anlegen |
PATCH | /v1/customers/:id | Kunden aktualisieren |
DELETE | /v1/customers/:id | Kunden archivieren |
GET | /v1/customers/:id/invoices | Rechnungen 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
| Parameter | Typ | Beschreibung |
|---|---|---|
search | string | Suche in Name, E-Mail, UID |
type | string | business oder private |
country | string | ISO-Ländercode (z.B. AT, DE) |
active | boolean | Nur aktive Kunden |
page | number | Seitennummer |
per_page | number | Einträge pro Seite (Max: 100) |
Beispiel
cURL
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
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)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
type | string | Ja | business |
name | string | Ja | Firmenname |
email | string | Nein | E-Mail-Adresse |
phone | string | Nein | Telefonnummer |
uid_number | string | Nein | UID-Nummer (wird validiert) |
address | object | Nein | Adressdaten |
payment_terms | number | Nein | Zahlungsziel in Tagen |
default_vat_rate | number | Nein | Standard-MwSt (20, 13, 10, 0) |
notes | string | Nein | Interne Notizen |
Request Body Schema (Privatkunde)
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
type | string | Ja | private |
first_name | string | Ja | Vorname |
last_name | string | Ja | Nachname |
email | string | Nein | E-Mail-Adresse |
phone | string | Nein | Telefonnummer |
address | object | Nein | Adressdaten |
Beispiel (Geschäftskunde)
cURL
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
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
| Status | Beschreibung |
|---|---|
valid | UID ist gültig und verifiziert |
invalid | UID-Format ungültig |
not_found | UID existiert nicht im VIES |
pending | Validierung läuft (VIES-Abfrage) |
unavailable | VIES-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
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
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
| Parameter | Typ | Beschreibung |
|---|---|---|
status | string | Filter nach Status |
from_date | string | Ab Datum (ISO 8601) |
to_date | string | Bis Datum (ISO 8601) |
page | number | Seitennummer |
per_page | number | Einträge pro Seite |
Beispiel
cURL
curl -X GET "https://buchhaltgenie.at/api/v1/customers/cus_xyz789/invoices?status=paid" \
-H "Authorization: Bearer sk_live_xxxx"Fehler-Codes
| Code | HTTP Status | Beschreibung |
|---|---|---|
CUSTOMER_NOT_FOUND | 404 | Kunde wurde nicht gefunden |
INVALID_UID | 400 | UID-Nummer ist ungültig |
DUPLICATE_EMAIL | 400 | E-Mail-Adresse bereits vorhanden |
DUPLICATE_UID | 400 | UID-Nummer bereits vorhanden |
INVALID_COUNTRY_CODE | 400 | Ungültiger ISO-Ländercode |
CUSTOMER_HAS_INVOICES | 400 | Kunde hat offene Rechnungen |
INVALID_CUSTOMER_TYPE | 400 | Ungültiger Kundentyp |
MISSING_REQUIRED_FIELD | 400 | Pflichtfeld 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
| Recht | Umsetzung |
|---|---|
| Auskunftsrecht | Export aller Kundendaten über API oder Dashboard |
| Berichtigung | PATCH-Endpunkt für Korrekturen |
| Löschung | Archivierung nach Ablauf der Aufbewahrungspflicht |
| Datenportabilität | JSON-Export aller Daten |
Für DSGVO-Anfragen kontaktiere: dsgvo@buchhaltgenie.at
Nächste Schritte
- Rechnungen API - Rechnungen für Kunden erstellen
- Transaktionen API - Zahlungen verbuchen
- Webhooks - Benachrichtigungen bei Änderungen