Aller au contenu

Événements : clients, adresses et inscriptions marketing

Cette page décrit les six clés du compte client, des adresses et de l’inscription à vos listes marketing. Deux points à lire avant de coder : l’événement client part bien plus souvent qu’on ne l’imagine, et une modification d’adresse déclenche toujours une cascade vers les expéditions et les commandes, même sans rapport avec la livraison.

ChampTypeNullableDescription
identiernonIdentifiant interne.
emailchaînenonAdresse e-mail actuelle.
uuidchaînenonIdentifiant public (cus_...), à préférer à id comme clé.
refpchaînenonURL de parrainage, construite avec le domaine de votre boutique.
has_active_subscriptionbooléennonRecalculé à chaque envoi, pas au moment du fait déclencheur.
infotableau ou nulouiCommentaires internes de la fiche client.
ChampTypeNullableDescription
identiernonIdentifiant de l’adresse.
user_identiernonClient propriétaire.
addresschaînenonPremière ligne d’adresse.
address1chaîneouiComplément d’adresse.
postcodechaînenonCode postal.
citychaînenonVille.
phonechaîneouiTéléphone, normalisé au format international si possible.
first_name, last_namechaînenonNom du destinataire.
region_identiernonRégion interne.
division, division_namechaîneouiSubdivision administrative, selon le pays.
deletablebooléennonCalcul de droits fait au moment de l’envoi, pas un état stable : ne le stockez pas.
company_namechaîneouiRaison sociale, pour une adresse professionnelle.
countryobjetnonVoir « Objet pays », toujours présent.
external_identierouiIdentifiant venu d’un import historique.

Toujours présent dans l’objet adresse, jamais nul.

ChampTypeNullableDescription
identiernonIdentifiant interne.
namechaînenonNom du pays.
alphaCodechaînenonCode ISO à deux lettres (FR).

Quatre champs, sans identifiant : la clé fonctionnelle est le couple adresse e-mail et boutique.

ChampTypeNullableDescription
emailchaînenonAdresse e-mail inscrite.
tenant_identiernonIdentifiant de votre boutique.
validbooléennonVrai si active, faux si désinscrite ou rejetée.
list_idchaîneouiListe marketing chez votre prestataire d’envoi.

Objet envoyé : client complet. Délai avant envoi : aucun. Exemple complet : dans le contrat OpenAPI (/openapi/ciklik-webhooks.yaml), webhook created_user.

À chaque création réelle de compte : inscription sur votre boutique, création par l’API (POST /customers), passage en caisse, et validation d’un panier PrestaShop (le client est créé à cet instant s’il n’existait pas encore).

Sur des créations techniques sans marchand identifié : compte créé par le webhook interne d’abonnement, ou par une action interne d’attribution de permissions.

Toujours un tableau vide.

Aucun.

created_user
{
"id": 1,
"email": "claire.martin@example.com",
"uuid": "cus_Qx7hR3eaEowcv1DX",
"refp": "https://boutique.example.com/formules?refp=CLAIRE2026",
"has_active_subscription": false,
"info": null,
"changed": []
}

Objet envoyé : client complet, avec les valeurs à jour. Délai avant envoi : aucun. Exemple complet : dans le contrat OpenAPI (/openapi/ciklik-webhooks.yaml), webhook updated_user (le reste de la charge utile est identique à celle de created_user).

C’est le point sensible de cette page.

Sur tout changement métier (e-mail, informations de compte), mais aussi sur des faits purement techniques liés à la session ou à la sécurité du compte, sans qu’aucune donnée métier n’ait changé : une connexion avec « se souvenir de moi », une simple déconnexion, l’activation ou la désactivation de la double authentification, une réinitialisation de mot de passe.

Sur quelques écritures silencieuses : pose du parrain juste après l’inscription, import de clients par fichier CSV, mise à jour d’un identifiant d’import historique.

Les champs réellement modifiés, en valeur brute telle que stockée en base. Certains sont des éléments internes d’authentification ou de session, sans intérêt métier.

