Référence de l’API

Webhooks

Enregistrer des points de terminaison pour recevoir des notifications d’événements.

get/v1/webhooks

Lister les webhooks enregistrés

Nécessite webhooks:r.

Réponses

  • 200Tous les points de terminaison du compte, du plus récent au plus ancien. Sans pagination.
    ChampTypeDescription
    data[]obligatoireobject[]
    idobligatoirestring
    urlobligatoirestring
    eventsobligatoirestring[]
    activeobligatoireboolean
    deactivated_reasonobligatoirestring

    Raison pour laquelle la livraison a désactivé le point de terminaison, le cas échéant : par exemple "HTTP_401 for 26h across 7 events" après 24 heures d’échecs sur au moins 5 événements, ou SSRF_BLOCKED.

    • Peut être null
    deactivated_atobligatoirestring
    • Format : date-time
    • Peut être null
    failing_sinceobligatoirestring

    La première tentative échouée depuis la dernière livraison réussie ; null tant que le point de terminaison fonctionne normalement. Toute tentative livrée la réinitialise.

    • Format : date-time
    • Peut être null
    failed_eventsobligatoireinteger

    Nombre d’événements distincts en échec depuis failing_since. Le point de terminaison est désactivé lorsque toutes les tentatives échouent depuis 24 heures et que ce nombre atteint 5.

    last_success_atobligatoirestring

    La dernière tentative livrée, à la minute près.

    • Format : date-time
    • Peut être null
    last_failure_atobligatoirestring
    • Format : date-time
    • Peut être null
    last_failure_reasonobligatoirestring

    Le résultat de la dernière tentative échouée : HTTP_<status>, HTTP_<status>_REDIRECT_NOT_FOLLOWED, TIMEOUT ou NETWORK_ERROR.

    • Peut être null
    secret_rotated_atobligatoirestring

    Moment du dernier renouvellement du secret de signature (POST /v1/webhooks/{id}/rotate-secret) ; null tant que le point de terminaison signe encore avec le secret attribué à sa création.

    • Format : date-time
    • Peut être null
    created_atobligatoirestring
    • Format : date-time
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403La clé API ne dispose pas de la permission requise pour cette opération, ou le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { data, error } = await honkio.webhooks.list()
if (error) throw new Error(error.message)
for (const w of data.data) console.log(w.id, w.url)
post/v1/webhooks

Enregistrer un point de terminaison de webhook

Nécessite webhooks:w.

Corps de la requête

ChampTypeDescription
urlobligatoirestring

URL HTTPS à laquelle livrer les événements. Elle doit répondre directement par un code 2xx : les livraisons ne suivent jamais de redirection, donc un 3xx est enregistré comme une tentative échouée.

  • Format : uri
  • Au plus 2048 caractères
eventsobligatoirestring[]
  • Une valeur parmi : message.queued | message.sending | message.sent | message.delivered | message.failed | message.undelivered | message.received | opt_out.recorded | opt_out.reinstated | account.delivery_warning | account.sending_paused | account.spend_warning | account.inbound_email_capped | account.inbound_sms_capped | email.queued | email.sent | email.delivered | email.delivery_delayed | email.bounced | email.complained | email.rejected | email.failed | email.opened | email.clicked | email.unsubscribed | email.cancelled | email.rescheduled | email.received | email_domain.verified | email_domain.verification_failed | email_domain.receiving_verified | email_domain.receiving_failed | phone_number.suspended | phone_number.released

Réponses

  • 201Le point de terminaison. signing_secret n’est affiché qu’ici : conservez-le pour vérifier X-HonkIO-Signature.
    ChampTypeDescription
    idobligatoirestring
    urlobligatoirestring
    eventsobligatoirestring[]
    signing_secretobligatoirestring

    64 caractères hexadécimaux.

    activeobligatoireboolean
    created_atobligatoirestring
    • Format : date-time
    noticeobligatoirestring
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403LIVE_KEY_REQUIRED : les clés de test ne peuvent pas accéder ici aux ressources de production. Aussi FORBIDDEN lorsque la clé ne dispose pas de la permission requise par cette opération, ou lorsque le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 422VALIDATION_ERROR (URL qui n’est pas une URL HTTPS publique, événement inconnu, ou événement courriel alors que le courriel est désactivé) ou WEBHOOK_LIMIT_REACHED (10 points de terminaison par compte).Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { data: webhook, error } = await honkio.webhooks.create({
  url: 'https://yourapp.ca/webhooks/honkio',
  events: ['message.delivered', 'message.failed', 'message.received'],
})
if (error) throw new Error(error.message)
console.log(webhook.signing_secret) // shown once: store it now
get/v1/webhooks/{id}

Obtenir un webhook par identifiant

