Aller au contenu

Webhooks

Ce qui s'est passé, sans demander.

KRONENWERK appelle votre adresse dès qu'un fait souscrit survient dans les livres. Chaque livraison est signée et réessayée jusqu'à acceptation.

Événement Quand il est envoyé
invoice.issued

Une facture a été émise : le numéro est consommé, le document est archivé et immuable.

invoice.paid

Une facture est intégralement soldée — par un paiement, quelle qu'en soit la voie d'enregistrement.

invoice.cancelled

Une facture a été annulée : un avoir existe qui l'annule intégralement. Rien n'est supprimé.

purchase.recorded

Une facture fournisseur ou une dépense a été enregistrée, avec fournisseur, date et montants.

payment.recorded

Un paiement a été enregistré, avec sens, montant, jour et le document qu'il solde.

bank.transaction.imported

Une opération bancaire a été importée et attend d'être rapprochée.

kronenwerk.test

Une livraison d'essai que vous déclenchez pour tester votre vérification.

La vérification, en entier.

L'ordre compte: d'abord l'horodatage, puis l'empreinte. Une ancienne livraison rejouée a une empreinte parfaite; seul son âge la trahit. Comparez en temps constant, sur les octets bruts.

# KRONENWERK-Signature: t=1775462400,v1=9f86d0…
t, v1 = parse(header)                       # t=<unix seconds>, v1=<hex hmac>
if abs(now() - t) > 300: reject()        # replay window, checked first
expected = hmac_sha256(key=endpoint_secret, msg=f"{t}.{raw_body}").hexdigest()
if not constant_time_equals(expected, v1): reject()
accept()                                    # then dedupe on Idempotency-Key
En-tête KRONENWERK-Signature: t=1775462400,v1=…
Fenêtre de rejeu 5 minutes
Tentatives de livraison 6

Attendez-vous aux doublons.

Chaque livraison porte un en-tête d'idempotence avec l'identifiant de l'événement. Une réponse qui ne nous parvient pas provoque une nouvelle tentative sous le même identifiant: mémorisez-le et un second passage ne change rien.

Relances

Six tentatives, puis cela figure au journal.

Si votre destinataire ne répond pas par un succès, KRONENWERK réessaie : après trente secondes, puis deux fois plus longtemps à chaque fois, jusqu'à six tentatives. La livraison est ensuite considérée comme échouée et figure au journal avec son heure, son statut et un extrait de la réponse, où vous pouvez la renvoyer à la main. Rien n'est relancé indéfiniment.