API Zugriff

Diese Dokumentation beschreibt die verfügbaren API-Endpunkte für das Loyalty Plugin.

circle-info

Alle Endpunkte erfordern Authentifizierung (auth_required: true). Verwenden Sie die Shopware API-Authentifizierung mit OAuth oder einem API-Key.


1. Kundenprofil abrufen

Ruft ein einzelnes Kundenprofil mit allen Loyalty-Informationen ab.

Endpunkt

GET /api/cogi/loyalty/customer-profile/{customerId}

Parameter

Parameter
Typ
Pflicht
Beschreibung

customerId

string (path)

Ja

Die ID des Kunden

Response

Status: 200 OK

{
  "status": "success",
  "data": {
    "id": "0x...",
    "customerId": "0x...",
    "points": 500,
    "pointsExpirationDate": "2025-12-31",
    "customFieldRewards": null,
    "setBirthday": true,
    "newsletter": false,
    "lastPointsReceived": "2024-01-20 14:30:00",
    "createdAt": "2024-01-15 10:30:00",
    "updatedAt": "2024-01-20 15:45:00",
    "level": {
      "id": "0x...",
      "name": "Silver",
      "minPoints": 100,
      "tagId": "0x...",
      "multiplier": 1.5,
      "color": "#FF5733"
    },
    "previousLevel": {
      "id": "0x...",
      "name": "Bronze",
      "minPoints": 0,
      "tagId": "0x...",
      "multiplier": 1.0,
      "color": "#C0C0C0",
      "pointsToFallDown": 400
    },
    "nextLevel": {
      "id": "0x...",
      "name": "Gold",
      "minPoints": 1000,
      "tagId": "0x...",
      "multiplier": 2.0,
      "color": "#FFD700",
      "pointsToReach": 500
    },
    "customer": {
      "id": "0x...",
      "email": "[email protected]",
      "firstName": "Max",
      "lastName": "Mustermann",
      "customerNumber": "CUST-001"
    }
  }
}

Status: 404 Not Found (wenn Profil nicht gefunden)


2. Kundenprofile abrufen (Liste)

Ruft mehrere Kundenprofile mit Filter- und Paginations-Optionen ab.

Endpunkt

Query-Parameter

Parameter
Typ
Pflicht
Beschreibung

customerIds

string (comma-separated)

Nein

Filter nach Kunden-ID(s), kommagetrennt

levelId

string

Nein

Filter nach Level-ID

minPoints

integer

Nein

Mindestanzahl Punkte

maxPoints

integer

Nein

Maximale Anzahl Punkte

limit

integer

Nein

Anzahl Ergebnisse (Standard: 20)

offset

integer

Nein

Offset für Pagination (Standard: 0)

sortBy

string

Nein

Sortierfeld (Standard: 'points')

sortDirection

string

Nein

Sortierrichtung: 'ASC' oder 'DESC' (Standard: 'DESC')

Beispiel-Requests

Alle Profile mit mindestens 100 Punkten:

Profile bestimmter Kunden:

Profile eines bestimmten Levels:

Paginierte Ergebnisse:

Sortiert nach Punkten (aufsteigend):

Response

Status: 200 OK


3. Kundentransaktionen abrufen

Ruft alle Transaktionen eines bestimmten Kunden ab.

Endpunkt

Parameter

Parameter
Typ
Pflicht
Beschreibung

customerId

string (path)

Ja

Die ID des Kunden

Query-Parameter

Parameter
Typ
Pflicht
Beschreibung

received

boolean

Nein

Filter nach empfangenen Transaktionen (true/false)

refund

boolean

Nein

Filter nach erstatteten Transaktionen (true/false)

expired

boolean

Nein

Filter nach abgelaufenen Transaktionen (true/false)

orderId

string

Nein

Filter nach Bestell-ID

minValue

integer

Nein

Mindestpunktwert

maxValue

integer

Nein

Maximalpunktwert

limit

integer

Nein

Anzahl Ergebnisse (Standard: 20)

offset

integer

Nein

Offset für Pagination (Standard: 0)

sortBy

string

Nein

