Passer au contenu principal
L’API REST Flowella vous permet d’envoyer des messages WhatsApp, de gérer les contacts et les désinscriptions, de travailler avec les modèles et les Flows, et de lire les données analytiques depuis votre propre code. Cette page présente ce que vous devez savoir avant d’appeler un endpoint. La section Endpoints de cette référence API documente chaque requête. Pour la liste complète et à jour, utilisez le document OpenAPI en ligne ou la documentation API interactive de l’application.

URL de base

Chaque endpoint se trouve sous cette base, par exemple https://api.flowella.io/v1/messages. Utilisez-la même lorsque l’application affiche une adresse se terminant par /api/v1, comme API base URL dans le Developer hub.
Les requêtes adressées à l’hôte de l’application, https://app.flowella.io/api/v1/..., sont redirigées de façon permanente (308) vers https://api.flowella.io/v1/.... De nombreux clients HTTP suppriment l’en-tête Authorization lorsqu’ils suivent une redirection vers un autre hôte, de sorte que la requête redirigée peut échouer avec 401. Appelez directement https://api.flowella.io/v1.

Authentification

Envoyez un jeton bearer dans l’en-tête Authorization de chaque requête :
Flowella accepte deux types de jeton. Tous deux n’agissent que sur une seule organisation. Utilisez une clé API pour vos propres scripts et intégrations. Utilisez une application OAuth lorsque d’autres organisations Flowella installent votre intégration.
Traitez les clés et les jetons comme des mots de passe. Ne les enregistrez jamais dans un système de gestion de code source et ne les collez jamais dans une messagerie ou des documents partagés. Révoquez une clé dont vous n’avez plus besoin dans Clés API.

Vérifier vos identifiants

Appelez l’endpoint ping pour confirmer qu’une clé ou un jeton fonctionne :
Une réponse 200 OK signifie que vous êtes authentifié. organizationId est l’identifiant numérique de votre organisation :
Une réponse 401 porte le code UNAUTHORIZED et l’un des messages suivants : Missing bearer token, Invalid or expired API key, Invalid or expired access token ou Unsupported bearer token.

Scopes

Chaque endpoint nécessite un scope. Les clés API créées dans l’application disposent de tous les scopes. Les jetons d’accès OAuth n’ont que les scopes accordés lors de l’autorisation. GET /v1/ping et GET /v1/rate-limits ne nécessitent aucun scope. GET /v1/capabilities (scope account:read) liste les scopes dont dispose votre jeton. Une requête sans le scope requis renvoie 403 avec le code INSUFFICIENT_SCOPE. details.required liste les scopes manquants :

Erreurs

Les erreurs utilisent toutes la même enveloppe. requestId identifie la requête lorsque vous contactez l’assistance, et details contient des informations supplémentaires, comme les problèmes de validation, le cas échéant :
La valeur error.code est stable, votre code peut donc s’y fier. Le texte error.message est destiné aux personnes et peut changer.

Limites de débit

Chaque clé API et chaque jeton d’accès OAuth dispose de sa propre limite de requêtes par minute. Flowella compte les requêtes dans des fenêtres fixes d’une minute qui commencent à la minute pile (UTC). Les réponses aux requêtes qui passent les vérifications d’authentification et de scope incluent ces en-têtes : Lorsque vous dépassez la limite, Flowella renvoie 429 avec le code RATE_LIMITED et un en-tête Retry-After indiquant le nombre de secondes à attendre. GET /v1/rate-limits renvoie vos valeurs limit, remaining et reset au format JSON. Pour les envois importants, utilisez POST /v1/templates/send, qui accepte jusqu’à 50 000 destinataires en une seule requête. La requête accepte aussi un champ facultatif throttlePerHour, un nombre entier de 1 à 100 000, mais il ne régule pas les envois pour le moment, ne vous y fiez donc pas. Pour étaler un envoi important dans le temps, divisez la liste des destinataires en lots plus petits et envoyez chaque lot séparément.

Identifiants de requête

Les réponses incluent un en-tête X-Request-Id, et les corps d’erreur le reprennent sous error.requestId. POST /v1/templates/send fait exception : consultez Envois groupés de modèles. Pour utiliser votre propre identifiant, envoyez un en-tête X-Request-Id de 128 caractères au maximum et Flowella le réutilise. Communiquez l’identifiant de requête lorsque vous contactez l’assistance. Pour consulter une requête vous-même, appelez GET /v1/requests/{requestId} (scope account:read) : il renvoie la requête journalisée avec les événements, tâches et livraisons de webhooks qui y sont liés. Le Developer hub liste vos requêtes récentes et leurs identifiants.

Idempotence

Les clés d’idempotence vous permettent de relancer une requête d’écriture après un délai dépassé ou une erreur réseau sans effectuer le travail deux fois. POST /v1/templates/send suit ses propres règles, décrites ci-dessous.

La plupart des requêtes d’écriture

