Référence de l’API

Push

Envoyer des notifications push par APNs et FCM avec vos propres identifiants.

get/v1/push/apps

Lister les applications push

Nécessite push:r.

Paramètres

ParamètreTypeDescription
limitrequêtestring

De 1 à 100. Valeur par défaut : 50.

cursorrequêtestring

La valeur next_cursor de la page précédente.

Réponses

  • 200Une page d’applications push, de la plus récente à la plus ancienne.
    ChampTypeDescription
    data[]obligatoireobject[]
    idobligatoirestring

    papp_…

    nameobligatoirestring
    apnsobligatoireobject

    Les identifiants et l’état de la clé APNs. La clé elle-même n’est jamais renvoyée. Null quand l’application n’a pas de clé APNs.

    • Peut être null
    key_idobligatoirestring
    • Peut être null
    team_idobligatoirestring
    • Peut être null
    bundle_idobligatoirestring
    • Peut être null
    sandbox_statusobligatoirestring

    La clé auprès de l’environnement sandbox d’APNs : valid dès qu’un envoi ou une vérification réussit, invalid dès qu’Apple rejette la clé elle-même.

    • Une valeur parmi : unverified | valid | invalid
    production_statusobligatoirestring

    La clé auprès de l’environnement de production d’APNs.

    • Une valeur parmi : unverified | valid | invalid
    sandbox_coveredobligatoireboolean

    Si la clé couvrait l’environnement sandbox au téléversement (vérifiée valide, ou Apple n’a pas pu être interrogé). Pour un environnement non couvert, invalid reflète la portée de la clé, pas une défaillance.

    production_coveredobligatoireboolean

    Si la clé couvrait l’environnement de production au téléversement.

    fcmobligatoireobject

    Le projet et l’état du compte de service FCM. Le compte de service lui-même n’est jamais renvoyé. Null quand l’application n’en a pas.

    • Peut être null
    project_idobligatoirestring
    • Peut être null
    statusobligatoirestring

    Le compte de service auprès de FCM.

    • Une valeur parmi : unverified | valid | invalid
    webobligatoireobject

    Push Web : la paire de clés VAPID de l’application, générée avec l’application ou importée. La clé privée n’est jamais renvoyée. Null pour une application créée avant le push Web qui n’a pas encore de paire.

    • Peut être null
    vapid_public_keyobligatoirestring

    La clé publique VAPID (P-256, non compressée, base64url) : passez-la à pushManager.subscribe() comme applicationServerKey.

    subjectobligatoirestring

    Le contact fourni aux services push des navigateurs (sujet VAPID) : https://honkio.ca par défaut, ou un mailto: du courriel vérifié du compte, ou une adresse mailto: ou une URL https: sur l’un de ses domaines d’envoi vérifiés. Une notification part avec la valeur par défaut tant que celle qui est définie n’est plus admissible (son domaine a été retiré ou n’est plus vérifié).

    importedobligatoireboolean

    true quand vous avez importé la paire, false quand HonkIO l’a générée.

    created_atobligatoirestring

    Le moment où la paire a été générée ou importée.

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

    true : chaque livraison iOS et Android est chiffrée avec la clé propre à l’appareil, et un appareil enregistré sans encryption_public_key est refusé (ENCRYPTION_KEY_MISSING) : rien ne lui est envoyé en clair et rien n’est facturé. Les navigateurs (web) ne sont jamais refusés pour cette raison : le push Web est toujours chiffré pour le navigateur (RFC 8291). false : les appareils qui ont une clé reçoivent des notifications chiffrées, les autres des notifications en clair.

    placeholder_titleobligatoirestring

    Le titre que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • Peut être null
    placeholder_bodyobligatoirestring

    Le corps que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • Peut être null
    created_atobligatoirestring
    • Format : date-time
    has_moreobligatoireboolean
    next_cursorobligatoirestring

    Passez-le comme cursor pour la page suivante. Null sur la dernière page.

    • 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.
  • 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.push.apps.list({ limit: 20 })
if (error) throw new Error(error.message)
for (const app of data.data) console.log(app.id, app.name)
post/v1/push/apps

Créer une application push

Nécessite push:w.

Corps de la requête

Un nom, et une clé APNs, un compte de service FCM ou les deux (l’un ou l’autre peut être ajouté plus tard avec PATCH).

ChampTypeDescription
nameobligatoirestring

Le nom que vous donnez à l’application, jusqu’à 100 caractères, sans lien.

  • Au moins 1 caractères
  • Au plus 100 caractères
apnsobject

La clé APNs .p8 (EC P-256, telle qu’Apple la délivre) avec ses key_id, team_id et bundle_id. Vérifiée auprès des environnements sandbox et de production avant d’être enregistrée ; jamais renvoyée.

key_p8obligatoirestring

Le contenu du fichier .p8, lignes BEGIN et END comprises.

  • Au moins 1 caractères
  • Au plus 8192 caractères
key_idobligatoirestring

Le Key ID de 10 caractères qu’Apple affiche pour la clé.

  • Au moins 1 caractères
  • Au plus 32 caractères
team_idobligatoirestring

Votre Team ID Apple Developer.

  • Au moins 1 caractères
  • Au plus 32 caractères
bundle_idobligatoirestring

L’identifiant de paquet (bundle identifier) de l’application, envoyé comme apns-topic.

  • Au moins 1 caractères
  • Au plus 255 caractères
fcmobject

Le compte de service Firebase qui envoie pour l’application. Vérifié auprès de Google avant d’être enregistré ; jamais renvoyé.

service_account_jsonobligatoirestring

Le fichier de clé JSON du compte de service, sous forme de chaîne.

  • Au moins 1 caractères
  • Au plus 20000 caractères
placeholder_titlestring

Le titre que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

  • Au plus 200 caractères
placeholder_bodystring

Le corps que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

  • Au plus 500 caractères
require_encryptionboolean

true refuse toute livraison iOS ou Android qui ne peut pas être chiffrée : un appareil enregistré sans encryption_public_key est ignoré avec ENCRYPTION_KEY_MISSING, sans rien recevoir en clair et sans être facturé. false (la valeur par défaut) chiffre pour chaque appareil qui a une clé et envoie en clair aux autres. Les navigateurs (web) ne sont jamais refusés pour cette raison : le push Web est toujours chiffré pour le navigateur (RFC 8291) et n’a besoin d’aucune clé d’appareil. Le réglage s’applique aussi aux notifications déjà programmées ou en file d’attente. Une session du tableau de bord qui le désactive doit d’abord obtenir une confirmation.