Un changement d’adresse e-mail produit, en plus de l’updated_user, un updated_shippingbox par expédition planifiée depuis le premier jour de l’avant-dernier mois (M-2, par exemple le 1er juillet pour un envoi en septembre). Un client dont l’e-mail change et qui a 12 expéditions dans cette fenêtre déclenche 1 updated_user puis 12 updated_shippingbox, chacun avec l’e-mail à jour dans changed. Voir Événements : expéditions.

changed de updated_user
{
"email": "claire.martin-dupont@example.com"
}

Objet envoyé : adresse complète. Délai avant envoi : aucun. Exemple complet : dans le contrat OpenAPI (/openapi/ciklik-webhooks.yaml), webhook created_address.

À chaque création réelle d’adresse : ajout par le client ou par votre équipe (la création par l’API vendors n’est actuellement pas fonctionnelle).

Sur l’import d’adresses par fichier CSV.

Toujours un tableau vide.

Aucun. Une adresse qui vient d’être créée n’est encore liée à aucun abonnement.

created_address
{
"id": 1,
"user_id": 1,
"address": "12 rue des Lilas",
"address1": "Bâtiment B, 3e étage",
"postcode": "69003",
"city": "Lyon",
"phone": "+33612345678",
"first_name": "Claire",
"last_name": "Martin",
"region_id": 1,
"division": null,
"division_name": null,
"deletable": false,
"company_name": null,
"country": {
"id": 1,
"name": "France",
"alphaCode": "FR"
},
"external_id": 4821,
"changed": []
}

Objet envoyé : adresse complète, avec les valeurs à jour. Délai avant envoi : aucun. Exemple complet : dans le contrat OpenAPI (/openapi/ciklik-webhooks.yaml), webhook updated_address (le reste de la charge utile est identique à celle de created_address).

À chaque modification d’un champ de l’adresse : rue, code postal, ville, téléphone, nom du destinataire.

Rien de particulier à signaler ici : toute écriture réelle sur l’adresse déclenche l’événement.

Les champs réellement modifiés par l’appelant, avec leur nouvelle valeur.

updated_address déclenche systématiquement la cascade vers les expéditions et les commandes, quel que soit le champ modifié, y compris sans rapport avec la livraison : le code ne teste pas quel champ a changé, il réagit à tout enregistrement de l’adresse. Pour chaque abonnement lié à cette adresse : un updated_shippingbox par expédition planifiée depuis le premier jour du mois M-2, puis un ou deux updated_checkoutorder par commande en cours de création. Une adresse liée à plusieurs abonnements multiplie la cascade d’autant.

updated_address -> pour chaque abonnement lié
-> updated_shippingbox (une par expédition depuis M-2)
-> updated_checkoutorder (une ou deux par commande en création)
changed de updated_address
{
"address": "27 avenue Jean Jaurès",
"address1": "",
"postcode": "69007"
}

Objet envoyé : inscription marketing complète. Délai avant envoi : 10 secondes. Exemple complet : dans le contrat OpenAPI (/openapi/ciklik-webhooks.yaml), webhook created_optin.

Uniquement à la toute première inscription d’un couple e-mail et boutique : à l’inscription, ou à la création, l’annulation ou la réactivation d’un abonnement quand ce couple n’a encore aucune inscription.

Toute réinscription ultérieure du même couple n’est pas un nouveau created_optin : c’est un updated_optin, puisque l’inscription existe déjà.

Toujours un tableau vide.

Aucun.

created_optin
{
"email": "claire.martin@example.com",
"tenant_id": 1,
"valid": true,
"list_id": "9f2c4e7a1b",
"changed": []
}

Objet envoyé : inscription marketing complète, avec les valeurs à jour. Délai avant envoi : aucun. Exemple complet : dans le contrat OpenAPI (/openapi/ciklik-webhooks.yaml), webhook updated_optin (le reste de la charge utile est identique à celle de created_optin).

Sur quatre faits : une réinscription d’un couple déjà connu, une désinscription volontaire (valid passe à false), un rejet définitif par votre fournisseur d’envoi d’e-mail (« hard bounce » constaté à une tentative d’inscription), et une désinscription en masse faite par votre équipe. Cette dernière produit un updated_optin par inscription du lot, pas un seul événement global.

Rien au-delà de ces quatre cas.

Le plus souvent valid, seul ou avec list_id en cas de changement de liste.

Aucun.

changed de updated_optin
{
"valid": false
}