Kernconcepten

Beloningen & Inwisselingen

Beloningen zijn wat je klanten met hun gespaarde loyaliteitspunten kunnen kopen. Besteedt een klant punten aan een beloning, dan legt Puntjes dat vast als een inwisseling, met een eigen bevestigingscode.


Beloningstypen

Korting

Korting in geld op een volgende aankoop:

VeldBeschrijving
discount_valueHet kortingsbedrag
discount_typepercent (bv. 10% korting) of fixed (bv. EUR 5,00 korting)

Gratis product

Een gratis product of dienst:

VeldBeschrijving
product_referenceVerwijzing naar het gratis product (die bepaal je zelf)

Beloningseigenschappen

VeldTypeBeschrijving
idintegerUniek belonings-ID
namestringNaam van de beloning
descriptionstringOmschrijving van de beloning
typestringdiscount of free_product
point_costintegerPunten die het inwisselen kost
total_stockintegerTotale voorraad (null = onbeperkt)
remaining_stockintegerVoorraad die nog over is
statusstringactive of inactive
available_fromdatetimeVanaf wanneer de beloning te krijgen is (optioneel)
available_untildatetimeTot wanneer de beloning te krijgen is (optioneel)
image_pathstringDe geüploade afbeelding van de beloning
code_valid_for_hoursintegerHoeveel uur de bevestigingscode geldig blijft (optioneel)
branchesarray|nullDe vestigingen waar klanten deze beloning kunnen inwisselen, elk { "external_id", "name", "type" }. null betekent elke vestiging

Beschikbaarheid

Met available_from en available_until beperk je een beloning tot een periode. De API geeft alleen de beloningen terug die op dat moment lopen en nog voorraad hebben.


Inwisselproces

1. De klant kiest een beloning

Het kassasysteem toont de beloningen die te krijgen zijn en de klant kiest er een. Haal de actieve beloningen op met het beloningen-endpoint.

2. Dien een inwisseling in

POST /api/v1/redemptions
{
    "identifier": "CARD-001",
    "reward_id": 5,
    "idempotency_key": "redeem-2024-0042"
}

De API controleert:

  • of het walletsaldo van de klant volstaat
  • of de beloning actief en beschikbaar is
  • of er nog voorraad is
  • of de beloning de vestiging toestaat waar je de inwisseling boekt

Dankzij de idempotency_key kun je de aanroep gerust opnieuw sturen: dezelfde sleutel levert de oorspronkelijke inwisseling op, en schrijft geen punten een tweede keer af.

Waar de inwisseling plaatsvond

branch is je eigen sleutel voor de winkel: de external_id die je die vestiging gaf. De volgorde is dezelfde als bij een transactie: de sleutel in de payload wint, anders de standaardvestiging van de API-credential, anders geen vestiging. Een sleutel die bij geen van je vestigingen hoort, wordt geweigerd met BRANCH_NOT_FOUND (422). Zo gaat een typfout niet door voor een inwisseling zonder vestiging.

Een beloning die vestigingen noemt, kunnen klanten alleen daar inwisselen. Stuur je geen vestiging, of een vestiging die er niet bij staat, dan wordt de aanroep geweigerd met BRANCH_REQUIRED (422). Eén code voor allebei, want allebei hebben dezelfde oplossing: noem een vestiging die de beloning toestaat.

De vestiging wordt één keer vastgelegd. Stuur je dezelfde idempotency_key opnieuw, dan krijg je de oorspronkelijke inwisseling terug, met de vestiging van de eerste aanroep, ook als de herhaling een andere noemt.

3. De bevestigingscode komt terug

Lukt de aanroep, dan gaan de punten van de wallet van de klant af en krijg je een inwisseling terug met een bevestigingscode:

{
    "data": {
        "redemption_id": 12,
        "confirmation_code": "PNTJ-K4MP7QRS",
        "reward": {
            "name": "Gratis koffie",
            "type": "free_product"
        },
        "points_deducted": 500,
        "remaining_balance": 1000,
        "redeemed_at": "2024-03-15T12:30:00+00:00",
        "expires_at": "2024-03-15T14:30:00+00:00"
    }
}

4. Verifieer de inwisseling

Toont de klant de bevestigingscode, dan verifieer je die:

POST /api/v1/redemptions/{code}/verify

Daarmee gaat de inwisseling van pending naar verified.


Inwisselstatus

StatusBeschrijving
pendingCode uitgegeven, wacht op verificatie aan de kassa
verifiedCode geverifieerd, beloning meegegeven

Hoe lang een bevestigingscode geldig is

Staat er op een beloning een code_valid_for_hours, dan verloopt de bevestigingscode na dat aantal uur. Daarna kun je hem niet meer verifiëren. Het veld expires_at in de response van de inwisseling zegt wanneer dat moment valt.


Inwisseling opzoeken

Je zoekt een inwisseling op met de bevestigingscode:

GET /api/v1/redemptions/{code}

Handig voor een kassasysteem dat de inwisseling eerst wil tonen en pas daarna verifieert.

Zie de endpoints voor inwisselen voor de volledige API-referentie.

Volgende
Campagnes