Réponses

  • 201L’application, avec l’état de chaque identifiant.
    ChampTypeDescription
    idobligatoirestring

    papp_…

    nameobligatoirestring
    apnsobligatoireobject

    Les identifiants et l’état de la clé APNs. La clé elle-même n’est jamais renvoyée. Null quand l’application n’a pas de clé APNs.

    • Peut être null
    key_idobligatoirestring
    • Peut être null
    team_idobligatoirestring
    • Peut être null
    bundle_idobligatoirestring
    • Peut être null
    sandbox_statusobligatoirestring

    La clé auprès de l’environnement sandbox d’APNs : valid dès qu’un envoi ou une vérification réussit, invalid dès qu’Apple rejette la clé elle-même.

    • Une valeur parmi : unverified | valid | invalid
    production_statusobligatoirestring

    La clé auprès de l’environnement de production d’APNs.

    • Une valeur parmi : unverified | valid | invalid
    sandbox_coveredobligatoireboolean

    Si la clé couvrait l’environnement sandbox au téléversement (vérifiée valide, ou Apple n’a pas pu être interrogé). Pour un environnement non couvert, invalid reflète la portée de la clé, pas une défaillance.

    production_coveredobligatoireboolean

    Si la clé couvrait l’environnement de production au téléversement.

    fcmobligatoireobject

    Le projet et l’état du compte de service FCM. Le compte de service lui-même n’est jamais renvoyé. Null quand l’application n’en a pas.

    • Peut être null
    project_idobligatoirestring
    • Peut être null
    statusobligatoirestring

    Le compte de service auprès de FCM.

    • Une valeur parmi : unverified | valid | invalid
    webobligatoireobject

    Push Web : la paire de clés VAPID de l’application, générée avec l’application ou importée. La clé privée n’est jamais renvoyée. Null pour une application créée avant le push Web qui n’a pas encore de paire.

    • Peut être null
    vapid_public_keyobligatoirestring

    La clé publique VAPID (P-256, non compressée, base64url) : passez-la à pushManager.subscribe() comme applicationServerKey.

    subjectobligatoirestring

    Le contact fourni aux services push des navigateurs (sujet VAPID) : https://honkio.ca par défaut, ou un mailto: du courriel vérifié du compte, ou une adresse mailto: ou une URL https: sur l’un de ses domaines d’envoi vérifiés. Une notification part avec la valeur par défaut tant que celle qui est définie n’est plus admissible (son domaine a été retiré ou n’est plus vérifié).

    importedobligatoireboolean

    true quand vous avez importé la paire, false quand HonkIO l’a générée.

    created_atobligatoirestring

    Le moment où la paire a été générée ou importée.

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

    true : chaque livraison iOS et Android est chiffrée avec la clé propre à l’appareil, et un appareil enregistré sans encryption_public_key est refusé (ENCRYPTION_KEY_MISSING) : rien ne lui est envoyé en clair et rien n’est facturé. Les navigateurs (web) ne sont jamais refusés pour cette raison : le push Web est toujours chiffré pour le navigateur (RFC 8291). false : les appareils qui ont une clé reçoivent des notifications chiffrées, les autres des notifications en clair.

    placeholder_titleobligatoirestring

    Le titre que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • Peut être null
    placeholder_bodyobligatoirestring

    Le corps que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • 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.
  • 403LIVE_KEY_REQUIRED : une application push sert au trafic de test comme au trafic réel ; une clé de test peut donc lire les applications et enregistrer des appareils de test, mais ne peut pas créer, modifier ni supprimer d’application. Également FORBIDDEN lorsque la clé n’a pas la permission requise par cette opération, ou que le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 409DPA_PUSH_ACCEPTANCE_REQUIRED : le compte a accepté l’entente sur le traitement des renseignements personnels avant qu’elle couvre les notifications push. Acceptez d’abord la version en vigueur dans le tableau de bord (Paramètres, Entente sur le traitement des renseignements personnels). Un compte qui n’a jamais accepté l’entente n’est pas visé.Le corps d’erreur standard.
  • 422PUSH_CREDENTIAL_INVALID : Apple ou Google a rejeté l’identifiant (details contient provider, environment et reason), ou VALIDATION_ERROR.Le corps d’erreur standard.
  • 429RATE_LIMITED : au plus 20 téléversements et modifications d’identifiants par heure et par compte (création d’une application, ou PATCH comportant apns ou fcm). Retry-After indique quand réessayer.Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.
  • 503PUSH_PROVIDER_UNAVAILABLE : impossible de joindre Apple ou Google pour vérifier l’identifiant ; rien n’a été enregistré. Réessayez sous peu.Le corps d’erreur standard.

Exemple

const { data: pushApp, error } = await honkio.push.apps.create({
  name: 'Acme mobile',
  apns: {
    keyP8: process.env.APNS_KEY_P8 ?? '',
    keyId: 'ABC123DEFG',
    teamId: 'TEAM123456',
    bundleId: 'ca.acme.app',
  },
  fcm: { serviceAccountJson: process.env.FCM_SERVICE_ACCOUNT_JSON ?? '' },
})
if (error) throw new Error(error.message)
console.log(pushApp.id)
get/v1/push/apps/{id}

Obtenir une application push

Nécessite push:r.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Réponses

  • 200L’application.
    ChampTypeDescription
    idobligatoirestring

    papp_…

    nameobligatoirestring
    apnsobligatoireobject

    Les identifiants et l’état de la clé APNs. La clé elle-même n’est jamais renvoyée. Null quand l’application n’a pas de clé APNs.

    • Peut être null
    key_idobligatoirestring
    • Peut être null
    team_idobligatoirestring
    • Peut être null
    bundle_idobligatoirestring
    • Peut être null
    sandbox_statusobligatoirestring

    La clé auprès de l’environnement sandbox d’APNs : valid dès qu’un envoi ou une vérification réussit, invalid dès qu’Apple rejette la clé elle-même.

    • Une valeur parmi : unverified | valid | invalid
    production_statusobligatoirestring

    La clé auprès de l’environnement de production d’APNs.

    • Une valeur parmi : unverified | valid | invalid
    sandbox_coveredobligatoireboolean

    Si la clé couvrait l’environnement sandbox au téléversement (vérifiée valide, ou Apple n’a pas pu être interrogé). Pour un environnement non couvert, invalid reflète la portée de la clé, pas une défaillance.

    production_coveredobligatoireboolean

    Si la clé couvrait l’environnement de production au téléversement.

    fcmobligatoireobject

    Le projet et l’état du compte de service FCM. Le compte de service lui-même n’est jamais renvoyé. Null quand l’application n’en a pas.

    • Peut être null
    project_idobligatoirestring
    • Peut être null
    statusobligatoirestring

    Le compte de service auprès de FCM.

    • Une valeur parmi : unverified | valid | invalid
    webobligatoireobject

    Push Web : la paire de clés VAPID de l’application, générée avec l’application ou importée. La clé privée n’est jamais renvoyée. Null pour une application créée avant le push Web qui n’a pas encore de paire.

    • Peut être null
    vapid_public_keyobligatoirestring

    La clé publique VAPID (P-256, non compressée, base64url) : passez-la à pushManager.subscribe() comme applicationServerKey.

    subjectobligatoirestring

    Le contact fourni aux services push des navigateurs (sujet VAPID) : https://honkio.ca par défaut, ou un mailto: du courriel vérifié du compte, ou une adresse mailto: ou une URL https: sur l’un de ses domaines d’envoi vérifiés. Une notification part avec la valeur par défaut tant que celle qui est définie n’est plus admissible (son domaine a été retiré ou n’est plus vérifié).

    importedobligatoireboolean

    true quand vous avez importé la paire, false quand HonkIO l’a générée.

    created_atobligatoirestring

    Le moment où la paire a été générée ou importée.

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

    true : chaque livraison iOS et Android est chiffrée avec la clé propre à l’appareil, et un appareil enregistré sans encryption_public_key est refusé (ENCRYPTION_KEY_MISSING) : rien ne lui est envoyé en clair et rien n’est facturé. Les navigateurs (web) ne sont jamais refusés pour cette raison : le push Web est toujours chiffré pour le navigateur (RFC 8291). false : les appareils qui ont une clé reçoivent des notifications chiffrées, les autres des notifications en clair.

    placeholder_titleobligatoirestring

    Le titre que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • Peut être null
    placeholder_bodyobligatoirestring

    Le corps que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • 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.
  • 404PUSH_APP_NOT_FOUND : aucune application push avec cet identifiant dans 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: pushApp, error } = await honkio.push.apps.get('APP_ID')
if (error) throw new Error(error.message)
console.log(pushApp.name, pushApp.apns?.sandbox_status, pushApp.fcm?.status)
patch/v1/push/apps/{id}

