API Produit: Ces points de terminaison font partie de l'API Loyalty. Tous les points de terminaison commencent par: /api/v1/loyalty/points/

Gagner des Points

POST Gagner des Points
points_write
/api/v1/loyalty/points/earn

Attribuer des points à un membre basé sur un montant d'achat. Supporte l'identification par member_id, email ou téléphone. Crée automatiquement les membres si nécessaire.

Comment ça Marche

1

Configuration de la Carte

La carte de points a un ratio de points configuré (ex: 1 point par 10€ dépensés).

2

Envoyer la Transaction

Envoyez card_id, identifiant du membre et purchase_amount pour calculer les points.

3

Créditer les Points

Les points sont automatiquement crédités sur le solde du membre.

Corps de la Requête

{
  "card_id": 10,
  "member_id": 123,
  "purchase_amount": 50.00,
  "reference": "ORDER-12345"
}

card_id (integer, requis) - ID de la carte de points
member_id (integer, conditionnel) - ID du membre
email (string, conditionnel) - Email du membre (alternative à member_id)
phone (string, conditionnel) - Téléphone du membre (alternative à member_id)
member_name (string, optionnel) - Nom pour auto-création de membre
purchase_amount (number, requis) - Montant de l'achat
reference (string, optionnel) - Référence de transaction externe

Réponse

{
  "success": true,
  "data": {
    "transaction_id": 456,
    "points_earned": 50,
    "new_balance": 150,
    "member_id": 123,
    "card_id": 10,
    "is_new_member": false,
    "notification_sent": "points_earned",
    "reference": "ORDER-12345",
    "earned_at": "2025-01-15T10:30:00Z"
  }
}

Échanger des Points

POST Échanger des Points
points_write Authentification Membre Requise
/api/v1/loyalty/points/redeem

Échanger des points contre une récompense. Le membre doit avoir suffisamment de points pour la récompense demandée.

Authentification Requise: Ce point de terminaison nécessite l'en-tête X-Member-Token pour protéger les points du membre.

En-têtes

X-App-Id: app_abc123...
X-Api-Key: test_xyz789...
X-Member-Token: eyJ0eXAiOiJKV1QiLCJhbGc...

Corps de la Requête

{
  "card_id": 10,
  "reward_id": 5,
  "reference": "REDEEM-12345"
}

card_id (integer, requis) - ID de la carte de points
reward_id (integer, requis) - ID de la récompense à échanger
reference (string, optionnel) - Référence externe

Réponse

{
  "success": true,
  "data": {
    "transaction_id": 457,
    "reward_id": 5,
    "reward_name": "Café Gratuit",
    "points_redeemed": 100,
    "new_balance": 50,
    "member_id": 123,
    "card_id": 10,
    "reference": "REDEEM-12345",
    "redeemed_at": "2025-01-15T11:00:00Z"
  }
}

Rembourser des Points

POST Rembourser des Points
points_write
/api/v1/loyalty/points/refund

Annuler/déduire des points précédemment gagnés lors d'un remboursement de commande. Utilisez quand une commande est remboursée pour retirer les points correspondants.

Note: Le système calculera automatiquement les points à déduire basé sur le montant remboursé, ou vous pouvez spécifier un nombre explicite de points.

Corps de la Requête

{
  "card_id": 10,
  "member_id": 123,
  "refund_amount": 25.00,
  "reference": "REFUND-ORDER-12345"
}

card_id (integer, requis) - ID de la carte de points
member_id (integer, conditionnel) - ID du membre
email (string, conditionnel) - Email du membre (alternative à member_id)
phone (string, conditionnel) - Téléphone du membre (alternative à member_id)
refund_amount (number, requis) - Montant remboursé
points_to_deduct (integer, optionnel) - Points explicites à déduire
reference (string, optionnel) - Référence de transaction

Réponse

{
  "success": true,
  "data": {
    "transaction_id": 458,
    "points_deducted": 25,
    "refund_amount": 25.00,
    "previous_balance": 150,
    "new_balance": 125,
    "member_id": 123,
    "card_id": 10,
    "reference": "REFUND-ORDER-12345",
    "balance_warning": null,
    "refunded_at": "2025-01-15T12:00:00Z"
  }
}

Solde de Points

GET Solde de Points
points_read
/api/v1/loyalty/points/balance

Récupérer le solde de points actuel d'un membre sur une carte spécifique.

Paramètres de Requête

GET /api/v1/loyalty/points/balance?card_id=10&member_id=123

card_id (integer, requis) - ID de la carte de points
member_id (integer, requis) - ID du membre

Réponse

{
  "success": true,
  "data": {
    "card_id": 10,
    "member_id": 123,
    "points_balance": 150,
    "reward_system": "points",
    "queried_at": "2025-01-15T10:30:00Z"
  }
}

Historique des Points

GET Historique des Points
points_read
/api/v1/loyalty/points/history

Récupérer l'historique des transactions de points d'un membre avec pagination.

Paramètres de Requête

GET /api/v1/loyalty/points/history?card_id=10&member_id=123&limit=20&offset=0

card_id (integer, requis) - ID de la carte
member_id (integer, requis) - ID du membre
limit (integer, optionnel) - Nombre de résultats (défaut: 20, max: 100)
offset (integer, optionnel) - Décalage pour pagination

Réponse

{
  "success": true,
  "data": {
    "card_id": 10,
    "member_id": 123,
    "transactions": [
      {
        "id": 456,
        "points": 50,
        "event": "staff_added_points",
        "created_at": "2025-01-15T10:30:00Z"
      },
      {
        "id": 457,
        "points": -100,
        "event": "staff_redeemed_reward",
        "created_at": "2025-01-15T11:00:00Z"
      }
    ],
    "pagination": {
      "limit": 20,
      "offset": 0,
      "total": 45,
      "has_more": true
    }
  }
}
ESC