For developers & integratorsFür Entwickler & Integratoren

POST /pos/v2/evaluate

One call evaluates the whole basket: line items in, resolved discounts, totals and upsell recommendations out. That's the integration. The rest is detail — and the detail is documented. Ein Call bewertet den ganzen Warenkorb: Positionen rein — aufgelöste Rabatte, Summen und Upsell-Empfehlungen raus. Das ist die Integration. Der Rest ist Detail — und das Detail ist dokumentiert.

requestPOST /pos/v2/evaluate
{
  "items": [
    { "articleNumber": "CIGAR-PREM-01",
      "quantity": 5, "unitPrice": 18.00 },
    { "articleNumber": "COCKTAIL-SPRING",
      "quantity": 2, "unitPrice": 12.00 }
  ],
  "customer": {
    "customerGroup": "MILITARY",
    "loyaltyCardNo": "L-829441"
  },
  "coupons": [ { "code": "SAVE10" } ],
  "posGroupCode": "STORE-MUC-01",
  "timestamp": "2026-06-06T18:30:00Z"
}
response200 · EvaluateResponseV2
{
  "minorVersion": 2,
  "lineItems": [
    { "articleNumber": "CIGAR-PREM-01",
      "quantity": { "value": 5, "unitOfMeasure": "PCE" },
      "unitPrice":    { "value": 18.00, "currency": "EUR" },
      "lineTotal":    { "value": 90.00, "currency": "EUR" },
      "lineDiscount": { "value": 9.00, "currency": "EUR" },
      "lineNet":      { "value": 81.00, "currency": "EUR" },
      "discounts": [ { "promotionName": "Cigar Tuesday", "discountType": "PERCENTAGE",
        "totalDiscount": { "value": 9.00, "currency": "EUR" }, "triggeredByCoupon": false } ] }
    /* …COCKTAIL-SPRING line omitted */
  ],
  "totals": {
    "subtotal":   { "value": 114.00, "currency": "EUR" },
    "discount":   { "value": 15.40,  "currency": "EUR" },
    "grandTotal": { "value": 98.60,  "currency": "EUR" }
  },
  "appliedCoupons":  [ { "code": "SAVE10", "couponTypeName": "Spring Saver", "promotionIds": ["…"] } ],
  "invalidCoupons":  [ /* { code, reason } */ ],
  "recommendations": [ /* { kind, code, defaultMessage, promotionName } */ ],
  "nudges": [ {
    "message": "1 more cocktail unlocks Happy Hour",
    "potentialSaving": { "value": 2.00, "currency": "EUR" }
  } ],
  "meta": { "evaluatedAt": "…", "isSimulation": false, "source": "btp" }
}

Illustrative payload — abbreviated for the page. The complete wire contract lives in the OpenAPI spec. Illustratives Payload — für die Seite gekürzt. Der vollständige Wire-Contract steht in der OpenAPI-Spezifikation.

The surfacesDie Schnittstellen

Three APIs. One engine underneath.Drei APIs. Eine Engine darunter.

POS API · /pos · for POS terminals & shopsfür Kassen & Shops
POST/pos/v2/evaluateEvaluate a basket: resolved discounts, totals, free items, recommendations.Warenkorb bewerten: aufgelöste Rabatte, Summen, Gratisartikel, Empfehlungen.REST
POST/pos/v2/simulateSame logic, zero side effects — no coupon redemption, no budget consumption, no audit writes.Gleiche Logik, null Nebenwirkungen — keine Coupon-Einlösung, kein Budgetverbrauch, keine Audit-Einträge.REST
POST/pos/v2/confirmConfirm the transaction: redeems coupons, consumes budgets, writes the calculation log.Transaktion bestätigen: löst Coupons ein, verbraucht Budgets, schreibt das Berechnungsprotokoll.REST
POST/pos/coupons/…Coupon lifecycle: validate, reserve, redeem, cancel, activate, issue.Coupon-Lebenszyklus: validate, reserve, redeem, cancel, activate, issue.REST
Public API · /api/v1 · for your backend & integrationsfür Ihr Backend & Integrationen
CRUD/api/v1/Promotions …Stable external contract over promotions, coupons, budgets, articles, groups and code lists.Stabiler externer Vertrag über Promotions, Coupons, Budgets, Artikel, Gruppen und Codelisten.REST + OData V4
POST…/bulkImportAsynchronous bulk imports per entity — returns a job ID and a status URL to poll.Asynchrone Massenimporte pro Entität — liefert Job-ID und Status-URL zum Abfragen.REST + OData V4
GET/api/v1/$metadataFull OData metadata. Versioning: major in the URL, minor in every response body.Vollständige OData-Metadaten. Versionierung: Major in der URL, Minor in jedem Response-Body.OData V4
Reporting & Ops
GET/reporting/…Analytics: promotion performance, budget utilization, coupon redemption — exportable to BW or data lake.Analytics: Promotion-Performance, Budgetauslastung, Coupon-Einlösung — exportierbar nach BW oder Data Lake.OData V4
GET/health · /metricsDB and cache connectivity check; Prometheus metrics for your monitoring stack.DB- und Cache-Konnektivitätscheck; Prometheus-Metriken für Ihr Monitoring.HTTP

AuthenticationAuthentifizierung

Standard SAP security. Nothing exotic.Standard-SAP-Security. Nichts Exotisches.

OAuth 2.0 · XSUAA

Tokens for servicesTokens für Services

Backends and integrations authenticate with XSUAA-issued JWTs. Scopes separate read from write on the Public API.Backends und Integrationen authentifizieren sich mit XSUAA-JWTs. Scopes trennen Lesen von Schreiben auf der Public API.

mTLS

Certificates for POS terminalsZertifikate für Kassen

POS terminals authenticate with mutual TLS client certificates — built for fleets of devices, not browser sessions.POS-Terminals authentifizieren sich mit Mutual-TLS-Client-Zertifikaten — gebaut für Geräteflotten, nicht für Browser-Sessions.

RolesRollen

Least privilege by defaultLeast Privilege ab Werk

Admin, Promotion Manager, Budget Manager, POS Reader — every endpoint checks the role it needs and nothing more.Admin, Promotion Manager, Budget Manager, POS Reader — jeder Endpunkt prüft genau die Rolle, die er braucht. Nicht mehr.

The OpenAPI specification is generated from the service definitions and validated in CI — the spec can't drift from the implementation. Die OpenAPI-Spezifikation wird aus den Service-Definitionen generiert und in der CI validiert — die Spec kann nicht von der Implementierung abdriften.