Customers Endpoint
Customers
Kundenverwaltung mit Multi-Adressen-Support.
Übersicht
| Operation | Method | Endpoint | Scope |
|---|---|---|---|
| Export | GET | /xpanel/xoport/export/json/customers | customers:read |
| Import | POST | /xpanel/xoport/import/json/customers | customers:write |
| Update | PUT | /xpanel/xoport/import/json/customers | customers:write |
| Delete | DELETE | /xpanel/xoport/delete/json/customers | customers:delete |
Export (GET)
Query-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
customers_id | int | Einzelnen Kunden exportieren |
customers_email_address | string | Nach E-Mail filtern |
customers_group_id | int | Nach Kundengruppe filtern |
limit | int | Max. Anzahl |
offset | int | Startposition |
Response-Felder
customers_id,customers_email_addresscustomers_firstname,customers_lastnamecustomers_telephone,customers_faxcustomers_group_id- Kundengruppeaddresses[]- Alle Adressen des Kunden
Adressen-Felder
entry_company,entry_firstname,entry_lastnameentry_street_address,entry_postcode,entry_cityentry_country_id,entry_zone_id
Seit v2.122.1 Der Export enthält keine Passwortdaten mehr: customers_password, customers_password_request, customers_password_request_time und customers_hash entfallen ersatzlos, im Kundendatensatz zusätzlich iban und bic.
Import (POST/PUT)
Beispiel-Request
curl -X POST "https://shop.de/xpanel/xoport/import/json/customers" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "customers",
"data": [{
"customers_email_address": "max@example.de",
"customers_firstname": "Max",
"customers_lastname": "Mustermann",
"customers_group_id": 1,
"addresses": [{
"entry_company": "Musterfirma GmbH",
"entry_street_address": "Musterstr. 1",
"entry_postcode": "12345",
"entry_city": "Musterstadt",
"entry_country_id": 81
}]
}]
}'Adresse teilweise ändern (PUT)
Korrigiert in v2.122.2
Eine bestehende Adresse ändern Sie über addresses[] mit address_book_id. Geschrieben wird nur, was im Objekt steht: Fehlende oder null-Felder bleiben, "" leert ein Feld. Land und Zone ändern sich nur, wenn Sie sie mitsenden. Ein neues Land ohne entry_zone_id setzt die Zone auf 0.
curl -X PUT "https://shop.de/xpanel/xoport/import/json/customers" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "customers",
"data": [{
"customers_id": 42,
"addresses": [{
"address_book_id": 905,
"entry_street_address": "Neue Straße 99",
"entry_country": "AT"
}]
}]
}'STORE_COUNTRY) und die Zone auf 0 zurück. Senden Sie bei diesen Shops das Land deshalb immer mit, als ISO-Code in entry_country oder als entry_country_id.- Bei unbekanntem Land meldet
warnings[]die WarnungADDRESS_COUNTRY. Beim Update bleibt das gespeicherte Land, eine neue Adresse erhält das Shopland. - Zu lange Werte werden nach Zeichen auf die Spaltenlänge gekürzt, mit der Warnung
ADDRESS_TRUNCATED. - Stehen nur
_set_defaultoder_set_billingim Objekt, wird die Standard- bzw. Rechnungsadresse gesetzt, ohne Adressfelder zu ändern.
Kundenrabatte (discounts[])
Neu in v2.57.0
Über das Feld discounts[] pflegen Sie die Kundenrabatte des Kunden (Feld „Rabatte“ in der Kundenverwaltung, Tabelle customers_discount). Eine Rabattzeile bedeutet: x % Rabatt auf Kategorie N.
Beispiel-Request
curl -X PUT "https://shop.de/xpanel/xoport/import/json/customers" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "customers",
"data": [{
"customers_id_extern": "20050",
"discounts": [
{"category_id": 0, "value": 10},
{"category_id": 22, "value": "12,5", "subcategories": 0, "special": 1}
]
}]
}'Felder je Rabattzeile
| Feld | Typ | Default | Beschreibung |
|---|---|---|---|
category_id | int | – | Kategorie-ID; 0 = Hauptebene – zusammen mit subcategories=1 wirkt der Rabatt auf das gesamte Sortiment |
value | decimal | Pflicht | Prozentwert; Dezimal-Komma erlaubt. Werte > 100 werden auf 100 begrenzt, Werte ≤ 0 werden übersprungen |
subcategories | 0/1 | 1 | Rabatt gilt auch für Unterkategorien |
qpb | 0/1 | 0 | Rabatt auch auf Staffelpreise |
option | 0/1 | 0 | Rabatt auch auf Merkmal-Aufpreise |
special | 0/1 | 0 | Rabatt auch auf Sonderangebote |
Replace-on-present-Semantik
discountsmit Einträgen vorhanden → der komplette Rabatt-Bestand des Kunden wird ersetzt"discounts": [](leer) → alle Rabatte des Kunden werden entfernt- Feld fehlt → Rabatte bleiben unangetastet (bestehende Anbindungen ändern nichts)
Das interne Freischalt-Flag des Kunden wird automatisch nachgeführt – die Rabatte wirken sofort im Shop. Die gleiche Semantik gilt auch für den XML-Kundenimport (<discounts>-Node).
Export: Der Customers-Export (GET) liefert discounts als Rohzeilen mit – Round-Trip-fähig.
WaWi-Adressierung
Neu in v2.57.0
customers_id_extern(WaWi-Kundennummer) undcustomers_group_idsind im JSON-Import jetzt schreibbar;customers_group_idwird gegen die vorhandenen Kundengruppen validiert.- PUT kann den Kunden jetzt auch ohne E-Mail über
customers_idodercustomers_id_externadressieren (reine Rabatt-/Stammdatenpflege).customers_id_externmuss dabei eindeutig sein. - POST verlangt weiterhin E-Mail + Adresse.
Delete (DELETE)
curl -X DELETE "https://shop.de/xpanel/xoport/delete/json/customers?customers_id=123" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Hinweis: DSGVO-relevante Daten! Beachten Sie Aufbewahrungsfristen für Bestellungen.