Schnittstelle

Eigenes System anbinden

Für alles ohne fertiges Modul: Abo-Systeme, Buchungsplattformen, Eigenentwicklungen. Zwei Aufrufe genügen.

Bestellung

Eine Bestellung melden

Vom eigenen Server aus, sobald eine Bestellung entsteht. Beträge werden als ganzzahlige Centbeträge übergeben — eine Dezimalzahl wäre die Einladung zu Rundungsfehlern, die sich über viele Bestellungen zu echten Differenzen summieren.

POST https://api.affleo.de/api/v1/tracking/conversion
Content-Type: application/json

{
  "tenantId": "IHRE_KENNUNG",
  "externalOrderId": "1042",
  "amount": 11900,
  "currency": "EUR",
  "email": "kunde@example.com",
  "referralCode": "ANNA10"
}
FeldPflichtBedeutung
externalOrderIdjaIhre Bestellnummer. Verhindert Doppelzählung.
amountjaNettobetrag in Cent, ganzzahlig
emailempfohlenGrundlage der Kundenzuordnung. Wird sofort zu einem Schlüsselwert verrechnet, nie im Klartext gespeichert.
referralCodebedingtWenn bekannt. Sonst greift Klick oder Kundenzuordnung.
clickIdbedingtAus dem Browser-Skript, falls Sie es weiterreichen können
typeneinsale, lead oder subscription_renewal

Abonnements

Wiederkehrende Zahlungen

Bei Abo-Systemen entsteht die Folgebestellung ohne Zutun des Kunden. Es gibt keinen Klick, kein Cookie, keinen Empfehlungscode — trotzdem soll der Partner vergütet werden.

Der Weg dafür führt über die Kundenzuordnung: Der Kunde wird einmal einem Partner zugeordnet, danach findet ihn jede weitere Bestellung über die E-Mail wieder.

Erstens: Kunden zuordnen

Beim ersten Kontakt, solange der Empfehlungscode noch bekannt ist. Auch dann, wenn noch keine Zahlung erfolgt:

POST https://api.affleo.de/api/v1/tracking/customer

{
  "tenantId": "IHRE_KENNUNG",
  "email": "kunde@example.com",
  "referralCode": "ANNA10"
}

Zweitens: Verlängerungen melden

Bei jeder Abrechnung. Ohne Empfehlungscode — den findet Affleo über die Kundenzuordnung:

POST https://api.affleo.de/api/v1/tracking/conversion

{
  "tenantId": "IHRE_KENNUNG",
  "externalOrderId": "sub_88",
  "amount": 2900,
  "currency": "EUR",
  "email": "kunde@example.com",
  "type": "subscription_renewal"
}

Bei subscription_renewal geht das Datum in die Doppelzählungssperre ein. Abo-Systeme verwenden für alle Verlängerungen häufig dieselbe Bestellnummer — ohne diese Unterscheidung ginge jede Provision außer der ersten verloren.

Erstattung

Eine Retoure melden

Der Aufruf, den man am ehesten weglässt — und der am teuersten fehlt. Ohne ihn bleibt eine gutgeschriebene Provision bestehen, obwohl die Ware zurückging.

POST https://api.affleo.de/api/v1/tracking/refund
Content-Type: application/json

{
  "tenantId": "IHRE_KENNUNG",
  "externalOrderId": "1042",
  "amount": 5000,
  "reason": "Ware beschädigt"
}
Felder beim Melden einer Erstattung
FeldPflichtBedeutung
externalOrderIdjaIhre Bestellnummer aus der ursprünglichen Meldung
amountneinBetrag dieser Erstattung in Cent. Ohne Angabe geht die ganze Bestellung zurück.
reasonneinFreitext, höchstens 500 Zeichen

Teilerstattungen addieren sich

amount ist der Betrag des einzelnen Vorgangs, nicht die laufende Summe. Zwei Teilerstattungen über je 50,00 € werden als zwei Aufrufe mit je 5000 gemeldet; zusammen ergeben sie 100,00 €. Wer stattdessen den kumulierten Stand schickt, bucht doppelt zurück.

Zurückgebucht wird anteilig über alle Stufen. Werden von 200,00 € genau 50,00 € erstattet, geht ein Viertel jeder Provision zurück — aus 36,00 € werden 27,00 €.

Antwort

202 Accepted

{
  "conversionId": "…",
  "status": "refunded",
  "gesamtErstattet": "5000"
}

status steht auf refunded, solange nur ein Teil erstattet wurde, und auf cancelled, sobald der volle Bestellwert zurückgegangen ist.

Fehlerantworten
CodeBedeutung
404Bestellnummer für diesen Mandanten unbekannt — meist ist die ursprüngliche Meldung nie angekommen
409Bereits vollständig erstattet, oder die Summe überschreitet den Bestellwert

Diesen Aufruf sollten Sie protokollieren und im Fehlerfall wiederholen. Beim Bestelleingang bleiben Gutscheincode und Kundenzuordnung als zweiter Weg; bei der Erstattung gibt es keinen.

Im Browser

Ohne Serverzugriff

Erlaubt Ihr System keinen Serveraufruf, meldet das Skript die Bestellung über ein Ereignis:

window.dispatchEvent(new CustomEvent('affleo:conversion', {
  detail: {
    orderId: '1042',
    amount: 119.00,
    currency: 'EUR',
    email: 'kunde@example.com'
  }
}));

Der Serveraufruf ist verlässlicher: Er erreicht uns auch dann, wenn der Kunde die Seite sofort schließt oder ein Werbeblocker das Skript verhindert.