Les webhooks évitent d’interroger chaque génération. Fanify Hub envoie generation.running au démarrage effectif de l’exécution. Il envoie generation.completed pour tout état final : succès, échec ou annulation.
Une génération annulée ou échouée pendant son attente en file n’émet pas generation.running.
Enregistrer un endpoint
La réponse 201 contient un secret une seule fois. L’URL doit utiliser HTTPS et être accessible publiquement. Un compte peut enregistrer au maximum 5 endpoints actifs.
Vérifier une livraison
Chaque requête contient :
Le corps JSON utilise cette enveloppe :
data contient l’objet génération complet. La propriété id de l’enveloppe est identique au header X-Fanify-Delivery.
Calculez HMAC-SHA256(secret, corps brut) et comparez le résultat en temps constant avec X-Fanify-Signature.
Vérifiez la signature sur les octets bruts avant de parser le JSON. Une re-sérialisation change la signature.
Une livraison réussie peut être répétée et l’ordre n’est pas garanti. Dédupliquez les requêtes avec X-Fanify-Delivery.
Fanify Hub réessaie après une réponse 429, une réponse 5xx, un timeout ou un échec de connexion. Les autres réponses 4xx abandonnent immédiatement la livraison. Une livraison réessayée effectue au maximum 8 tentatives, avec des délais de 30 secondes, 2 minutes, 10 minutes, 1 heure, 6 heures, 24 heures puis 72 heures. Le dernier échec est exposé dans last_error par GET /api/v1/hub/webhooks.
GET /api/v1/hub/webhooks liste les endpoints sans leur secret. DELETE /api/v1/hub/webhooks/{id} révoque un endpoint.