SMS

Tarifs et limites

Le coût de chaque SMS, vérification et numéro, lu à l’exécution, et les limites d’envoi qui gardent le marketing de masse hors de la plateforme.

Tarification

Les prix sont définis à l'exécution et peuvent changer sans nouvelle version : lisez-les plutôt que de les coder en dur. Tous les montants sont en cents CAD. L'envoi est facturé par partie SMS : message_cost_cents × le nombre de parties en lesquelles l'opérateur découpe le texte. Les parties sont comptées comme l'opérateur les compte : guillemets typographiques, tirets et points de suspension sont convertis en GSM-7 (160 caractères, puis 153 par partie), tandis que les émojis et la plupart des lettres accentuées imposent des parties Unicode (70, puis 67). Le montant est ajusté au décompte de l'opérateur après l'envoi. Un message refusé d'emblée par l'opérateur ne coûte rien, pas plus qu'un envoi vers un central réservé (555-XXXX et semblables), refusé ici ; un message accepté par l'opérateur mais non livré conserve ses frais. Un texte de plus de 10 parties est rejeté avec 422 MESSAGE_TOO_LONG avant toute facturation. verification_cost_cents couvre un OTP typique d'une seule partie ; un app_name long ou non GSM peut ajouter une partie. phone_number_activation_fee_cents est facturé une seule fois, avec le premier mois, pour chaque numéro provisionné, local ou sans frais, et n'est pas remboursé à la libération. inbound_message_cost_cents est facturé par partie pour chaque SMS reçu sur un numéro provisionné, quel que soit l'expéditeur ou l'opérateur, sauf les mots-clés STOP, START et HELP ; un message reçu est débité même si le solde passe sous zéro, ce qui suspend l'envoi jusqu'à la prochaine recharge.

bash
# Current prices, in CAD cents
curl https://api.honkio.ca/v1/pricing \
  -H "Authorization: Bearer mk_live_YOUR_KEY"

# Response 200:
# {
#   "message_cost_cents": 3,
#   "verification_upcharge_cents": 25,
#   "verification_cost_cents": 28,
#   "phone_number_upfront_cost_cents": 250,
#   "phone_number_monthly_cost_cents": 250,
#   "phone_number_activation_fee_cents": 100,
#   "inbound_message_cost_cents": 3
# }

Les requêtes en mode test sont tarifées de façon identique dans la réponse, mais ne sont jamais facturées : vous pouvez donc voir ce que coûterait une intégration sans rien dépenser.

Limites d’envoi

HonkIO est conçu pour la messagerie transactionnelle et relationnelle, pas pour les campagnes, et la délivrabilité de chaque client repose sur un profil opérateur partagé. Ces limites gardent le marketing de masse hors de la plateforme ; une clinique, un entrepreneur ou un SaaS qui envoie des codes ne les remarquera pas. Les limites d’envoi s’appliquent uniquement au mode réel ; la règle sur les raccourcisseurs de liens, les vérifications de destination réservée et injoignable, et le plafond de taille des diffusions s’appliquent aux deux modes.

  • Plafond quotidien : les nouveaux comptes peuvent envoyer 250 messages réels par 24 heures glissantes. Il ne se lève pas de lui-même. 30 jours après votre premier message réel, vous pouvez demander un volume plus élevé depuis le tableau de bord ; l’approbation fixe 1 000 par jour ou le chiffre demandé. Les envois refusés renvoient 429 DAILY_LIMIT_REACHED avec votre limite et votre compte.
  • Messages identiques : un même corps de message peut atteindre au plus 250 destinataires distincts par 24 heures (429 FANOUT_LIMIT_REACHED). Les messages personnalisés ne sont pas concernés.
  • Débit par numéro : 6 messages par minute par numéro d’envoi, le maximum qu’un opérateur canadien accepte d’un numéro à 10 chiffres (429 NUMBER_RATE_LIMITED avec Retry-After).
  • Diffusions : jusqu’à 250 destinataires par diffusion de groupe et 3 diffusions par 24 heures (422 BROADCAST_TOO_LARGE, 429 BROADCAST_LIMIT_REACHED).
  • Les raccourcisseurs de liens (bit.ly, tinyurl et similaires) sont refusés dans les deux modes, car les opérateurs les filtrent (422 LINK_SHORTENER_BLOCKED). Utilisez l’URL complète.
  • Avertissement de livraison, puis pause automatique : si plus de 10 % de vos 50 derniers messages réels échouent chez l’opérateur, vous recevez un courriel (et l’événement account.delivery_warning) sans aucune pause. Si plus de 1 % des destinataires répondent STOP, ou plus de 5 % des messages sont rejetés par les opérateurs, sur vos envois récents, l’envoi réel est suspendu 24 heures et vous êtes avisé par courriel (403 SENDING_PAUSED avec l’heure de reprise ; l’événement account.sending_paused est émis).
  • Rechargements : le solde ne peut dépasser 500 $ et les rechargements sont limités à 1 000 $ par 30 jours. Relevés sur demande.
  • Plafond par destinataire : 30 messages vers un même destinataire par heure et 100 par 24 heures (429 RECIPIENT_RATE_LIMITED avec Retry-After). Une conversation bidirectionnelle n’en approche jamais ; un script qui réessaie le même numéro, oui.
  • Les messages non livrés sont facturés : un message accepté par l’opérateur mais non livré conserve ses frais. Un central réservé (555-XXXX, centraux N11 comme 411 ou 911, codes de test des opérateurs, centraux commençant par 0 ou 1) est refusé sans frais avec 422 RESERVED_DESTINATION, en mode test aussi, et un indicatif régional réservé (555, 911 et semblables) comme tout numéro non canadien. Tout ce qui réessaie devrait envoyer un en-tête Idempotency-Key afin qu’une nouvelle tentative ne devienne jamais un second débit. Une heure de dépenses inhabituelles déclenche un courriel et l’événement account.spend_warning.
  • Numéros injoignables : après 3 échecs consécutifs chez l’opérateur vers un même numéro en 30 jours, tous clients HonkIO confondus, les envois vers ce numéro sont refusés sans frais (422 UNDELIVERABLE_NUMBER avec le nombre d’échecs, la date d’inscription et la date d’expiration) pendant 90 jours, puis réessayés au cas où le numéro aurait été réattribué.
  • Plafond entrant : chaque compte peut recevoir au plus 1 000 textos par fenêtre glissante de 24 heures par défaut (relevé par le soutien sur demande). Les textos au-delà du plafond sont enregistrés sans leur contenu, sans frais, et ne déclenchent pas message.received ; le premier de la fenêtre déclenche account.inbound_sms_capped. STOP, START et HELP sont toujours traités.
bash
curl https://api.honkio.ca/v1/send-limit \
  -H "Authorization: Bearer mk_live_YOUR_KEY"

# → { "daily_limit": 250, "sent_last_24h": 12, "remaining": 238,
#     "recipient_rate_per_hour": 30, "recipient_rate_per_day": 100,
#     "probation": { "ends_at": "2026-09-26T14:02:11.000Z", "eligible_to_request": false },
#     "paused_until": null, "requests": [] }

Consultez vos limites et votre utilisation avec GET /v1/send-limit, et déposez une demande avec POST /v1/send-limit/requests. Chaque chiffre ci-dessus est une valeur par défaut de la plateforme qui peut être relevée par compte.