Mettre à jour une application push

Nécessite push:m.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Corps de la requête

Les champs à modifier. Un bloc apns ou fcm remplace l’identifiant correspondant en entier et est vérifié de nouveau.

ChampTypeDescription
namestring

Le nom que vous donnez à l’application, jusqu’à 100 caractères, sans lien.

  • Au moins 1 caractères
  • Au plus 100 caractères
apnsobject

La clé APNs .p8 (EC P-256, telle qu’Apple la délivre) avec ses key_id, team_id et bundle_id. Vérifiée auprès des environnements sandbox et de production avant d’être enregistrée ; jamais renvoyée.

key_p8obligatoirestring

Le contenu du fichier .p8, lignes BEGIN et END comprises.

  • Au moins 1 caractères
  • Au plus 8192 caractères
key_idobligatoirestring

Le Key ID de 10 caractères qu’Apple affiche pour la clé.

  • Au moins 1 caractères
  • Au plus 32 caractères
team_idobligatoirestring

Votre Team ID Apple Developer.

  • Au moins 1 caractères
  • Au plus 32 caractères
bundle_idobligatoirestring

L’identifiant de paquet (bundle identifier) de l’application, envoyé comme apns-topic.

  • Au moins 1 caractères
  • Au plus 255 caractères
fcmobject

Le compte de service Firebase qui envoie pour l’application. Vérifié auprès de Google avant d’être enregistré ; jamais renvoyé.

service_account_jsonobligatoirestring

Le fichier de clé JSON du compte de service, sous forme de chaîne.

  • Au moins 1 caractères
  • Au plus 20000 caractères
placeholder_titlestring

Le titre que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer. Null l’efface.

  • Au plus 200 caractères
  • Peut être null
placeholder_bodystring

Le corps que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer. Null l’efface.

  • Au plus 500 caractères
  • Peut être null
web_push_subjectstring

Le contact envoyé aux services push des navigateurs avec chaque notification push Web (sujet VAPID) : un mailto: du courriel vérifié du compte, ou une adresse mailto: ou une URL https: sur l’un de vos domaines d’envoi vérifiés (ou un nom sous l’un d’eux) ; toute autre valeur donne 422 VALIDATION_ERROR. Null revient à la valeur par défaut, https://honkio.ca. Si le domaine cesse d’être vérifié, les notifications partent avec la valeur par défaut jusqu’à ce qu’il le soit de nouveau. La paire de clés reste la même, donc aucun navigateur n’a à se réabonner.

  • Au moins 1 caractères
  • Au plus 255 caractères
  • Peut être null
require_encryptionboolean

true refuse toute livraison iOS ou Android qui ne peut pas être chiffrée : un appareil enregistré sans encryption_public_key est ignoré avec ENCRYPTION_KEY_MISSING, sans rien recevoir en clair et sans être facturé. false (la valeur par défaut) chiffre pour chaque appareil qui a une clé et envoie en clair aux autres. Les navigateurs (web) ne sont jamais refusés pour cette raison : le push Web est toujours chiffré pour le navigateur (RFC 8291) et n’a besoin d’aucune clé d’appareil. Le réglage s’applique aussi aux notifications déjà programmées ou en file d’attente. Une session du tableau de bord qui le désactive doit d’abord obtenir une confirmation.

Réponses

  • 200L’application mise à jour.
    ChampTypeDescription
    idobligatoirestring

    papp_…

    nameobligatoirestring
    apnsobligatoireobject

    Les identifiants et l’état de la clé APNs. La clé elle-même n’est jamais renvoyée. Null quand l’application n’a pas de clé APNs.

    • Peut être null
    key_idobligatoirestring
    • Peut être null
    team_idobligatoirestring
    • Peut être null
    bundle_idobligatoirestring
    • Peut être null
    sandbox_statusobligatoirestring

    La clé auprès de l’environnement sandbox d’APNs : valid dès qu’un envoi ou une vérification réussit, invalid dès qu’Apple rejette la clé elle-même.

    • Une valeur parmi : unverified | valid | invalid
    production_statusobligatoirestring

    La clé auprès de l’environnement de production d’APNs.

    • Une valeur parmi : unverified | valid | invalid
    sandbox_coveredobligatoireboolean

    Si la clé couvrait l’environnement sandbox au téléversement (vérifiée valide, ou Apple n’a pas pu être interrogé). Pour un environnement non couvert, invalid reflète la portée de la clé, pas une défaillance.

    production_coveredobligatoireboolean

    Si la clé couvrait l’environnement de production au téléversement.

    fcmobligatoireobject

    Le projet et l’état du compte de service FCM. Le compte de service lui-même n’est jamais renvoyé. Null quand l’application n’en a pas.

    • Peut être null
    project_idobligatoirestring
    • Peut être null
    statusobligatoirestring

    Le compte de service auprès de FCM.

    • Une valeur parmi : unverified | valid | invalid
    webobligatoireobject

    Push Web : la paire de clés VAPID de l’application, générée avec l’application ou importée. La clé privée n’est jamais renvoyée. Null pour une application créée avant le push Web qui n’a pas encore de paire.

    • Peut être null
    vapid_public_keyobligatoirestring

    La clé publique VAPID (P-256, non compressée, base64url) : passez-la à pushManager.subscribe() comme applicationServerKey.

    subjectobligatoirestring

    Le contact fourni aux services push des navigateurs (sujet VAPID) : https://honkio.ca par défaut, ou un mailto: du courriel vérifié du compte, ou une adresse mailto: ou une URL https: sur l’un de ses domaines d’envoi vérifiés. Une notification part avec la valeur par défaut tant que celle qui est définie n’est plus admissible (son domaine a été retiré ou n’est plus vérifié).

    importedobligatoireboolean

    true quand vous avez importé la paire, false quand HonkIO l’a générée.

    created_atobligatoirestring

    Le moment où la paire a été générée ou importée.

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

    true : chaque livraison iOS et Android est chiffrée avec la clé propre à l’appareil, et un appareil enregistré sans encryption_public_key est refusé (ENCRYPTION_KEY_MISSING) : rien ne lui est envoyé en clair et rien n’est facturé. Les navigateurs (web) ne sont jamais refusés pour cette raison : le push Web est toujours chiffré pour le navigateur (RFC 8291). false : les appareils qui ont une clé reçoivent des notifications chiffrées, les autres des notifications en clair.

    placeholder_titleobligatoirestring

    Le titre que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • Peut être null
    placeholder_bodyobligatoirestring

    Le corps que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • 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.
  • 403LIVE_KEY_REQUIRED pour une clé de test ; STEP_UP_REQUIRED lorsqu’une session du tableau de bord désactive require_encryption sans confirmation api_keys:elevate ; FORBIDDEN lorsque la clé n’a pas la permission de modification push, ou que le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404PUSH_APP_NOT_FOUND : aucune application push avec cet identifiant dans ce compte.Le corps d’erreur standard.
  • 422PUSH_CREDENTIAL_INVALID : Apple ou Google a rejeté l’identifiant (details contient provider, environment et reason), ou VALIDATION_ERROR (y compris un web_push_subject qui n’appartient pas au compte : son courriel vérifié, ou une valeur sur l’un de ses domaines d’envoi vérifiés).Le corps d’erreur standard.
  • 429RATE_LIMITED : au plus 20 téléversements et modifications d’identifiants par heure et par compte (création d’une application, ou PATCH comportant apns ou fcm). Retry-After indique quand réessayer.Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.
  • 503PUSH_PROVIDER_UNAVAILABLE : impossible de joindre Apple ou Google pour vérifier l’identifiant ; rien n’a été enregistré. Réessayez sous peu.Le corps d’erreur standard.