Nécessite webhooks:r.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Réponses

  • 200Le point de terminaison.
    ChampTypeDescription
    idobligatoirestring
    urlobligatoirestring
    eventsobligatoirestring[]
    activeobligatoireboolean
    deactivated_reasonobligatoirestring

    Raison pour laquelle la livraison a désactivé le point de terminaison, le cas échéant : par exemple "HTTP_401 for 26h across 7 events" après 24 heures d’échecs sur au moins 5 événements, ou SSRF_BLOCKED.

    • Peut être null
    deactivated_atobligatoirestring
    • Format : date-time
    • Peut être null
    failing_sinceobligatoirestring

    La première tentative échouée depuis la dernière livraison réussie ; null tant que le point de terminaison fonctionne normalement. Toute tentative livrée la réinitialise.

    • Format : date-time
    • Peut être null
    failed_eventsobligatoireinteger

    Nombre d’événements distincts en échec depuis failing_since. Le point de terminaison est désactivé lorsque toutes les tentatives échouent depuis 24 heures et que ce nombre atteint 5.

    last_success_atobligatoirestring

    La dernière tentative livrée, à la minute près.

    • Format : date-time
    • Peut être null
    last_failure_atobligatoirestring
    • Format : date-time
    • Peut être null
    last_failure_reasonobligatoirestring

    Le résultat de la dernière tentative échouée : HTTP_<status>, HTTP_<status>_REDIRECT_NOT_FOLLOWED, TIMEOUT ou NETWORK_ERROR.

    • Peut être null
    secret_rotated_atobligatoirestring

    Moment du dernier renouvellement du secret de signature (POST /v1/webhooks/{id}/rotate-secret) ; null tant que le point de terminaison signe encore avec le secret attribué à sa création.

    • Format : date-time
    • Peut être null
    created_atobligatoirestring
    • Format : date-time
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403La clé API ne dispose pas de la permission requise pour cette opération, ou le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404NOT_FOUND : aucune ressource correspondante sur ce compte.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { data, error } = await honkio.webhooks.get('WEBHOOK_ID')
if (error) throw new Error(error.message)
console.log(data.url, data.events)
patch/v1/webhooks/{id}

Mettre à jour un webhook

Nécessite webhooks:m.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Corps de la requête

ChampTypeDescription
urlstring
  • Format : uri
  • Au plus 2048 caractères
eventsstring[]
  • Une valeur parmi : message.queued | message.sending | message.sent | message.delivered | message.failed | message.undelivered | message.received | opt_out.recorded | opt_out.reinstated | account.delivery_warning | account.sending_paused | account.spend_warning | account.inbound_email_capped | account.inbound_sms_capped | email.queued | email.sent | email.delivered | email.delivery_delayed | email.bounced | email.complained | email.rejected | email.failed | email.opened | email.clicked | email.unsubscribed | email.cancelled | email.rescheduled | email.received | email_domain.verified | email_domain.verification_failed | email_domain.receiving_verified | email_domain.receiving_failed | phone_number.suspended | phone_number.released
activeboolean

Réponses

  • 200Le point de terminaison mis à jour.
    ChampTypeDescription
    idobligatoirestring
    urlobligatoirestring
    eventsobligatoirestring[]
    activeobligatoireboolean
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403LIVE_KEY_REQUIRED : les clés de test ne peuvent pas accéder ici aux ressources de production. Aussi FORBIDDEN lorsque la clé ne dispose pas de la permission requise par cette opération, ou lorsque le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404NOT_FOUND : aucune ressource correspondante sur ce compte.Le corps d’erreur standard.
  • 422VALIDATION_ERROR : URL qui n’est pas une URL HTTPS publique, événement inconnu, ou événement courriel alors que le courriel est désactivé.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { error } = await honkio.webhooks.update('WEBHOOK_ID', { events: ['message.delivered', 'message.failed'] })
if (error) throw new Error(error.message)
delete/v1/webhooks/{id}

Supprimer un webhook

Nécessite webhooks:d.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Réponses

  • 204Supprimé, avec son historique de livraison et ses lettres mortes.
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403LIVE_KEY_REQUIRED : les clés de test ne peuvent pas accéder ici aux ressources de production. Aussi FORBIDDEN lorsque la clé ne dispose pas de la permission requise par cette opération, ou lorsque le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404NOT_FOUND : aucune ressource correspondante sur ce compte.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { error } = await honkio.webhooks.remove('WEBHOOK_ID')
if (error) throw new Error(error.message)
get/v1/webhooks/{id}/deliveries

Lister les tentatives de livraison récentes d’un webhook

Nécessite webhooks:r.

Paramètres

ParamètreTypeDescription
limitrequêteinteger
  • Minimum : 1
  • Maximum : 200
  • Par défaut : 50
idobligatoirecheminstring

