Ir al contenido
StampyWalletDocs
API y webhooks / Webhooks / Eventos

Lista de eventos

Los nueve eventos que envían los webhooks de StampyWallet, cuándo salen y el contenido exacto de su campo donnees.

Cada evento tiene el mismo sobre (id, type, cree_le, commerce, ver Webhooks). Solo cambia donnees, que se muestra solo a continuación. Los eventos salen tanto del mostrador como de la API: una visita escaneada o puesta con POST /v1/passages produce el mismo passage.cree.

EventoSe envía cuando
client.creeUn cliente se une al programa (se crea su tarjeta)
carte.ajouteeEl cliente guarda su tarjeta en Apple Wallet o Google Wallet
passage.creeSe pone una visita: uno o varios sellos, o puntos
passage.annuleSe anula la última visita de un cliente
recompense.atteinteUna visita supera un nivel: se debe una recompensa (una por nivel superado)
recompense.offerteLa recompensa se entrega al cliente
recompense.annuleeSe anula la entrega de una recompensa: vuelve a estar pendiente
carte_cadeau.vendueSe vende una tarjeta regalo
forfait.venduSe vende un bono prepagado

Nota : carte.ajoutee vale para Apple Wallet y Google Wallet: donnees.carte.wallet es apple o google. En Apple, el evento sale con cada dispositivo nuevo (un iPhone y luego un reloj generan dos). Quitar la tarjeta no envía nada.

client.cree

donnees
{
  "client": {
    "id": "3374a06e-9608-4376-91cb-1a3fb6721b04",
    "prenom": "Camille",
    "cree_le": "2026-10-22T05:52:45.664Z"
  }
}

telephone y email solo aparecen si el cliente los ha dado. prenom puede ser null.

carte.ajoutee

donnees
{
  "client": { "id": "40de4b86-1d7a-4cc6-add3-b7a83fa43c04", "prenom": "Inès",
              "telephone": "+33611223344", "email": "ines@example.com" },
  "carte": { "wallet": "apple" }
}

passage.cree

donnees
{
  "client": { "id": "40de4b86-1d7a-4cc6-add3-b7a83fa43c04", "prenom": "Inès",
              "telephone": "+33611223344", "email": "ines@example.com" },
  "passage": {
    "id": "226fdea1-ba59-49fb-93e6-60a14a765134",
    "quantite": 1,
    "montant": null,
    "devise": "EUR",
    "reference": "caisse-1",
    "source": "scan",
    "piste": "normal",
    "tampons": 1,
    "objectif": 2
  }
}
  • quantite: lo que vale la visita (sellos, o puntos en modo puntos).
  • montant: el importe del ticket en céntimos si se ha introducido; si no, null.
  • reference: el identificador de operación enviado por quien llama (la referencia de la API o la del mostrador); si no, null.
  • source: scan, manuel, api…
  • piste: normal, o premium para el segundo contador.
  • tampons (o points en modo puntos) y objectif: el contador después de la visita. Una visita que completa la tarjeta devuelve el de la tarjeta siguiente (a menudo 0); la recompensa llega en un recompense.atteinte aparte.

passage.annule

donnees
{
  "client": { "id": "40de4b86-1d7a-4cc6-add3-b7a83fa43c04", "prenom": "Inès",
              "telephone": "+33611223344", "email": "ines@example.com" },
  "passage": {
    "id": "d8f62d77-88a6-44ef-a0c3-2a7d5066b90a",
    "quantite": 1,
    "source": "scan",
    "piste": "normal",
    "tampons": 0,
    "objectif": 2
  },
  "recompenses_retirees": 0,
  "motif": "doble escaneo"
}

passage.id es el del passage.cree original, y el contador el de después de la anulación. recompenses_retirees: las recompensas que esta visita había desbloqueado y que desaparecen con ella. motif: el motivo introducido en el mostrador, o null.

recompense.atteinte

donnees
{
  "client": { "id": "40de4b86-1d7a-4cc6-add3-b7a83fa43c04", "prenom": "Inès",
              "telephone": "+33611223344", "email": "ines@example.com" },
  "recompense": {
    "id": "504c8734-3bbd-4fe9-95f8-7a67c8239dab",
    "libelle": "Un café gratis",
    "palier": 2,
    "piste": "normal",
    "expire_le": null
  },
  "passage_id": "8bfbdd5e-eff4-4a3b-94fe-1557ec6edce6"
}

Un evento por nivel superado. expire_le vale null si las recompensas del comercio no caducan.

recompense.offerte

donnees
{
  "client": { "id": "40de4b86-1d7a-4cc6-add3-b7a83fa43c04", "prenom": "Inès",
              "telephone": "+33611223344", "email": "ines@example.com" },
  "recompense": {
    "id": "504c8734-3bbd-4fe9-95f8-7a67c8239dab",
    "libelle": "Un café gratis",
    "piste": "normal",
    "offerte_le": "2026-10-22T05:54:51.790Z"
  }
}

recompense.annulee

donnees
{
  "client": { "id": "40de4b86-1d7a-4cc6-add3-b7a83fa43c04", "prenom": "Inès",
              "telephone": "+33611223344", "email": "ines@example.com" },
  "recompense": {
    "id": "504c8734-3bbd-4fe9-95f8-7a67c8239dab",
    "libelle": "Un café gratis",
    "piste": "normal"
  },
  "motif": "tarjeta equivocada"
}

carte_cadeau.vendue

donnees
{
  "client": null,
  "carte_cadeau": {
    "id": "ac7e56a5-3c00-492f-971a-21ca7d675fd6",
    "code": "EJ9Y-7FYN",
    "sorte": "montant",
    "produit": null,
    "montant": 2500,
    "devise": "EUR",
    "pour": "Lucie",
    "de": "Marc",
    "canal": "comptoir",
    "expire_le": "2027-04-22T05:54:51.879Z"
  }
}

sorte vale montant o produit (en ese caso produit lleva su nombre y montant su precio). Aquí, 2500 céntimos: 25 €.

Atención : code es el código de la tarjeta regalo, el que lleva su QR: basta para cobrarla en el mostrador. Trátalo como un secreto: no lo escribas en una hoja de cálculo compartida ni en registros.

forfait.vendu

donnees
{
  "client": null,
  "forfait": {
    "id": "0ec29323-ed13-4e6b-9595-963601290eac",
    "code": "XFF2-WTW9",
    "nom": "10 cafés",
    "unites": 10,
    "prix": 3000,
    "devise": "EUR",
    "titulaire": "Paul",
    "canal": "comptoir",
    "expire_le": "2027-04-22T05:54:51.891Z"
  }
}

titulaire: el nombre escrito en la venta, o null. expire_le vale null para un bono sin vencimiento. Como en una tarjeta regalo, code debe mantenerse en secreto.

Nota : los datos personales se limitan a lo que el cliente dio al registrarse. Una vez recibidos, son responsabilidad tuya: consérvalos solo el tiempo necesario.

Actualizado el

¿Te ha sido útil esta página?