L'API Coffrify expose deux endpoints distincts pour tester la réception de webhooks sans produire d'activité réelle. `/test` envoie un événement ping (ou un type de catalogue au choix) en une seule ligne, idéal pour vérifier que votre URL est joignable. `/simulate` va plus loin : il vous permet de cibler un event_type précis du catalogue et d'injecter un data personnalisé (par exemple transfer.geo_blocked avec un country_code particulier), afin de valider la logique métier de votre receiver. Dans les deux cas, l'en-tête X-Coffrify-Test-Delivery: true est systématiquement présent, ce qui vous permet de brancher votre receiver sur un chemin de traitement dédié sans risquer de déclencher de vrais flux.
/v1/webhooks/{id}/testEnvoie une livraison de test signée (ping par défaut) vers l'URL du webhook. Utile pour confirmer que l'endpoint est joignable et que la signature est acceptée.POST/v1/webhooks/{id}/simulateEnvoie une livraison simulée avec un event_type précis du catalogue et un payload data personnalisé. Retourne aussi si le webhook est abonné à ce type d'événement.Authentification
Ces deux endpoints requièrent le scope webhooks:manage. Transmettez votre clé API dans l'en-tête Authorization: Bearer <clé>. En environnement de test, utilisez une clé préfixée cof_test_… ; en production, cof_live_…. Les clés sandbox (cof_sandbox_…) sont également acceptées pour les environnements d'intégration continue.
Corps de la requête
Les deux endpoints acceptent un corps JSON optionnel avec les mêmes champs. Pour /test, event_type vaut "ping" par défaut si absent. Pour /simulate, event_type est obligatoire et doit correspondre à une entrée du catalogue (voir Catalogue d'événements).
| Champ | Type | Requis (/simulate) | Requis (/test) | Description |
|---|---|---|---|---|
| event_type | string | Oui | Non (défaut : ping) | Type d'événement du catalogue Coffrify, par exemple transfer.downloaded ou workspace.payment_failed. Valeur spéciale ping acceptée uniquement sur /test. |
| data | object | Non | Non | Payload libre injecté dans le champ data de l'enveloppe. Permet de reproduire des scénarios précis (ex. { "country_code": "CN", "geo_blocked": true }). |
Appels en pratique
Réponse
Les deux endpoints renvoient un objet JSON décrivant la livraison effectuée. /simulate ajoute les champs simulated_payload, subscribed_to_event_type et note absents de /test.
Réponse de `/simulate` (200 OK) :
Réponse de `/test` (200 OK) :
En-têtes envoyés à votre receiver
Chaque livraison de test transmet les en-têtes suivants. Votre receiver peut les inspecter pour valider sa logique de vérification de signature HMAC.
| En-tête | Contenu | Usage |
|---|---|---|
webhook-id | UUID de l'événement | Standard Webhooks : identifiant de déduplication |
webhook-timestamp | Unix timestamp en secondes | Standard Webhooks : horodatage pour la vérification anti-replay |
webhook-signature | v1,<base64> HMAC-SHA256 sur <id>.<ts>.<body> | Standard Webhooks : signature principale (compatible svix) |
X-Coffrify-Signature | t=<ts>,v1=<hex> HMAC-SHA256 sur <ts>.<body> | Signature legacy Coffrify (pour les receivers existants) |
X-Coffrify-Event-Id | Même UUID que webhook-id | Raccourci pratique pour le log de votre receiver |
X-Coffrify-Event-Type | Valeur de event_type | Filtrage rapide sans parser le corps |
X-Coffrify-Test-Delivery | true | Toujours présent sur /test et /simulate : permet de brancher un chemin dédié |
X-Coffrify-Simulated | true | Présent uniquement sur /simulate |
Erreurs
| Code HTTP | Code d'erreur | Quand | Résolution |
|---|---|---|---|
| 400 | validation_error | event_type absent (sur /simulate) | Ajoutez le champ event_type dans le corps JSON. |
| 400 | validation_error | event_type inconnu du catalogue | Utilisez GET /v1/webhooks/events ou GET /v1/webhooks/event-catalog pour lister les types valides. |
| 401 | missing_api_key / invalid_api_key | Clé absente ou malformée | Vérifiez que votre en-tête Authorization: Bearer cof_test_… est correct. |
| 403 | scope_missing | La clé n'a pas le scope webhooks:manage | Regénérez une clé avec le scope webhooks:manage depuis le tableau de bord ou via POST /v1/api-keys. |
| 404 | not_found | L'ID webhook n'existe pas dans le workspace | Vérifiez l'ID avec GET /v1/webhooks et assurez-vous d'utiliser la clé du bon workspace. |
| 429 | rate_limited | Trop de requêtes en peu de temps | Attendez avant de relancer ou réduisez la cadence d'appel. |
| 500 | internal_error | Erreur base de données interne | Réessayez dans quelques secondes. Si le problème persiste, contactez le support. |
Voir aussi
- Créer un webhook
- Catalogue des types d'événements
- Vérifier la signature HMAC d'une livraison
- Rejouer une livraison échouée
- Référence : GET /v1/webhooks/{id}/deliveries