Exemple

// requireEncryption: refuse (and never charge) a device that registered no encryption key.
const { error } = await honkio.push.apps.update('APP_ID', { name: 'Acme mobile (prod)', requireEncryption: true })
if (error) throw new Error(error.message)
delete/v1/push/apps/{id}

Supprimer une application push

Nécessite push:d.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Réponses

  • 204Suppression effectuée.
  • 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 : une application push sert au trafic de test comme au trafic réel ; une clé de test peut donc lire les applications et enregistrer des appareils de test, mais ne peut pas créer, modifier ni supprimer d’application. Également FORBIDDEN lorsque la clé n’a pas la permission requise par cette opération, ou que le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404PUSH_APP_NOT_FOUND : aucune application push avec cet identifiant dans 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.push.apps.delete('APP_ID')
if (error) throw new Error(error.message)
post/v1/push/apps/{id}/web/vapid-keys

Générer ou importer la paire de clés push Web

Nécessite push:m.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Corps de la requête

Remplace la paire de clés push Web (VAPID) de l’application : n’envoyez rien pour en générer une nouvelle, ou les deux clés pour importer la vôtre. Une nouvelle clé publique retire chaque navigateur enregistré dans l’application, dans les deux modes (push_device.deactivated, reason VAPID_KEY_REPLACED), jusqu’à ce qu’il se réabonne ; importer la paire déjà en place n’en retire aucun.

ChampTypeDescription
public_keystring

Pour importer : la clé publique P-256, non compressée, en base64url (l’applicationServerKey avec laquelle votre site s’est abonné).

  • Au moins 1 caractères
  • Au plus 200 caractères
private_keystring

Pour importer : la clé privée correspondante de 32 octets, en base64url. Chiffrée au repos et jamais renvoyée.

  • Au moins 1 caractères
  • Au plus 100 caractères
subjectstring

Le sujet VAPID, comme web_push_subject avec PATCH : un mailto: du courriel vérifié du compte, ou une adresse mailto: ou une URL https: sur l’un de vos domaines d’envoi vérifiés. Omis, le sujet actuel est conservé ; null revient à la valeur par défaut.

  • Au moins 1 caractères
  • Au plus 255 caractères
  • Peut être null

Réponses

  • 200L’application, avec sa nouvelle clé publique push Web (web.vapid_public_key). La clé privée n’est jamais renvoyée. Si la clé publique a changé, chaque navigateur enregistré dans l’application (dans les deux modes) a été retiré avec VAPID_KEY_REPLACED, et un seul webhook push_app.vapid_key_replaced indique combien dans chaque mode (aucun push_device.deactivated par navigateur).
    ChampTypeDescription
    idobligatoirestring

    papp_…

    nameobligatoirestring
    apnsobligatoireobject

    Les identifiants et l’état de la clé APNs. La clé elle-même n’est jamais renvoyée. Null quand l’application n’a pas de clé APNs.

    • Peut être null
    key_idobligatoirestring
    • Peut être null
    team_idobligatoirestring
    • Peut être null
    bundle_idobligatoirestring
    • Peut être null
    sandbox_statusobligatoirestring

    La clé auprès de l’environnement sandbox d’APNs : valid dès qu’un envoi ou une vérification réussit, invalid dès qu’Apple rejette la clé elle-même.

    • Une valeur parmi : unverified | valid | invalid
    production_statusobligatoirestring

    La clé auprès de l’environnement de production d’APNs.

    • Une valeur parmi : unverified | valid | invalid
    sandbox_coveredobligatoireboolean

    Si la clé couvrait l’environnement sandbox au téléversement (vérifiée valide, ou Apple n’a pas pu être interrogé). Pour un environnement non couvert, invalid reflète la portée de la clé, pas une défaillance.

    production_coveredobligatoireboolean

    Si la clé couvrait l’environnement de production au téléversement.

    fcmobligatoireobject

    Le projet et l’état du compte de service FCM. Le compte de service lui-même n’est jamais renvoyé. Null quand l’application n’en a pas.

    • Peut être null
    project_idobligatoirestring
    • Peut être null
    statusobligatoirestring

    Le compte de service auprès de FCM.

    • Une valeur parmi : unverified | valid | invalid
    webobligatoireobject

    Push Web : la paire de clés VAPID de l’application, générée avec l’application ou importée. La clé privée n’est jamais renvoyée. Null pour une application créée avant le push Web qui n’a pas encore de paire.

    • Peut être null
    vapid_public_keyobligatoirestring

    La clé publique VAPID (P-256, non compressée, base64url) : passez-la à pushManager.subscribe() comme applicationServerKey.

    subjectobligatoirestring

    Le contact fourni aux services push des navigateurs (sujet VAPID) : https://honkio.ca par défaut, ou un mailto: du courriel vérifié du compte, ou une adresse mailto: ou une URL https: sur l’un de ses domaines d’envoi vérifiés. Une notification part avec la valeur par défaut tant que celle qui est définie n’est plus admissible (son domaine a été retiré ou n’est plus vérifié).

    importedobligatoireboolean

    true quand vous avez importé la paire, false quand HonkIO l’a générée.

    created_atobligatoirestring

    Le moment où la paire a été générée ou importée.

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

    true : chaque livraison iOS et Android est chiffrée avec la clé propre à l’appareil, et un appareil enregistré sans encryption_public_key est refusé (ENCRYPTION_KEY_MISSING) : rien ne lui est envoyé en clair et rien n’est facturé. Les navigateurs (web) ne sont jamais refusés pour cette raison : le push Web est toujours chiffré pour le navigateur (RFC 8291). false : les appareils qui ont une clé reçoivent des notifications chiffrées, les autres des notifications en clair.

    placeholder_titleobligatoirestring

    Le titre que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • Peut être null
    placeholder_bodyobligatoirestring

    Le corps que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.

    • 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.
  • 403LIVE_KEY_REQUIRED pour une clé de test ; STEP_UP_REQUIRED pour une session du tableau de bord sans confirmation api_keys:elevate ; FORBIDDEN lorsque la clé n’a pas la permission de modification push, ou que le compte est suspendu ou fermé.Le corps d’erreur standard.
  • 404PUSH_APP_NOT_FOUND : aucune application push avec cet identifiant dans ce compte.Le corps d’erreur standard.
  • 422VALIDATION_ERROR : une seule des deux clés, une clé qui n’est pas sur P-256, une clé privée qui ne correspond pas à la clé publique, ou un sujet qui n’est pas une URL https: ou une adresse mailto:, ou qui n’appartient pas au compte (son courriel vérifié, ou une valeur sur l’un de ses domaines d’envoi vérifiés).Le corps d’erreur standard.
  • 429RATE_LIMITED : au plus 20 téléversements et modifications d’identifiants par heure et par compte (création d’une application, ou PATCH comportant apns ou fcm). Retry-After indique quand réessayer.Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.

Exemple

// No keys: generate a new pair. Both keys: import yours.
const { data: pushApp, error } = await honkio.push.web.setVapidKeys('APP_ID')
if (error) throw new Error(error.message)
console.log(pushApp.web?.vapid_public_key)
get/v1/push/devices

Lister les appareils enregistrés

Nécessite push:r.

Paramètres

ParamètreTypeDescription
app_idrequêtestring
user_idrequêtestring
activerequêtestring

true ou false.

limitrequêtestring

De 1 à 100. Valeur par défaut : 50.

cursorrequêtestring

La valeur next_cursor de la page précédente.

