Push & alertes de sécurité
Une fois un utilisateur appairé, le backend pousse deux familles de notifications vers ses appareils, toutes signées en HMAC #1 :
send/auth-challenge— une invite Approuver / Refuser (TOTP, golden number, biométrie).send/security-alert— une notification passive (sans boutons), par exemple « nouvelle connexion approuvée ».
Les deux diffusent (fan-out) vers tous les jetons d’appareil que l’utilisateur a enregistrés pour le tenant appelant.
Envoyer un challenge d’approbation
Section intitulée « Envoyer un challenge d’approbation »custom_type choisit l’UX rendue par l’appareil (totp, goldenNumber ou
localAuth). instruction_id est votre identifiant de corrélation —
réutilisez-le ensuite avec fetch/delivery-status. ttl_seconds va de 10 à 600
(défaut 180).
curl $BASE_URL/api/v1/relay/send/auth-challenge \ -X POST \ -H "X-Bloonio-Tenant-Id: tnt_..." \ -H "X-Bloonio-Timestamp: 1718966400000" \ -H "X-Bloonio-Signature: <hex_hmac_sha256>" \ -H "Content-Type: application/json" \ -d '{ "user_socket_hash": "9f86d081884c7d659a2feaa0c55ad015", "instruction_id": "instr_abc123", "custom_type": "totp", "expected_action": "transfer_funds", "backend_url": "https://api.example.com", "description": "Confirmer un virement", "ttl_seconds": 180 }'Pour un challenge golden number, passez custom_type: "goldenNumber" et la
liste de nombres candidats dans numbers :
curl $BASE_URL/api/v1/relay/send/auth-challenge \ -X POST \ -H "X-Bloonio-Tenant-Id: tnt_..." \ -H "X-Bloonio-Timestamp: 1718966400000" \ -H "X-Bloonio-Signature: <hex_hmac_sha256>" \ -H "Content-Type: application/json" \ -d '{ "user_socket_hash": "9f86d081884c7d659a2feaa0c55ad015", "instruction_id": "instr_def456", "custom_type": "goldenNumber", "expected_action": "login", "backend_url": "https://api.example.com", "numbers": [17, 42, 88], "ttl_seconds": 120 }'Vous pouvez joindre un bloc d’affichage structuré (display) pour que l’app
rende des champs typés (montant, IBAN masqué, nom de partie, etc.) :
{ "display": { "title": "Confirmer le virement", "subtitle": "Vérifiez les détails avant d'approuver", "fields": [ { "key": "amount", "title": "Montant", "value": "1000 USD", "data_type": "CURRENCY_USD" }, { "key": "to", "title": "Bénéficiaire", "value": "ACME Corp", "data_type": "PARTY_NAME" } ] }}Réponse en cas de livraison vers au moins un appareil :
{ "success": true, "status_code": 200, "message": "Challenge pushed to 1 device(s)", "data": { "instruction_id": "instr_abc123", "delivered_count": 1, "failed_count": 0, "fcm_message_ids": ["projects/.../messages/..."], "failed_tokens_sample": [], "sent_at": "2026-06-21T..." }}Envoyer une alerte de sécurité
Section intitulée « Envoyer une alerte de sécurité »Notification passive — pas de catégorie de challenge, pas de boutons
Approuver / Refuser. kind est un indice de sévérité (sign_in, security,
info) que l’app mappe sur une icône / teinte de la boîte de réception.
ttl_seconds va de 60 à 604 800 (défaut 86 400).
curl $BASE_URL/api/v1/relay/send/security-alert \ -X POST \ -H "X-Bloonio-Tenant-Id: tnt_..." \ -H "X-Bloonio-Timestamp: 1718966400000" \ -H "X-Bloonio-Signature: <hex_hmac_sha256>" \ -H "Content-Type: application/json" \ -d '{ "user_socket_hash": "9f86d081884c7d659a2feaa0c55ad015", "title": "Nouvelle connexion", "body": "Une nouvelle connexion web a été approuvée sur votre compte.", "kind": "sign_in", "notification_id": "ntf_abc123" }'{ "success": true, "status_code": 200, "message": "Security alert pushed to 1 device(s)", "data": { "instruction_id": "ntf_abc123", "delivered_count": 1, "failed_count": 0, "fcm_message_ids": ["projects/.../messages/..."], "failed_tokens_sample": [], "sent_at": "2026-06-21T..." }}Les codes d’échec (404 / 502 / 503) sont identiques à ceux de
send/auth-challenge.
Vérifier le statut de livraison
Section intitulée « Vérifier le statut de livraison »Récupérez l’enregistrement de livraison d’un push déjà envoyé, par
instruction_id.
curl "$BASE_URL/api/v1/relay/fetch/delivery-status?instruction_id=instr_abc123" \ -H "X-Bloonio-Tenant-Id: tnt_..." \ -H "X-Bloonio-Timestamp: 1718966400000" \ -H "X-Bloonio-Signature: <hex_hmac_sha256>"S’il n’existe aucun enregistrement pour cet instruction_id, le relais renvoie
404.