Customers Endpoint

Endpoint

Customers

Kundenverwaltung mit Multi-Adressen-Support.


Übersicht

OperationMethodEndpointScope
ExportGET/xpanel/xoport/export/json/customerscustomers:read
ImportPOST/xpanel/xoport/import/json/customerscustomers:write
UpdatePUT/xpanel/xoport/import/json/customerscustomers:write
DeleteDELETE/xpanel/xoport/delete/json/customerscustomers:delete

Export (GET)

Query-Parameter

ParameterTypBeschreibung
customers_idintEinzelnen Kunden exportieren
customers_email_addressstringNach E-Mail filtern
customers_group_idintNach Kundengruppe filtern
limitintMax. Anzahl
offsetintStartposition

Response-Felder

  • customers_id, customers_email_address
  • customers_firstname, customers_lastname
  • customers_telephone, customers_fax
  • customers_group_id - Kundengruppe
  • addresses[] - Alle Adressen des Kunden

Adressen-Felder

  • entry_company, entry_firstname, entry_lastname
  • entry_street_address, entry_postcode, entry_city
  • entry_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"
      }]
    }]
  }'
Shops vor v2.122.2: Dort setzte ein Adress-Update ohne Land das Land auf das Shopland (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 Warnung ADDRESS_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_default oder _set_billing im 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

FeldTypDefaultBeschreibung
category_idint–Kategorie-ID; 0 = Hauptebene – zusammen mit subcategories=1 wirkt der Rabatt auf das gesamte Sortiment
valuedecimalPflichtProzentwert; Dezimal-Komma erlaubt. Werte > 100 werden auf 100 begrenzt, Werte ≤ 0 werden übersprungen
subcategories0/11Rabatt gilt auch für Unterkategorien
qpb0/10Rabatt auch auf Staffelpreise
option0/10Rabatt auch auf Merkmal-Aufpreise
special0/10Rabatt auch auf Sonderangebote

Replace-on-present-Semantik

  • discounts mit 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) und customers_group_id sind im JSON-Import jetzt schreibbar; customers_group_id wird gegen die vorhandenen Kundengruppen validiert.
  • PUT kann den Kunden jetzt auch ohne E-Mail über customers_id oder customers_id_extern adressieren (reine Rabatt-/Stammdatenpflege). customers_id_extern muss 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.