Réponses

  • 200Une page d’appareils dans le mode de la clé appelante, du plus récent au plus ancien.
    ChampTypeDescription
    data[]obligatoireobject[]
    idobligatoirestring

    pdev_…

    app_idobligatoirestring
    user_idobligatoirestring

    Votre propre identifiant pour la personne.

    platformobligatoirestring

    web désigne l’abonnement push d’un navigateur.

    • Une valeur parmi : ios | android | web
    apns_environmentobligatoirestring

    L’environnement APNs d’un appareil iOS ; null pour Android et web.

    • Une valeur parmi : sandbox | production
    • Peut être null
    encryption_key_idobligatoirestring

    L’identifiant de la clé de chiffrement que l’appareil a enregistrée (les 16 premiers caractères de base64url(SHA-256(clé publique))), envoyé comme kid dans chaque notification chiffrée pour lui. Null quand il n’en a enregistré aucune, et toujours null pour web. La clé elle-même n’est jamais renvoyée.

    • Peut être null
    activeobligatoireboolean

    false une fois l’appareil retiré ; rien n’est jamais envoyé à un appareil retiré.

    deactivated_reasonobligatoirestring

    La raison du retrait : UNREGISTERED ou INVALID_TOKEN (Apple ou Google ; INVALID_TOKEN aussi pour un abonnement de navigateur que son service push ne connaît plus, ou que HonkIO ne peut plus lire), APP_MISMATCH (un jeton d’une autre application, sur un identifiant qui a déjà fonctionné), DEVICE_LIMIT (la limite par utilisateur), APP_DELETED (son application a été supprimée), VAPID_KEY_REPLACED (un navigateur, quand la paire de clés push Web de l’application a été remplacée), VAPID_KEY_MISMATCH (un navigateur dont le service push a refusé la clé de l’application cinq fois de suite sur au moins une journée), DUPLICATE (une deuxième ligne pour le même abonnement de navigateur, laissée par une rotation de clé de chiffrement ; l’autre ligne reste active), DELETED (vous l’avez désinscrit) ou RECIPIENT_DELETED (vous avez supprimé le profil de destinataire de son user_id). Null tant qu’il est actif.

    • Peut être null
    last_seen_atobligatoirestring

    Le moment où le jeton a été enregistré pour la dernière fois.

    • Format : date-time
    created_atobligatoirestring
    • Format : date-time
    has_moreobligatoireboolean
    next_cursorobligatoirestring

    Passez-le comme cursor pour la page suivante. Null sur la dernière page.

    • 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.
  • 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.push.devices.list({ userId: 'user_1042' })
if (error) throw new Error(error.message)
for (const device of data.data) console.log(device.id, device.platform, device.active)
put/v1/push/devices

Enregistrer un jeton d’appareil

Nécessite push_devices:w.

Corps de la requête

Un jeton d’appareil, ou l’abonnement push d’un navigateur, pour l’un de vos utilisateurs. Enregistrer un jeton ou un abonnement déjà connu le rafraîchit, et le déplace vers user_id si celui-ci a changé.

ChampTypeDescription
app_idobligatoirestring

L’application push à laquelle appartient l’appareil.

  • Au moins 1 caractères
  • Au plus 100 caractères
tokenstring

Le jeton d’appareil APNs ou FCM, tel que la plateforme le remet à votre application. Obligatoire pour iOS et Android ; non envoyé pour web.

  • Au moins 1 caractères
  • Au plus 512 caractères
platformobligatoirestring

ios, android ou web.

  • Une valeur parmi : ios | android | web
user_idobligatoirestring

Votre propre identifiant pour la personne, jusqu’à 255 caractères. Un envoi à ce user_id atteint chacun de ses appareils et navigateurs actifs.

  • Au moins 1 caractères
  • Au plus 255 caractères
apns_environmentstring

sandbox ou production, obligatoire pour iOS : l’environnement APNs avec lequel la version s’est enregistrée (les versions de débogage utilisent sandbox).

  • Une valeur parmi : sandbox | production
subscriptionobject

Web seulement, et obligatoire dans ce cas : le PushSubscription du navigateur tel que le donne son toJSON(). Le point de terminaison doit être un service push de navigateur (Google, Mozilla, Apple ou Microsoft) en HTTPS.

endpointobligatoirestring

L’URL du service push remise au navigateur.

  • Au moins 1 caractères
  • Au plus 2048 caractères
expirationTimenumber

Tel que le navigateur le donne ; non stocké.

  • Peut être null
keysobligatoireobject

Les clés du navigateur pour lesquelles le contenu est chiffré (RFC 8291).

p256dhobligatoirestring

La clé publique P-256 du navigateur, en base64url.

  • Au moins 1 caractères
  • Au plus 200 caractères
authobligatoirestring

Le secret d’authentification de 16 octets, en base64url.

  • Au moins 1 caractères
  • Au plus 100 caractères
encryption_public_keystring

iOS et Android seulement (refusé pour web : le push Web est déjà chiffré pour le navigateur, RFC 8291, et n’a besoin d’aucune clé d’appareil). La clé publique que le paquet push HonkIO a générée sur l’appareil : le base64url (sans remplissage) du point P-256 non compressé de 65 octets. Les notifications vers cet appareil sont alors chiffrées avec cette clé, de sorte qu’Apple et Google n’en voient jamais le contenu. Les appareils sont reconnus par leur jeton : enregistrer de nouveau le même jeton sans ce champ conserve la clé stockée, mais un nouveau jeton (un rafraîchissement de jeton APNs ou FCM) est un nouvel appareil sans clé ; envoyez donc la clé avec chaque jeton (les paquets la fournissent avec le jeton). Une nouvelle clé remplace l’ancienne. null la retire : dans une application avec require_encryption, l’appareil ne reçoit alors plus de notifications jusqu’à ce qu’il enregistre de nouveau une clé ; sans require_encryption, ses notifications partent en clair, et c’est pourquoi require_encryption protège contre le retrait d’une clé.

  • Au plus 100 caractères
  • Peut être null

Réponses

  • 200L’appareil, enregistré ou rafraîchi.
    ChampTypeDescription
    idobligatoirestring

    pdev_…

    app_idobligatoirestring
    user_idobligatoirestring

    Votre propre identifiant pour la personne.

    platformobligatoirestring

    web désigne l’abonnement push d’un navigateur.

    • Une valeur parmi : ios | android | web
    apns_environmentobligatoirestring

    L’environnement APNs d’un appareil iOS ; null pour Android et web.

    • Une valeur parmi : sandbox | production
    • Peut être null
    encryption_key_idobligatoirestring

    L’identifiant de la clé de chiffrement que l’appareil a enregistrée (les 16 premiers caractères de base64url(SHA-256(clé publique))), envoyé comme kid dans chaque notification chiffrée pour lui. Null quand il n’en a enregistré aucune, et toujours null pour web. La clé elle-même n’est jamais renvoyée.

    • Peut être null
    activeobligatoireboolean

    false une fois l’appareil retiré ; rien n’est jamais envoyé à un appareil retiré.

    deactivated_reasonobligatoirestring

    La raison du retrait : UNREGISTERED ou INVALID_TOKEN (Apple ou Google ; INVALID_TOKEN aussi pour un abonnement de navigateur que son service push ne connaît plus, ou que HonkIO ne peut plus lire), APP_MISMATCH (un jeton d’une autre application, sur un identifiant qui a déjà fonctionné), DEVICE_LIMIT (la limite par utilisateur), APP_DELETED (son application a été supprimée), VAPID_KEY_REPLACED (un navigateur, quand la paire de clés push Web de l’application a été remplacée), VAPID_KEY_MISMATCH (un navigateur dont le service push a refusé la clé de l’application cinq fois de suite sur au moins une journée), DUPLICATE (une deuxième ligne pour le même abonnement de navigateur, laissée par une rotation de clé de chiffrement ; l’autre ligne reste active), DELETED (vous l’avez désinscrit) ou RECIPIENT_DELETED (vous avez supprimé le profil de destinataire de son user_id). Null tant qu’il est actif.

    • Peut être null
    last_seen_atobligatoirestring

    Le moment où le jeton a été enregistré pour la dernière fois.

    • Format : date-time
    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.
  • 404PUSH_APP_NOT_FOUND : aucune application push avec cet identifiant dans ce compte.Le corps d’erreur standard.
  • 409PUSH_DEVICE_LIMIT : l’application a déjà son maximum d’appareils actifs dans ce mode (1 000 000 en production, 1 000 en test).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: device, error } = await honkio.push.devices.register({
  appId: 'APP_ID',
  token: 'DEVICE_TOKEN',
  platform: 'ios',
  userId: 'user_1042',
  apnsEnvironment: 'production',
  encryptionPublicKey: 'DEVICE_PUBLIC_KEY', // the key the HonkIO push package made on the device
})
if (error) throw new Error(error.message)
console.log(device.id, device.active, device.encryption_key_id)
delete/v1/push/devices/{id}