Sortierfeld (Standard: 'createdAt')

sortDirection

string

Nein

Sortierrichtung: 'ASC' oder 'DESC' (Standard: 'DESC')

Beispiel-Requests

Alle Transaktionen eines Kunden:

Nur empfangene Transaktionen:

Transaktionen einer bestimmten Bestellung:

Nur positive Transaktionen (Gutschriften):

Nur negative Transaktionen (Abzüge):

Paginierte Ergebnisse:

Response

Status: 200 OK


4. Punkte hinzufügen

Fügt Punkte für einen bestimmten Kunden hinzu. Nur positive Werte sind erlaubt.

Endpunkt

Request Body

Parameter
Typ
Pflicht
Beschreibung

customerId

string (UUID)

Ja

Die ID des Kunden

points

integer

Ja

Anzahl der Punkte (muss positiv sein, größer als 0)

description

string

Nein

Beschreibung der Transaktion (Standard: "Manuell gesetzt via API")

salesChannelId

string (UUID)

Nein

ID des Sales Channels

orderId

string (UUID)

Nein

ID der Bestellung (falls die Punkte mit einer Bestellung verknüpft sind)

Beispiel-Request

Punkte hinzufügen:

Response

Status: 200 OK

Status: 400 Bad Request (bei ungültigen Parametern)

Status: 404 Not Found (wenn Kunde nicht gefunden)

Hinweise

  • Punkte werden über releasePoints verarbeitet, was das Profil automatisch aktualisiert und Level-Änderungen berücksichtigt.

  • Nur positive Werte (größer als 0) sind erlaubt.

  • Wenn der Kunde noch kein Profil hat, wird automatisch eines erstellt.

  • Für jede Punkte-Änderung wird eine Transaktion erstellt, die in der Historie sichtbar ist.


5. Punkte abziehen

Zieht Punkte von einem bestimmten Kunden ab. Nur positive Werte sind erlaubt (werden intern als negative Transaktion gespeichert).

Endpunkt

Request Body

Parameter
Typ
Pflicht
Beschreibung

customerId

string (UUID)

Ja

Die ID des Kunden

points

integer

Ja

Anzahl der abzuziehenden Punkte (muss positiv sein, größer als 0)

description

string

Nein

Beschreibung der Transaktion (Standard: "Manuell abgezogen via API")

salesChannelId

string (UUID)

Nein

ID des Sales Channels

orderId

string (UUID)

Nein

ID der Bestellung (falls die Punkte-Abzüge mit einer Bestellung verknüpft sind)

Beispiel-Request

Punkte abziehen:

Response

Status: 200 OK

Status: 400 Bad Request (bei ungültigen Parametern oder unzureichenden Punkten)

Status: 404 Not Found (wenn Kunde oder Profil nicht gefunden)

Hinweise

  • Punkte werden direkt vom Profil abgezogen. Das Level wird automatisch neu berechnet.

  • Nur positive Werte (größer als 0) sind erlaubt. Der Wert wird intern als negative Transaktion gespeichert.

  • Der Endpunkt prüft, ob der Kunde genügend Punkte hat. Bei unzureichenden Punkten wird ein Fehler zurückgegeben.

  • Der Kunde muss bereits ein Profil haben. Es wird kein Profil erstellt, wenn keines existiert.

  • Für jeden Punkte-Abzug wird eine Transaktion mit negativem Wert erstellt, die in der Historie sichtbar ist.


Datenstrukturen

Profile-Objekt

Das Profil-Objekt enthält folgende Felder:

Feld
Typ
Beschreibung

id

string (UUID)

Eindeutige ID des Profils

customerId

string (UUID)

ID des zugehörigen Kunden

points

integer

Aktuelle Anzahl der Punkte

pointsExpirationDate

string (date) | null

Ablaufdatum der Punkte (falls vorhanden)

customFieldRewards

array | null

Custom Field Rewards

setBirthday

boolean

Ob Geburtstag gesetzt ist

newsletter

boolean

Newsletter-Abonnement Status

lastPointsReceived

string (datetime) | null

Datum und Uhrzeit, wann der Kunde zuletzt Punkte erhalten hat