Les requêtes POST, PATCH, PUT et DELETE acceptent un en-tête facultatif Idempotency-Key :
  • La clé doit comporter de 8 à 255 caractères. Les autres longueurs renvoient 400.
  • Flowella mémorise chaque clé pour votre organisation pendant 24 heures.
  • Une répétition avec la même clé, la même méthode, le même chemin et le même corps renvoie la réponse enregistrée sans exécuter à nouveau la requête.
  • Une répétition avec la même clé mais une méthode, un chemin ou un corps différent renvoie 409 IDEMPOTENCY_KEY_CONFLICT.
  • Une répétition envoyée alors que la première requête est encore en cours renvoie 409 IDEMPOTENCY_KEY_IN_FLIGHT. Patientez puis réessayez.
  • Les réponses renvoient la clé dans un en-tête Idempotency-Key.
Les requêtes sans cet en-tête s’exécutent normalement, sans protection contre les doublons.

Envois groupés de modèles

Les envois groupés de modèles sont asynchrones. POST /v1/templates/send valide la requête, la met en file d’attente de manière durable et renvoie immédiatement 202 Accepted :
Flowella envoie le lot en arrière-plan et relance automatiquement les erreurs WhatsApp temporaires. Les destinataires sont traités individuellement, de sorte qu’un numéro invalide ne bloque pas le reste du lot. Suivez la progression de la livraison dans l’onglet Statistics du modèle dans l’application. Transmettez un en-tête Idempotency-Key qui identifie chaque lot :
Cet endpoint gère les clés différemment des autres requêtes d’écriture :
  • La clé peut comporter jusqu’à 200 caractères. Une clé plus longue renvoie 400.
  • Une répétition avec la même clé dans un délai de 7 jours renvoie l’id d’origine et n’envoie rien, même si le corps a changé.
  • Sans l’en-tête, Flowella utilise un hachage du corps de la requête comme clé. Si vous renvoyez un corps identique octet pour octet dans un délai de 7 jours, vous récupérez l’id d’origine et rien n’est envoyé. Utilisez une nouvelle clé pour chaque lot que vous souhaitez envoyer.
D’autres comportements diffèrent aussi pour cet endpoint :
  • Appelez-le avec une clé API. Les jetons d’accès OAuth sont refusés avec 401.
  • Ses réponses n’incluent pas les en-têtes X-Request-Id, API-Version ni X-RateLimit-*. Ses requêtes sont tout de même décomptées de la limite de débit de la clé.

Versionnage

Vous pouvez fixer la version de l’API avec l’en-tête API-Version :
2026-08-11 est la seule version prise en charge et la version par défaut si vous omettez l’en-tête. Toute autre valeur, ou une valeur qui n’est pas une date YYYY-MM-DD, renvoie 400 avec le message Unsupported API-Version. Les réponses renvoient la version dans les en-têtes API-Version et X-Flowella-Api-Version.

Sandbox

Le sandbox vous permet de tester une intégration sans rien envoyer à WhatsApp. Il fonctionne sur votre organisation réelle : il n’existe pas de compte de test distinct. Vous pouvez l’utiliser de deux façons :
  • Une clé sandbox, qui n’affecte que les requêtes effectuées avec cette clé. Consultez Clés sandbox.
  • Le API sandbox à l’échelle de l’organisation dans le Developer hub, qu’un Owner ou un Admin peut activer. Consultez API sandbox.
Lorsque le sandbox s’applique, POST /v1/messages enregistre le message et renvoie "sandbox": true sans contacter Meta, et la soumission de modèles renvoie une décision simulée instantanée. Les outils de test du sandbox sous /v1/test/ et /v1/sandbox nécessitent le scope sandbox:manage.

Pagination

Les endpoints de liste, comme /v1/conversations, /v1/contacts et /v1/templates, utilisent une pagination par curseur :
  • Transmettez limit (de 1 à 100, 25 par défaut) et un cursor facultatif.
  • La réponse contient items et, lorsqu’il reste des résultats, un nextCursor.
  • Renvoyez nextCursor comme paramètre cursor pour récupérer la page suivante.
  • Lorsque nextCursor est absent ou vaut null, vous avez atteint la fin.

Date et heure

Tous les horodatages sont des chaînes ISO 8601 en UTC, par exemple 2025-01-15T14:30:00.000Z. Lorsque l’API accepte des dates, les valeurs date seule (2025-01-15) et ISO 8601 complètes fonctionnent toutes deux.

Numéros de téléphone

Transmettez les numéros de téléphone au format E.164 (+15551234567) dans la mesure du possible. Flowella normalise les variantes courantes, mais E.164 reste le plus sûr.

Canaux

De nombreux endpoints acceptent un whatsappChannelId. Si votre organisation n’a qu’un seul canal et que vous l’omettez, Flowella utilise votre canal par défaut. Si vous avez plusieurs canaux, transmettez l’identifiant explicitement pour ne pas envoyer depuis le mauvais numéro. Pour le modèle d’URL complet et le changement de canal, consultez Multi-canal.

Spécification OpenAPI

La spécification en ligne, lisible par machine, est publique :
Importez-la dans Postman, Insomnia ou un générateur de code. Elle décrit l’authentification par clé API et par OAuth.

Ressources pour les développeurs

L’application propose d’autres ressources pour les développeurs. Ces pages sont publiques, vous pouvez donc les ouvrir sans vous connecter : Le Developer hub dans Settings regroupe ces liens avec vos requêtes API récentes et le commutateur du API sandbox.
Associez cette page à la référence des webhooks pour réagir aux événements au lieu d’interroger régulièrement l’API.
Dernière modification le 24 octobre 2026