Désinscrire un appareil

Nécessite push_devices:d.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Réponses

  • 204Désinscrit.
  • 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.
  • 404PUSH_DEVICE_NOT_FOUND : aucun appareil avec cet identifiant dans le mode de cette clé.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.push.devices.delete('DEVICE_ID')
if (error) throw new Error(error.message)
get/v1/push

Lister les notifications push

Les plus récentes d’abord. Chaque notification push comporte accepted_count, le nombre d’appareils pour lesquels Apple ou Google l’a acceptée (les résultats par appareil sont dans GET /v1/push/{id}).

Nécessite push:r.

Paramètres

ParamètreTypeDescription
app_idrequêtestring
user_idrequêtestring
statusrequêtestring

L’une des valeurs queued, sending, sent, failed, fell_back.

created_afterrequêtestring

Date et heure ISO 8601 avec décalage horaire : création à ce moment ou après.

created_beforerequêtestring

Date et heure ISO 8601 avec décalage horaire : création à ce moment ou avant.

limitrequêtestring

De 1 à 100. Valeur par défaut : 50.

cursorrequêtestring

La valeur next_cursor de la page précédente.

Réponses

  • 200Une page de notifications push dans le mode de la clé appelante, les plus récentes d’abord, chacune avec accepted_count.
    ChampTypeDescription
    data[]obligatoireobject[]
    idobligatoirestring
    app_idobligatoirestring
    statusobligatoirestring

    scheduled : acceptée avec scheduled_at et en attente de ce moment. cancelled : une notification programmée annulée avant son départ ; ce qu’elle avait réservé a été rendu.

    • Une valeur parmi : scheduled | queued | sending | sent | failed | fell_back | cancelled
    toobligatoireobject
    user_idobligatoirestring
    • Peut être null
    device_idobligatoirestring
    • Peut être null
    titleobligatoirestring
    • Peut être null
    bodyobligatoirestring
    • Peut être null
    dataobligatoireobject

    Vaut null une fois purgé.

    • Peut être null
    badgeobligatoireinteger
    • Peut être null
    soundobligatoirestring
    • Peut être null
    thread_idobligatoirestring
    • Peut être null
    ttlobligatoireinteger

    Secondes.

    • Peut être null
    priorityobligatoirestring
    • Une valeur parmi : high | normal
    • Peut être null
    collapse_keyobligatoirestring
    • Peut être null
    encryptedobligatoireboolean

    Le require_encryption de l’application au moment de l’envoi : true signifie que chaque livraison a été chiffrée ou refusée avec ENCRYPTION_KEY_MISSING. Le champ encrypted de chaque livraison indique ce qu’elle a reçu (false pour un navigateur : le push Web est chiffré pour lui selon la RFC 8291, et non avec une clé d’appareil).

    device_countobligatoireinteger

    Les appareils auxquels la notification a été envoyée (et facturée) à la prise en charge ; les appareils refusés faute de clé de chiffrement ne sont pas comptés.

    accepted_countinteger

    Les appareils et navigateurs dont le service push (Apple, Google, Mozilla ou Microsoft) a accepté la notification. Dans GET /v1/push et GET /v1/push/{id} ; pas dans la réponse à l’envoi.

    free_countobligatoireinteger

    Les livraisons couvertes par l’allocation gratuite mensuelle, déduction faite des remboursements.

    charge_millicentsobligatoireinteger

    Le coût exact de la notification, en millicents CAD, déduction faite des remboursements.

    cost_centsobligatoireinteger

    Les cents entiers que cette notification a débités du solde.

    fallbackobligatoireobject
    • Peut être null
    smsobligatoireobject
    toobligatoirestring
    • Peut être null
    fromobligatoirestring
    • Peut être null
    bodyobligatoirestring
    • Peut être null
    fallback_message_idobligatoirestring
    • Peut être null
    fallback_reasonobligatoirestring
    • Peut être null
    failure_codeobligatoirestring
    • Peut être null
    failure_messageobligatoirestring
    • Peut être null
    body_purged_atobligatoirestring
    • Format : date-time
    • Peut être null
    livemodeobligatoireboolean
    sent_atobligatoirestring
    • Format : date-time
    • Peut être null
    scheduled_atobligatoirestring

    Le moment où une notification programmée doit partir (ou devait partir). Null pour une notification envoyée immédiatement.

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

    L’expires_at donné à une notification programmée : l’heure limite de son départ. Null quand aucun n’a été donné, ce qui veut dire scheduled_at plus 24 heures. Une notification qui ne peut pas partir d’ici là échoue avec le failure_code SCHEDULED_SEND_EXPIRED et est remboursée.

    • Format : date-time
    • Peut être null
    created_atobligatoirestring
    • Format : date-time
    updated_atobligatoirestring
    • Format : date-time
    deliveries[]object[]

    Le résultat de livraison de chaque appareil. Dans GET /v1/push/{id} seulement.

    idobligatoirestring
    device_idobligatoirestring

    Null une fois l’appareil supprimé (30 jours après sa désactivation) ; le résultat de livraison est conservé.

    • Peut être null
    providerobligatoirestring

    webpush : le service push d’un navigateur.

    • Une valeur parmi : apns | fcm | webpush
    provider_message_idobligatoirestring
    • Peut être null
    statusobligatoirestring
    • Une valeur parmi : pending | accepted | rejected | retrying
    billedobligatoireboolean
    encryptedobligatoireboolean

    Si elle a été envoyée chiffrée avec la clé propre à l’appareil.

    error_codeobligatoirestring

    La raison du rejet, p. ex. DEVICE_TOKEN_INVALID, APP_MISMATCH, CREDENTIAL_INVALID, NO_CREDENTIAL, ENCRYPTION_KEY_MISSING (l’application exige le chiffrement et l’appareil n’a enregistré aucune clé : rien n’est envoyé ni facturé), PAYLOAD_REJECTED ou PROVIDER_ERROR.

    • Peut être null
    attemptsobligatoireinteger
    created_atobligatoirestring
    • Format : date-time
    updated_atobligatoirestring
    • Format : date-time
    has_moreobligatoireboolean
    next_cursorobligatoirestring

    Passez-le comme cursor pour la page suivante. Null sur la dernière page.

    • 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.
  • 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.
  • 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.push.list({ status: 'failed', limit: 20 })
if (error) throw new Error(error.message)
for (const push of data.data) console.log(push.id, push.status)
post/v1/push