createdAt

string (datetime)

Erstellungsdatum des Profils

updatedAt

string (datetime)

Letztes Aktualisierungsdatum

Hinweis: lastPointsReceived ist null, wenn der Kunde noch nie Punkte erhalten hat oder wenn keine Transaktion mit positivem Wert gefunden werden kann.

Level-Objekt

Previous Level-Objekt

Enthält alle Felder des Level-Objekts plus:

Next Level-Objekt

Enthält alle Felder des Level-Objekts plus:

Customer-Objekt

Transaction-Objekt

Order-Objekt (in Transaction)


Fehlerbehandlung

Alle Endpunkte können folgende Fehlerantworten zurückgeben:

400 Bad Request

404 Not Found

500 Internal Server Error


1

Hinweise: Pagination

Verwenden Sie limit und offset für große Datensätze. Die Standard-Limit beträgt 20 Einträge.

2

Hinweise: Sortierung

Standardmäßig werden Ergebnisse nach createdAt (Transaktionen) bzw. points (Profile) in absteigender Reihenfolge sortiert.

3

Hinweise: Filter-Kombinationen

Mehrere Filter können kombiniert werden, um präzise Ergebnisse zu erhalten.

4

Hinweise: Assoziationen

Order-, Customer- und SalesChannel-Informationen werden nur zurückgegeben, wenn sie verfügbar sind. Prüfen Sie auf null-Werte.

5

Hinweise: Punkte-Werte

In Transaktionen sind positive Werte Gutschriften und negative Werte Abzüge.

6

Hinweise: UUID-Format

Alle IDs sind UUIDs im Binärformat (0x...). Stellen Sie sicher, dass Ihre Client-Implementierung diese korrekt verarbeitet.


Beispiele für häufige Use Cases

Alle Profile eines bestimmten Levels abrufen:

Top-Kunden nach Punkten abrufen:

Alle Transaktionen eines Kunden für eine Bestellung:

Nur aktive (nicht abgelaufene) Transaktionen:

Alle Transaktionen mit Gutschriften (positive Werte):

Punkte für einen Kunden hinzufügen:

Punkte von einem Kunden abziehen:


6. Verfügbare Aktionen abrufen

Ruft alle Aktionen ab, die der Kunde noch ausführen kann, um weitere Punkte zu erhalten.

Endpunkt

Parameter

Parameter
Typ
Pflicht
Beschreibung

customerId

string (path)

Ja

Die ID des Kunden

Query-Parameter

Parameter
Typ
Pflicht
Beschreibung

salesChannelId

string (UUID)

Nein

ID des Sales Channels (falls nicht vom Kunden abgeleitet werden kann)

Response

Status: 200 OK

Status: 404 Not Found (wenn Kunde oder Profil nicht gefunden)

Verfügbare Aktionstypen

Typ
Beschreibung

newsletter

Newsletter-Abonnement

birthday

Geburtstag im Profil setzen

customField

Custom Field im Profil ausfüllen

Response-Felder

Feld
Typ
Beschreibung

type

string

Typ der Aktion (newsletter, birthday, customField)

name

string

Name der Aktion

points

integer

Anzahl der Punkte, die für diese Aktion vergeben werden

completed

boolean

Ob die Aktion bereits ausgeführt wurde (aber noch nicht belohnt)

description

string

Beschreibung der Aktion

fieldFilled

boolean

(Nur bei customField) Ob das Feld bereits ausgefüllt ist

Hinweise

  • Newsletter: Wird nur angezeigt, wenn der Kunde noch kein Newsletter-Abonnement hat und noch keine Newsletter-Punkte erhalten hat.

  • Geburtstag: Wird nur angezeigt, wenn der Geburtstag noch nicht gesetzt wurde und noch keine Geburtstags-Punkte erhalten wurden.

  • Custom Fields: Werden nur angezeigt, wenn die Felder konfiguriert sind und noch nicht belohnt wurden. Die Aktion wird auch angezeigt, wenn das Feld bereits ausgefüllt ist, aber noch keine Belohnung erhalten hat.


War das hilfreich?