Réponses

  • 200Tentatives de livraison récentes, de la plus récente à la plus ancienne.
    ChampTypeDescription
    data[]obligatoireobject[]
    idobligatoirestring
    event_idobligatoirestring
    event_typeobligatoirestring
    attemptobligatoireinteger
    successobligatoireboolean
    http_statusobligatoireinteger
    • Peut être null
    error_reasonobligatoirestring
    • Peut être null
    duration_msobligatoireinteger
    • Peut être null
    occurred_atobligatoirestring
    • Format : date-time
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403La clé API ne dispose pas de la permission requise pour cette opération, ou le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404NOT_FOUND : aucune ressource correspondante sur ce compte.Le corps d’erreur standard.
  • 422VALIDATION_ERROR : la requête n’a pas passé la validation ; details indique les champs en cause.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { data, error } = await honkio.webhooks.deliveries('WEBHOOK_ID', { limit: 20 })
if (error) throw new Error(error.message)
console.log(data.data)
get/v1/webhooks/{id}/dead-letters

Lister les événements dont toutes les tentatives de livraison ont échoué (file des lettres mortes)

Nécessite webhooks:r.

Paramètres

ParamètreTypeDescription
limitrequêteinteger
  • Minimum : 1
  • Maximum : 200
  • Par défaut : 50
include_replayedrequêteboolean
  • Par défaut : false
idobligatoirecheminstring

Réponses

  • 200Événements dont toutes les tentatives ont échoué, du plus récent au plus ancien.
    ChampTypeDescription
    data[]obligatoireobject[]
    idobligatoirestring
    event_idobligatoirestring
    event_typeobligatoirestring
    failed_reasonobligatoirestring

    Raison pour laquelle l’événement n’est plus réessayé : l’échec de la dernière tentative, avec le nombre de tentatives, après environ 24 heures de nouvelles tentatives (par exemple "HTTP_500 after 8 attempts"), la même valeur suivie de "; endpoint disabled" lorsque le point de terminaison a été désactivé alors que l’événement lui était dû, ENDPOINT_DISABLED lorsque vous aviez vous-même désactivé le point de terminaison, SSRF_BLOCKED ou queue_full.

    created_atobligatoirestring
    • Format : date-time
    replayed_atobligatoirestring
    • Format : date-time
    • Peut être null
    payloadobligatoireany

    Le corps de l’événement dont la livraison a échoué : { id, type, created, account_id, data }.

  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403LIVE_KEY_REQUIRED : les clés de test ne peuvent pas accéder ici aux ressources de production. Aussi FORBIDDEN lorsque la clé ne dispose pas de la permission requise par cette opération, ou lorsque le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404NOT_FOUND : aucune ressource correspondante sur ce compte.Le corps d’erreur standard.
  • 422VALIDATION_ERROR : la requête n’a pas passé la validation ; details indique les champs en cause.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { data, error } = await honkio.webhooks.deadLetters('WEBHOOK_ID')
if (error) throw new Error(error.message)
for (const dl of data.data) console.log(dl.id)
post/v1/webhooks/dead-letters/{dlid}/replay

Relancer un événement en lettre morte vers l’URL du webhook d’origine

Envoie de nouveau l’événement, signé avec un nouvel horodatage et marqué X-HonkIO-Replay: true. 200 { status: "replayed" } lorsque votre point de terminaison l’a accepté ; 502 { status: "failed", http_status, error_reason } lorsqu’il ne l’a pas accepté (l’événement reste dans la file des lettres mortes et peut être renvoyé de nouveau) ; 404 NOT_FOUND lorsque la lettre morte n’appartient pas à votre compte ; 409 DEAD_LETTER_ALREADY_REPLAYED lorsqu’elle a déjà été renvoyée ou qu’un renvoi est en cours, ou 409 ACCOUNT_SUSPENDED lorsque le compte est suspendu ou fermé, auquel cas rien n’est envoyé.

Nécessite webhooks:m.

Paramètres

ParamètreTypeDescription
dlidobligatoirecheminstring