Envoyer une notification push

Envoie à chaque appareil actif de to.user_id, ou à un seul to.device_id. Répond 202 avec la notification en file d’attente et le nombre d’appareils ciblés. Chaque livraison réelle acceptée coûte 5,00 $ par 1 000 au-delà des 2 500 premières de chaque mois civil (heure de l’Est), qui sont gratuites ; les livraisons rejetées sont remboursées. Avec fallback.sms, une notification qu’aucun appareil n’accepte est envoyée par SMS à la place, selon toutes les règles qu’applique POST /v1/messages ; la clé a besoin de messages:w pour cela (403 FORBIDDEN sinon), et en a encore besoin au moment où le repli se déclenche. data fait au plus 4096 octets une fois sérialisé et 64 clés. collapse_key (de 1 à 64 caractères ASCII visibles) permet à une notification plus récente de remplacer une plus ancienne qui a la même clé. 403 PUSH_DISABLED quand le push est désactivé pour le compte ; 422 PUSH_PAYLOAD_TOO_LARGE quand le contenu final envoyé au fournisseur, après chiffrement, dépasse 4096 octets ; 429 PUSH_DAILY_CAP au-delà de la limite quotidienne de notifications push. La même Idempotency-Key renvoie la notification d’origine ; avec un corps différent, c’est 409 IDEMPOTENCY_KEY_REUSED. Une clé qui commence par notify: est réservée à HonkIO : 422 IDEMPOTENCY_KEY_RESERVED. Avec scheduled_at (de 1 minute à 30 jours à l’avance), la notification est acceptée avec l’état scheduled, facturée maintenant pour les appareils ciblés maintenant, et compte dans la limite quotidienne du jour où elle doit partir. À ce moment, elle est envoyée comme toute autre notification : un compte suspendu depuis, ou dont le push a été désactivé depuis, la fait échouer et la rembourse, un appareil désactivé depuis donne une livraison rejetée (remboursée), et le SMS de repli applique chaque règle de /v1/messages à ce moment. D’ici là, PATCH /v1/push/{id} la déplace et DELETE /v1/push/{id} l’annule et rembourse les frais. Au lieu de title et body, template (l’identifiant ou l’alias d’un modèle), variables et language (en ou fr) envoient la partie push de ce modèle, rendue : la version publiée pour une clé de production, le brouillon pour une clé de test. Une langue sans partie push utilise celle de la langue par défaut ; un modèle sans partie push donne 422 TEMPLATE_CHANNEL_MISSING. fallback.sms.body reste du texte en ligne : le repli à partir d’un modèle passe par Notify.

Nécessite push:w.

Paramètres

ParamètreTypeDescription
Idempotency-Keyen-têtestring
  • Au plus 255 caractères

Corps de la requête

Une notification push : une application, une cible, et un titre, un corps, des données ou un modèle.

ChampTypeDescription
app_idobligatoirestring

L’application push avec laquelle envoyer.

  • Au moins 1 caractères
  • Au plus 100 caractères
toobligatoireobject

Exactement l’un de user_id (chaque appareil actif de cet utilisateur) ou device_id (un seul appareil).

user_idstring

Votre propre identifiant pour la personne.

  • Au moins 1 caractères
  • Au plus 255 caractères
device_idstring

Un appareil enregistré (pdev_…).

  • Au moins 1 caractères
  • Au plus 100 caractères
titlestring

Le titre de la notification, jusqu’à 1 000 caractères. Pas avec un modèle.

  • Au moins 1 caractères
  • Au plus 1000 caractères
bodystring

Le texte de la notification, jusqu’à 4 000 caractères. Obligatoire sauf si vous envoyez data ou un modèle ; pas avec un modèle.

  • Au moins 1 caractères
  • Au plus 4000 caractères
templatestring

L’identifiant ou l’alias d’un modèle (/v1/templates) : sa partie push est rendue et envoyée à la place de title et body, avec les mêmes limites. Une clé de production envoie la version publiée, une clé de test le brouillon. 422 TEMPLATE_CHANNEL_MISSING quand il n’a pas de partie push.

  • Au moins 1 caractères
  • Au plus 200 caractères
variablesobject

Les valeurs des variables du modèle. Une variable sans valeur ni valeur de repli fait refuser l’envoi (422 EMAIL_TEMPLATE_VARIABLE_MISSING, details.keys). Seulement avec template.

languagestring

en ou fr : la version linguistique du modèle. Quand elle n’a pas de partie push, celle de la langue par défaut est envoyée. Seulement avec template ; omis, la langue par défaut.

  • Une valeur parmi : en | fr
dataobject

Des valeurs de chaîne pour votre application, au plus 64 clés et 4096 octets en JSON. Sans title ni body, la notification est une notification silencieuse en arrière-plan, sans badge ni son, pour chaque appareil qui la reçoit non chiffrée ; un appareil qui a une clé de chiffrement reçoit plutôt l’alerte de remplacement.

badgeinteger

Le nombre à afficher sur le badge iOS, 0 pour l’effacer.

  • Minimum : 0
  • Maximum : 99999
soundstring

Le son à jouer : un fichier son intégré à l’application, ou default.

  • Au moins 1 caractères
  • Au plus 255 caractères
thread_idstring

Regroupe les notifications sur iOS (thread-id) et Android (tag).

  • Au moins 1 caractères
  • Au plus 255 caractères
ttlinteger

Le nombre de secondes pendant lesquelles Apple ou Google tente la livraison tant que l’appareil est hors ligne, jusqu’à 28 jours. 0 signifie maintenant ou jamais.

  • Minimum : 0
  • Maximum : 2419200
prioritystring

high (la valeur par défaut) ou normal. normal permet à l’appareil d’économiser l’énergie et peut retarder la livraison.

  • Une valeur parmi : high | normal
collapse_keystring

De 1 à 64 caractères ASCII visibles, sans espace : une notification plus récente avec la même clé remplace une plus ancienne qui n’a pas encore été affichée.

fallbackobject

Un SMS à envoyer à la place quand aucun appareil n’accepte la notification. La clé a besoin de messages:w.

smsobligatoireobject
toobligatoirestring

Le numéro mobile auquel envoyer le SMS, au format E.164.

  • Au moins 1 caractères
  • Au plus 32 caractères
fromobligatoirestring

L’un de vos numéros, au format E.164.

  • Au moins 1 caractères
  • Au plus 32 caractères
bodyobligatoirestring

Le texte, jusqu’à 1 600 caractères.

  • Au moins 1 caractères
  • Au plus 1600 caractères
scheduled_atstring

Envoi différé : une date et heure ISO 8601 avec décalage horaire, de 1 minute à 30 jours à l’avance.

  • Format : date-time
  • Par défaut : null
  • Peut être null
expires_atstring

L’heure limite de départ de l’envoi programmé : de 1 minute à 24 heures après scheduled_at, et seulement avec lui. Sans elle, scheduled_at plus 24 heures. Un envoi qui ne peut pas partir d’ici là échoue avec SCHEDULED_SEND_EXPIRED et est remboursé.

  • Format : date-time
  • Par défaut : null
  • Peut être null

