Référence de l’API
Push
Envoyer des notifications push par APNs et FCM avec vos propres identifiants.
/v1/push/appsLister les applications push
push:rSDK Node.jshonkio.push.apps.list()Nécessite push:r.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
limitrequête | string | De 1 à 100. Valeur par défaut : 50. |
cursorrequête | string | 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.
Champ Type Description 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)curl https://api.honkio.ca/v1/push/apps \
-H "Authorization: Bearer mk_live_YOUR_KEY"/v1/push/appsCréer une application push
push:wSDK Node.jshonkio.push.apps.create()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).
| Champ | Type | Description |
|---|---|---|
nameobligatoire | string | Le nom que vous donnez à l’application, jusqu’à 100 caractères, sans lien.
|
apns | object | 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_p8obligatoire | string | Le contenu du fichier .p8, lignes BEGIN et END comprises.
|
key_idobligatoire | string | Le Key ID de 10 caractères qu’Apple affiche pour la clé.
|
team_idobligatoire | string | Votre Team ID Apple Developer.
|
bundle_idobligatoire | string | L’identifiant de paquet (bundle identifier) de l’application, envoyé comme apns-topic.
|
fcm | object | Le compte de service Firebase qui envoie pour l’application. Vérifié auprès de Google avant d’être enregistré ; jamais renvoyé. |
service_account_jsonobligatoire | string | Le fichier de clé JSON du compte de service, sous forme de chaîne.
|
placeholder_title | string | Le titre que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.
|
placeholder_body | string | Le corps que voient Apple et Google sur une notification chiffrée, affiché si l’appareil ne peut pas la déchiffrer.
|
require_encryption | boolean | 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.
Champ Type Description 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)curl -X POST https://api.honkio.ca/v1/push/apps \
-H "Authorization: Bearer mk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Courier"
}'/v1/push/apps/{id}Obtenir une application push
push:rSDK Node.jshonkio.push.apps.get()Nécessite push:r.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
idobligatoirechemin | string |
Réponses
200L’application.
Champ Type Description 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)curl https://api.honkio.ca/v1/push/apps/ID \
-H "Authorization: Bearer mk_live_YOUR_KEY"/v1/push/apps/{id}Mettre à jour une application push
push:mSDK Node.jshonkio.push.apps.update()Nécessite push:m.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
idobligatoirechemin | string |
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.
| Champ | Type | Description |
|---|---|---|
name | string | Le nom que vous donnez à l’application, jusqu’à 100 caractères, sans lien.
|
apns | object | 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_p8obligatoire | string | Le contenu du fichier .p8, lignes BEGIN et END comprises.
|
key_idobligatoire | string | Le Key ID de 10 caractères qu’Apple affiche pour la clé.
|
team_idobligatoire | string | Votre Team ID Apple Developer.
|
bundle_idobligatoire | string | L’identifiant de paquet (bundle identifier) de l’application, envoyé comme apns-topic.
|
fcm | object | Le compte de service Firebase qui envoie pour l’application. Vérifié auprès de Google avant d’être enregistré ; jamais renvoyé. |
service_account_jsonobligatoire | string | Le fichier de clé JSON du compte de service, sous forme de chaîne.
|
placeholder_title | string | 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.
|
placeholder_body | string | 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.
|
web_push_subject | string | 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.
|
require_encryption | boolean | 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.
Champ Type Description 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)curl -X PATCH https://api.honkio.ca/v1/push/apps/ID \
-H "Authorization: Bearer mk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme mobile (prod)",
"require_encryption": true
}'/v1/push/apps/{id}Supprimer une application push
push:dSDK Node.jshonkio.push.apps.delete()Nécessite push:d.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
idobligatoirechemin | string |
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)curl -X DELETE https://api.honkio.ca/v1/push/apps/ID \
-H "Authorization: Bearer mk_live_YOUR_KEY"/v1/push/apps/{id}/web/vapid-keysGénérer ou importer la paire de clés push Web
push:mSDK Node.jshonkio.push.web.setVapidKeys()Nécessite push:m.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
idobligatoirechemin | string |
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.
| Champ | Type | Description |
|---|---|---|
public_key | string | Pour importer : la clé publique P-256, non compressée, en base64url (l’applicationServerKey avec laquelle votre site s’est abonné).
|
private_key | string | Pour importer : la clé privée correspondante de 32 octets, en base64url. Chiffrée au repos et jamais renvoyée.
|
subject | string | 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.
|
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).
Champ Type Description 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)curl -X POST https://api.honkio.ca/v1/push/apps/ID/web/vapid-keys \
-H "Authorization: Bearer mk_live_YOUR_KEY"/v1/push/devicesLister les appareils enregistrés
push:rSDK Node.jshonkio.push.devices.list()Nécessite push:r.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
app_idrequête | string | |
user_idrequête | string | |
activerequête | string | true ou false. |
limitrequête | string | De 1 à 100. Valeur par défaut : 50. |
cursorrequête | string | 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.
Champ Type Description 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)curl https://api.honkio.ca/v1/push/devices \
-H "Authorization: Bearer mk_live_YOUR_KEY"/v1/push/devicesEnregistrer un jeton d’appareil
push_devices:wSDK Node.jshonkio.push.devices.register()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é.
| Champ | Type | Description |
|---|---|---|
app_idobligatoire | string | L’application push à laquelle appartient l’appareil.
|
token | string | Le jeton d’appareil APNs ou FCM, tel que la plateforme le remet à votre application. Obligatoire pour iOS et Android ; non envoyé pour web.
|
platformobligatoire | string | ios, android ou web.
|
user_idobligatoire | string | Votre propre identifiant pour la personne, jusqu’à 255 caractères. Un envoi à ce user_id atteint chacun de ses appareils et navigateurs actifs.
|
apns_environment | string | sandbox ou production, obligatoire pour iOS : l’environnement APNs avec lequel la version s’est enregistrée (les versions de débogage utilisent sandbox).
|
subscription | object | 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. |
endpointobligatoire | string | L’URL du service push remise au navigateur.
|
expirationTime | number | Tel que le navigateur le donne ; non stocké.
|
keysobligatoire | object | Les clés du navigateur pour lesquelles le contenu est chiffré (RFC 8291). |
p256dhobligatoire | string | La clé publique P-256 du navigateur, en base64url.
|
authobligatoire | string | Le secret d’authentification de 16 octets, en base64url.
|
encryption_public_key | string | 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é.
|
Réponses
200L’appareil, enregistré ou rafraîchi.
Champ Type Description 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)curl -X PUT https://api.honkio.ca/v1/push/devices \
-H "Authorization: Bearer mk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"app_id": "papp_0123456789abcdef01234567",
"platform": "ios",
"user_id": "user_42"
}'/v1/push/devices/{id}Désinscrire un appareil
push_devices:dSDK Node.jshonkio.push.devices.delete()Nécessite push_devices:d.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
idobligatoirechemin | string |
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)curl -X DELETE https://api.honkio.ca/v1/push/devices/ID \
-H "Authorization: Bearer mk_live_YOUR_KEY"/v1/pushLister les notifications push
push:rSDK Node.jshonkio.push.list()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ètre | Type | Description |
|---|---|---|
app_idrequête | string | |
user_idrequête | string | |
statusrequête | string | L’une des valeurs queued, sending, sent, failed, fell_back. |
created_afterrequête | string | Date et heure ISO 8601 avec décalage horaire : création à ce moment ou après. |
created_beforerequête | string | Date et heure ISO 8601 avec décalage horaire : création à ce moment ou avant. |
limitrequête | string | De 1 à 100. Valeur par défaut : 50. |
cursorrequête | string | 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.
Champ Type Description 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)curl https://api.honkio.ca/v1/push \
-H "Authorization: Bearer mk_live_YOUR_KEY"/v1/pushEnvoyer une notification push
push:wSDK Node.jshonkio.push.send()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ètre | Type | Description |
|---|---|---|
Idempotency-Keyen-tête | string |
|
Corps de la requête
Une notification push : une application, une cible, et un titre, un corps, des données ou un modèle.
| Champ | Type | Description |
|---|---|---|
app_idobligatoire | string | L’application push avec laquelle envoyer.
|
toobligatoire | object | Exactement l’un de user_id (chaque appareil actif de cet utilisateur) ou device_id (un seul appareil). |
user_id | string | Votre propre identifiant pour la personne.
|
device_id | string | Un appareil enregistré (pdev_…).
|
title | string | Le titre de la notification, jusqu’à 1 000 caractères. Pas avec un modèle.
|
body | string | 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.
|
template | string | 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.
|
variables | object | 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. |
language | string | 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.
|
data | object | 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. |
badge | integer | Le nombre à afficher sur le badge iOS, 0 pour l’effacer.
|
sound | string | Le son à jouer : un fichier son intégré à l’application, ou default.
|
thread_id | string | Regroupe les notifications sur iOS (thread-id) et Android (tag).
|
ttl | integer | 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.
|
priority | string | high (la valeur par défaut) ou normal. normal permet à l’appareil d’économiser l’énergie et peut retarder la livraison.
|
collapse_key | string | 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. |
fallback | object | Un SMS à envoyer à la place quand aucun appareil n’accepte la notification. La clé a besoin de messages:w. |
smsobligatoire | object | |
toobligatoire | string | Le numéro mobile auquel envoyer le SMS, au format E.164.
|
fromobligatoire | string | L’un de vos numéros, au format E.164.
|
bodyobligatoire | string | Le texte, jusqu’à 1 600 caractères.
|
scheduled_at | string | Envoi différé : une date et heure ISO 8601 avec décalage horaire, de 1 minute à 30 jours à l’avance.
|
expires_at | string | 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é.
|
Réponses
202Réponse par défaut
Champ Type Description 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)curl -X POST https://api.honkio.ca/v1/push \
-H "Authorization: Bearer mk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"app_id": "papp_0123456789abcdef01234567",
"to": {
"user_id": "user_42"
}
}'/v1/push/usageNotifications push gratuites utilisées ce mois-ci
push:rSDK Node.jshonkio.push.usage()Nécessite push:r.
Réponses
200L’allocation gratuite du mois et son utilisation.
Champ Type Description 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)curl https://api.honkio.ca/v1/push/usage \
-H "Authorization: Bearer mk_live_YOUR_KEY"/v1/push/{id}Obtenir une notification push par identifiant
push:rSDK Node.jshonkio.push.get()Nécessite push:r.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
idobligatoirechemin | string |
Réponses
200Réponse par défaut
Champ Type Description 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)curl https://api.honkio.ca/v1/push/ID \
-H "Authorization: Bearer mk_live_YOUR_KEY"/v1/push/{id}Reprogrammer une notification push programmée
push:mSDK Node.jshonkio.push.update()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ètre | Type | Description |
|---|---|---|
idobligatoirechemin | string |
Corps de la requête
La nouvelle heure d’envoi d’une notification push programmée.
| Champ | Type | Description |
|---|---|---|
scheduled_atobligatoire | string | Une date et heure ISO 8601 avec décalage horaire, de 1 minute à 30 jours à l’avance.
|
expires_at | string | 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.
|
Réponses
200La nouvelle heure d’envoi de la notification.
Champ Type Description 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 hourscurl -X PATCH https://api.honkio.ca/v1/push/ID \
-H "Authorization: Bearer mk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"scheduled_at": "2026-10-01T14:00:00Z"
}'/v1/push/{id}Annuler une notification push programmée
push:dSDK Node.jshonkio.push.cancel()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ètre | Type | Description |
|---|---|---|
idobligatoirechemin | string |
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)curl -X DELETE https://api.honkio.ca/v1/push/ID \
-H "Authorization: Bearer mk_live_YOUR_KEY"
HonkIO