Réponses

  • 200Votre point de terminaison a accepté la relance.
    ChampTypeDescription
    statusobligatoirestring
    • Une valeur parmi : replayed
    http_statusobligatoireinteger
    • Peut être null
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403LIVE_KEY_REQUIRED : les clés de test ne peuvent pas accéder ici aux ressources de production. Aussi FORBIDDEN lorsque la clé ne dispose pas de la permission requise par cette opération, ou lorsque le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404NOT_FOUND : aucune ressource correspondante sur ce compte.Le corps d’erreur standard.
  • 409DEAD_LETTER_ALREADY_REPLAYED : déjà relancé, ou une relance est en cours. Également ACCOUNT_SUSPENDED lorsque le compte est suspendu ou fermé. Dans les deux cas, rien n’a été envoyé.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.
  • 502WEBHOOK_REPLAY_FAILED : votre point de terminaison n’a pas accepté la relance. L’événement reste dans la file des lettres mortes.
    ChampTypeDescription
    codeobligatoirestring

    Code d’erreur lisible par machine, p. ex. VALIDATION_ERROR.

    messageobligatoirestring

    Message lisible dans la langue de la requête (Accept-Language).

    messageEnstring

    Message en anglais, toujours fourni en plus de message.

    messageFrstring

    Message en français, toujours fourni en plus de message.

    statusCodeobligatoireinteger

    Le statut HTTP, repris dans le corps.

    detailsany

    Présent sur certaines erreurs : un tableau de validation AJV, ou des détails structurés propres à l’erreur.

    statusobligatoirestring
    • Une valeur parmi : failed
    http_statusobligatoireinteger
    • Peut être null
    error_reasonobligatoirestring
    • Peut être null

Exemple

const { error } = await honkio.webhooks.replay('DEAD_LETTER_ID')
if (error) throw new Error(error.message)
delete/v1/webhooks/dead-letters/{dlid}

Abandonner un événement en lettre morte sans le relancer

Nécessite webhooks:d.

Paramètres

ParamètreTypeDescription
dlidobligatoirecheminstring

Réponses

  • 204Abandonné.
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403LIVE_KEY_REQUIRED : les clés de test ne peuvent pas accéder ici aux ressources de production. Aussi FORBIDDEN lorsque la clé ne dispose pas de la permission requise par cette opération, ou lorsque le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404NOT_FOUND : aucune ressource correspondante sur ce compte.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { error } = await honkio.webhooks.discard('DEAD_LETTER_ID')
if (error) throw new Error(error.message)
post/v1/webhooks/{id}/reactivate

Réactiver un webhook désactivé automatiquement à la suite d’échecs de livraison

Réactive la livraison et remet à zéro la série d’échecs du point de terminaison. Les événements qui ont échoué pendant sa désactivation ne sont pas renvoyés : listez-les avec GET /v1/webhooks/{id}/dead-letters et relancez-les un à un.

Nécessite webhooks:m.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Réponses

  • 200Le point de terminaison est de nouveau actif.
    ChampTypeDescription
    idobligatoirestring
    activeobligatoireboolean
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403LIVE_KEY_REQUIRED : les clés de test ne peuvent pas accéder ici aux ressources de production. Aussi FORBIDDEN lorsque la clé ne dispose pas de la permission requise par cette opération, ou lorsque le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404NOT_FOUND : aucune ressource correspondante sur ce compte.Le corps d’erreur standard.
  • 422VALIDATION_ERROR : l’URL ne se résout plus vers un point de terminaison public.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { error } = await honkio.webhooks.reactivate('WEBHOOK_ID')
if (error) throw new Error(error.message)
post/v1/webhooks/{id}/rotate-secret

Renouveler le secret de signature d’un webhook

Génère un nouveau secret de signature et le renvoie une seule fois. L’ancien secret cesse immédiatement de signer. Chaque tentative de livraison, nouvelles tentatives comprises, est signée avec le secret que détient le point de terminaison à ce moment-là : renvoyez donc un code autre que 2xx pour une signature que vous ne pouvez pas vérifier, et la nouvelle tentative arrivera signée avec le nouveau secret.

Nécessite webhooks:m.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Réponses

  • 200Le nouveau secret, affiché uniquement ici. L’ancien secret cesse immédiatement de signer ; les nouvelles tentatives de tout ce que le point de terminaison rejette pendant la transition sont signées de nouveau avec celui-ci.
    ChampTypeDescription
    idobligatoirestring
    signing_secretobligatoirestring

    64 caractères hexadécimaux.

    secret_rotated_atobligatoirestring
    • Format : date-time
    noticeobligatoirestring
  • 401Clé API manquante, invalide, révoquée ou expirée.Le corps d’erreur standard.
  • 402Le compte n’a aucun solde, ou une clé LIVE a été utilisée avant la première recharge.Le corps d’erreur standard.
  • 403LIVE_KEY_REQUIRED : les clés de test ne peuvent pas accéder ici aux ressources de production. Aussi FORBIDDEN lorsque la clé ne dispose pas de la permission requise par cette opération, ou lorsque le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404NOT_FOUND : aucune ressource correspondante sur ce compte.Le corps d’erreur standard.
  • 429Limite de débit atteinte : 100 requêtes par seconde et par compte, ou une limite propre à la route (Retry-After est défini le cas échéant).Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

const { data, error } = await honkio.webhooks.rotateSecret('WEBHOOK_ID')
if (error) throw new Error(error.message)
console.log(data.signing_secret) // the old secret stopped signing: store this one