Réponses

  • 202Réponse par défaut
    ChampTypeDescription
    idstring
    statusstring

    scheduled, queued, sending, sent, failed, fell_back ou cancelled. scheduled : acceptée avec scheduled_at et en attente de ce moment ; cancelled : une notification programmée annulée avant son départ, ses frais remboursés.

    scheduled_atstring

    Le moment où une notification programmée doit partir (ou devait partir). Null pour une notification envoyée immédiatement.

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

    L’expires_at donné à une notification programmée : l’heure limite de son départ. Null quand aucun n’a été donné, ce qui veut dire scheduled_at plus 24 heures.

    • Format : date-time
    • Peut être null
    livemodeboolean
    device_countinteger

    Les appareils ciblés à la prise en charge.

    collapse_keystring

    Envoyé comme apns-collapse-id d’APNs et android.collapse_key de FCM : une notification plus récente avec la même clé remplace une plus ancienne qui n’a pas encore été affichée. Null quand aucune n’a été donnée.

    • Peut être null
    free_countinteger

    Les livraisons couvertes par l’allocation gratuite mensuelle, déduction faite des remboursements.

    charge_millicentsinteger

    Le coût exact de la notification, en millicents CAD (1/1000 de cent) : les livraisons acceptées facturées multipliées par le prix, déduction faite des remboursements des livraisons rejetées.

    cost_centsinteger

    Les cents entiers que cette notification a débités du solde, souvent 0 parce que le crédit prépayé est utilisé en premier. Approximatif une fois les livraisons rejetées remboursées (le remboursement rend des millicents à une réserve partagée avec le courriel) ; charge_millicents est le chiffre exact.

  • 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.
  • 4XXRéponse par défaut
  • 5XXRéponse par défaut

Exemple

const { data: push, error } = await honkio.push.send({
  appId: 'APP_ID',
  to: { userId: 'user_1042' },
  title: 'Your code',
  body: '123456',
}, { idempotencyKey: 'login-code-1042-2026-11-03' })
if (error) throw new Error(error.message)
console.log(push.id, push.status, push.device_count)
get/v1/push/usage

Notifications push gratuites utilisées ce mois-ci

Nécessite push:r.

Réponses

  • 200L’allocation gratuite du mois et son utilisation.
    ChampTypeDescription
    monthobligatoirestring

    Le mois civil, heure de l’Est : YYYY-MM.

    free_monthlyobligatoireinteger

    Livraisons réelles gratuites chaque mois.

    free_usedobligatoireinteger

    Livraisons réelles gratuites utilisées ce mois-ci. Toujours 0 pour une clé de test : les envois de test sont gratuits et ne comptent jamais.

  • 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.push.usage()
if (error) throw new Error(error.message)
console.log(data)
get/v1/push/{id}

Obtenir une notification push par identifiant

Nécessite push:r.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Réponses

  • 200Réponse par défaut
    ChampTypeDescription
    idstring
    statusstring

    scheduled, queued, sending, sent, failed, fell_back ou cancelled. scheduled : acceptée avec scheduled_at et en attente de ce moment ; cancelled : une notification programmée annulée avant son départ, ses frais remboursés.

    scheduled_atstring

    Le moment où une notification programmée doit partir (ou devait partir). Null pour une notification envoyée immédiatement.

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

    L’expires_at donné à une notification programmée : l’heure limite de son départ. Null quand aucun n’a été donné, ce qui veut dire scheduled_at plus 24 heures.

    • Format : date-time
    • Peut être null
    livemodeboolean
    device_countinteger

    Les appareils ciblés à la prise en charge.

    collapse_keystring

    Envoyé comme apns-collapse-id d’APNs et android.collapse_key de FCM : une notification plus récente avec la même clé remplace une plus ancienne qui n’a pas encore été affichée. Null quand aucune n’a été donnée.

    • Peut être null
    free_countinteger

    Les livraisons couvertes par l’allocation gratuite mensuelle, déduction faite des remboursements.

    charge_millicentsinteger

    Le coût exact de la notification, en millicents CAD (1/1000 de cent) : les livraisons acceptées facturées multipliées par le prix, déduction faite des remboursements des livraisons rejetées.

    cost_centsinteger

    Les cents entiers que cette notification a débités du solde, souvent 0 parce que le crédit prépayé est utilisé en premier. Approximatif une fois les livraisons rejetées remboursées (le remboursement rend des millicents à une réserve partagée avec le courriel) ; charge_millicents est le chiffre exact.

  • 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.
  • 4XXRéponse par défaut

Exemple

const { data: push, error } = await honkio.push.get('PUSH_ID')
if (error) throw new Error(error.message)
for (const delivery of push.deliveries ?? []) console.log(delivery.device_id, delivery.status, delivery.error_code)
patch/v1/push/{id}

Reprogrammer une notification push programmée

Seulement tant que la notification est scheduled (sinon 422 PUSH_NOT_SCHEDULED). Les frais ne changent pas. La notification compte dans la limite quotidienne de son nouveau jour : 429 PUSH_DAILY_CAP quand ce jour est complet. Envoie push.rescheduled.

Nécessite push:m.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Corps de la requête

La nouvelle heure d’envoi d’une notification push programmée.

ChampTypeDescription
scheduled_atobligatoirestring

Une date et heure ISO 8601 avec décalage horaire, de 1 minute à 30 jours à l’avance.

  • Format : date-time
expires_atstring

L’heure limite de son départ : de 1 minute à 24 heures après le nouveau scheduled_at, ou null pour scheduled_at plus 24 heures. S’il est omis, l’expires_at enregistré est gardé s’il convient encore au nouveau scheduled_at, et abandonné (retour au délai par défaut de 24 heures) sinon.

  • Format : date-time
  • Peut être null

Réponses

  • 200La nouvelle heure d’envoi de la notification.
    ChampTypeDescription
    idobligatoirestring
    statusobligatoirestring
    • Une valeur parmi : scheduled
    scheduled_atobligatoirestring
    • Format : date-time
    expires_atobligatoirestring

    L’expires_at maintenant enregistré, ou null pour scheduled_at plus 24 heures.

    • Format : date-time
    • 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.
  • 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 (details.resource "push") : aucune notification push avec cet identifiant dans le mode de la clé appelante.Le corps d’erreur standard.
  • 422PUSH_NOT_SCHEDULED (seule une notification scheduled peut être déplacée ; details.current_status indique son état actuel) ou VALIDATION_ERROR (scheduled_at doit être de 1 minute à 30 jours à l’avance ; expires_at de 1 minute à 24 heures après).Le corps d’erreur standard.
  • 429PUSH_DAILY_CAP : le jour vers lequel la notification serait déplacée a déjà atteint la limite quotidienne de notifications push. Les détails indiquent la limite et le moment de sa réinitialisation.Le corps d’erreur standard.
  • 500Erreur de serveur inattendue.Le corps d’erreur standard.
  • 4XXRéponse par défaut

Exemple

const { data, error } = await honkio.push.update('PUSH_ID', { scheduledAt: '2026-10-01T14:00:00Z' })
if (error) throw new Error(error.message)
console.log(data.scheduled_at, data.expires_at) // expires_at: null means scheduled_at plus 24 hours
delete/v1/push/{id}

Annuler une notification push programmée

Seulement tant que la notification est scheduled (sinon 422 PUSH_NOT_SCHEDULED). Ce qu’elle avait réservé est rendu (les frais remboursés, les livraisons gratuites rendues au mois) et push.cancelled est envoyé. Irréversible.

Nécessite push:d.

Paramètres

ParamètreTypeDescription
idobligatoirecheminstring

Réponses

  • 204Annulée : les frais remboursés et les livraisons gratuites rendues au mois.
  • 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 (details.resource "push") : aucune notification push avec cet identifiant dans le mode de la clé appelante.Le corps d’erreur standard.
  • 422PUSH_NOT_SCHEDULED : seule une notification scheduled peut être annulée ; details.current_status indique son état actuel.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.
  • 4XXRéponse par défaut

Exemple

const { error } = await honkio.push.cancel('PUSH_ID')
if (error) throw new Error(error.message)